29 votos

¿Dividir un polígono en tamaños específicos con ArcGIS Desktop?

Tengo varios miles de polígonos de forma irregular en un shapefile. Quiero poder dividir cada polígono en tres áreas, y especificar cuál es el tamaño de esas áreas (que suman el área total anterior). No importa cuál sea la forma del sub-polígono, ya que esto es para fines de visualización.

¿Cómo puedo hacerlo? ¿Existe algún algoritmo estándar que pueda utilizar?


Un enfoque que consideré fue obtener todos los puntos que componen el polígono. A continuación, uniría dos al azar mediante una línea recta, dividiría el polígono y comprobaría si el área estaba dentro de una tolerancia satisfactoria. Si era demasiado pequeña, cambiaba el punto en una dirección; si era demasiado grande, cambiaba a un punto en la dirección opuesta.

36voto

cjstehno Puntos 131

Este problema tiene muchas soluciones válidas. Una de ellas funciona un poco como tu descripción, pero en lugar de cortar los polígonos en lugares "aleatorios" puedes hacerlo a propósito de una manera diseñada para minimizar la cantidad de computación.

Este es el algoritmo básico. Su entrada consiste en cualquier dirección de barrido del plano, un polígono P de área no nula, un área objetivo a entre cero y el área del polígono, y un umbral no negativo t (en unidades de superficie). Su objetivo es dividir P con una línea perpendicular a la dirección de barrido en dos partes, una a la derecha de la línea y otra a la izquierda de la línea, de manera que la diferencia entre el área de la derecha y el área del objetivo a no es mayor que t .

Dejemos que L sea cualquier línea orientada perpendicular a la dirección de barrido. Definir f(L) como el área de P encontrada a la derecha de L, menos a . En estos términos, la tarea consiste en encontrar un cero de f . Porque f es poco probable que sea diferenciable, pero es continua, utilice un método de bisección, el método secante o mi favorito -El método de Brent . Todos son sencillos y garantizan la convergencia. Utilice t para la tolerancia de convergencia del argumento.

Eso es. Consideremos lo que supone codificar esto. El hallazgo de la raíz es rutinario - se puede utilizar un trozo de código genérico para ello - por lo que el trabajo del SIG se reduce a la codificación f . Para ello es necesario

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

Ambas operaciones se implementan en casi cualquier SIG basado en vectores. Si no es así, puede sustituir la línea por un rectángulo muy grande que represente el semiplano a la derecha de la línea. El paso 1 se convierte en

1'. Clip the polygon to the rectangle.

Esto es un realmente funcionamiento básico.

Para empezar con la búsqueda de raíces, hay que encontrar un intervalo en el que el cero de f está garantizada la mentira. Esto es fácil: proyectar la envoltura del polígono ("bounding box") en la dirección del barrido de líneas. La proyección es el intervalo que desea.

Esta cuestión tiene una larga historia. Implementé este algoritmo para ArcView 3.x hace mucho tiempo y lo describí muchas veces en los antiguos foros de usuarios de ESRI. Google

huber split polygon site:forums.esri.com

para discusiones, enlaces al código, mejoras y variaciones (como la división de polígonos en partes de tamaños deseados que sean lo más compactos posible) y algoritmos para datos raster.

Este es el aspecto de los estados continentales de EE.UU. (en una proyección de área igual) con el tercio inferior de cada estado sombreado. Evidentemente, la dirección de barrido era vertical.

alt text

7voto

Muxa Puntos 2425

Hay una herramienta preparada llamada "GeoTools" de ET Spatial. Donde hay una herramienta llamada "ET Miscellaneous". En esta herramienta hay dos tipos de formas de dividir polígonos: por porcentaje y por área (varias unidades, por ejemplo, metros cuadrados, hectáreas, etc.). Esta herramienta divide los polígonos desde cualquiera de los cuatro lados, es decir, desde el NESW, como muestran las imágenes. He utilizado el método de "arriba a abajo", es decir, de norte a sur.

Split

0voto

user22814 Puntos 196

Hay una nueva herramienta en ArcGIS Pro 2.3 llamada Subdividir polígono .

Permite dividir/subdividir un polígono dado el número de partes o el área de la parte deseada.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X