Dividindo o polígono em tamanhos específicos usando o ArcGIS Desktop?


26

Eu tenho vários milhares de polígonos de forma irregular em um shapefile. Quero poder dividir cada polígono em três áreas e especificar qual o tamanho dessas áreas (somadas à área total anterior). Não importa qual é a forma do sub-polígono, pois é para fins de visualização.

Como posso fazer isso? Existe um algoritmo padrão que eu possa usar?


Uma abordagem que considerei foi obter todos os pontos que compõem o polígono. Então, eu juntaria dois aleatoriamente usando uma linha reta, dividiria o polígono e verificaria se a área estava dentro de uma tolerância satisfatória. Se fosse muito pequeno, eu mudaria o ponto em uma direção; se fosse muito grande, eu mudaria para um ponto na direção oposta.

Respostas:


34

Este problema tem muitas soluções válidas. Um deles funciona um pouco como a sua descrição, mas, em vez de cortar os polígonos em locais "aleatórios", você pode fazê-lo intencionalmente, de maneira a minimizar a quantidade de computação.

Aqui está o algoritmo básico. Sua entrada consiste em qualquer direção de varredura do plano, um polígono P de área diferente de zero, uma área alvo a entre zero e a área do polígono e um limite não negativo t (em unidades de área). Seu objetivo é dividir P com uma linha perpendicular à direção da varredura em duas partes, uma à direita da linha e outra à esquerda da linha, de modo que a diferença entre a área da mão direita e a área de destino a não seja maior que t .

Seja L qualquer linha orientada perpendicular à direção da varredura. Defina f (L) como a área de P encontrada à direita de L, menos a . Nesses termos, a tarefa é encontrar um zero de f . Como é improvável que f seja diferenciável, mas seja contínuo, use um método de bissecção, o método secante ou - o meu favorito - o método de Brent . Todos são simples e garantidos para convergir. Use t para a tolerância de convergência para o argumento.

É isso aí. Vamos considerar o que é necessário para codificar isso. A descoberta da raiz é rotineira - você pode usar um pedaço genérico de código -, portanto, o trabalho GIS se resume à codificação f . Fazer isso requer

1.  Splitting the polygon by a line.
2.  Computing the area of the piece(s) to the right of the line.

Ambas as operações são implementadas em praticamente qualquer GIS baseado em vetor. Caso contrário, você pode substituir a linha por um retângulo muito grande representando o semiplano à direita da linha. O passo 1 se torna

1'. Clip the polygon to the rectangle.

Essa é uma operação realmente básica.

Para começar a localização da raiz, você precisa encontrar um intervalo no qual o zero de f esteja garantido. Isso é fácil: projete o envelope do polígono ("caixa delimitadora") na direção da varredura de linha. A projeção é o intervalo que você deseja.

Esta questão tem uma longa história. Eu implementei esse algoritmo para o ArcView 3.x há muito tempo e o descrevi várias vezes nos antigos fóruns de usuários da ESRI. Google

site de polígono dividido da huber: forums.esri.com

para discussões, links para código, aprimoramentos e variações (como dividir polígonos em partes dos tamanhos desejados, o mais compacto possível) e algoritmos para dados rasterizados.

Aqui está a aparência dos estados continentais dos EUA (em uma projeção de área igual) com o terço inferior de cada estado sombreado. Evidentemente, a direção da varredura era vertical.

texto alternativo


6

Existe uma ferramenta pronta chamada "GeoTools" da ET Spatial. Onde existe uma ferramenta chamada "ET Miscellaneous". Nesta ferramenta, existem dois tipos de maneira de dividir polígonos viz. Por porcentagem e por área (várias unidades, por exemplo, metros quadrados, hectares etc.). Essa ferramenta divide polígonos de qualquer um dos quatro lados, ou seja, NESW, como mostra a figura. Eu usei "up to down", ou seja, do norte para o sul.

Dividido


0

Há uma nova ferramenta no ArcGIS Pro 2.3 chamada Subdivide Polygon .

Ele permite dividir / subdividir um polígono com o número de peças ou a área de peça desejada.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.