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

26

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 (se suman al área total anterior). No importa cuál sea la forma del subpolígono, ya que es para fines de visualización.

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

Un enfoque que consideré fue obtener todos los puntos que conforman el polígono. Luego, uniría dos al azar usando una línea recta, dividiría el polígono y 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.

    
pregunta djq 19.01.2011 - 22:58

2 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álculos.

Aquí está el algoritmo básico. Su entrada consiste en cualquier dirección de barrido del plano, un polígono P de área no 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 manera que la diferencia entre el área de la derecha y el área objetivo a no es mayor que t .

Sea L una 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 todo. Consideremos lo que implica la codificación de esto. El hallazgo de la raíz es una rutina, puede usar una porción genérica de código para que el trabajo de SIG se reduzca a la codificación de 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. Si no, puede reemplazar la línea por un rectángulo muy grande que representa el semiplano a la derecha de la línea. El paso 1 se convierte en

1'. Clip the polygon to the rectangle.

Esa es una operación básica de realmente .

Para comenzar con la búsqueda de la raíz, debes encontrar un intervalo en el que el cero de f esté garantizado. Esto es fácil: proyecte la envolvente del polígono ("cuadro delimitador") en la dirección del barrido de líneas. La proyección es el intervalo que deseas.

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 del polígono de división huber: forums.esri.com

para discusiones, 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.

Aquí es cómo se ven los estados de los Estados Unidos continentales (en una proyección de área igual) con el tercio inferior de cada estado sombreado. Evidentemente, la dirección de barrido era vertical.

    
respondido por el whuber 20.01.2011 - 00:10
6

Hay una herramienta preparada llamada "GeoTools" de ET Spatial. Donde hay una herramienta llamada "ET Miscelánea". En esta herramienta hay dos tipos de manera de dividir polígonos a saber. Por porcentaje y por área (varias unidades, por ejemplo, metros cuadrados, hectáreas, etc.). Esta herramienta divide polígonos de cualquiera de los cuatro lados, es decir, NESW, como muestran las imágenes. Utilicé "de arriba abajo", es decir, del método Norte a Sur.

    
respondido por el SIslam 24.12.2014 - 21:54

Lea otras preguntas en las etiquetas