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


26

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

¿Cómo puedo hacer esto? ¿Existe un algoritmo estándar que pueda usar?


Un enfoque que consideré fue obtener todos los puntos que componen el polígono. Luego, uniría dos al azar usando una línea recta, dividiría el polígono, luego verificaría si el área estaba dentro de una tolerancia satisfactoria. Si fuera demasiado pequeño, cambiaría el punto en una dirección; si fuera demasiado grande, cambiaría a un punto en la dirección opuesta.

Respuestas:


34

Este problema tiene muchas soluciones válidas. Uno de ellos funciona un poco como su descripción, pero en lugar de cortar los polígonos en ubicaciones "aleatorias", puede hacerlo a propósito de una manera diseñada para minimizar la cantidad de cómputo.

Aquí está el algoritmo básico. Su entrada consiste en cualquier dirección de barrido de plano, un polígono P de área distinta de cero, un área objetivo a entre cero y el área del polígono, y un umbral no negativo t (en unidades de área). Su propósito 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 la otra a la izquierda de la línea, de modo que la diferencia entre el área de la derecha y el área objetivo a no sea mayor que t .

Sea L cualquier línea orientada perpendicular a la dirección de barrido. Defina f (L) como el área de P que se encuentra a la derecha de L, menos a . En estos términos, la tarea es encontrar un cero de f . Debido a que es poco probable que f sea ​​diferenciable, pero es continuo, use un método de bisección, el método secante o, mi favorito, el método de Brent . Todos son simples y garantizados para converger. Use t para la tolerancia de convergencia para el argumento.

Eso es. Consideremos qué implica codificar esto. El hallazgo de la raíz es rutinario; puede usar un fragmento genérico de código para él, por lo que el trabajo del SIG se reduce a la codificación f . Hacerlo requiere

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. De lo contrario, puede reemplazar 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

1'. Clip the polygon to the rectangle.

Esa es una operación realmente básica.

Para comenzar con la búsqueda de la raíz, debe encontrar un intervalo en el que se garantice que el cero de f se encuentra. Esto es fácil: proyecte el sobre del polígono ("cuadro delimitador") en la dirección del barrido de línea. La proyección es el intervalo que desea.

Esta pregunta 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

sitio de polígono dividido huber: forums.esri.com

para debates, enlaces a código, mejoras y variaciones (como dividir polígonos en partes de tamaños deseados que sean lo más compactos posible) y algoritmos para datos ráster.

Así es como se ven 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 del barrido era vertical.

texto alternativo


6

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

División


0

Hay una nueva herramienta en ArcGIS Pro 2.3 llamada Subdivide Polygon .

Le permite a uno dividir / subdividir un polígono dado el número de partes o el área de parte deseada.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.