¿Cómo dividir un polígono cóncavo en polígonos convexos en Arcpy?

20

Estoy buscando una herramienta o algoritmo para detectar polígonos cóncavos y dividirlos en polígonos convexos. Como se explica en la imagen, el polígono azul se divide en polígonos A y B

Estoy usando Arcpy en Arcgis 10.1

polígonos divididos

geogeek
fuente
15
¿Quizás podrías explicar por qué estás haciendo esto? Después de todo, (a) la detección es fácil: un polígono cóncavo tendrá menos área que su casco convexo; y (b) cualquier triangulación de un polígono lo divide automáticamente en polígonos convexos, porque todos los triángulos son convexos. Esto muestra que tiene cierta flexibilidad para elegir entre las muchas soluciones posibles.
whuber
2
Este conjunto de herramientas le permitirá ver lo que Bill está hablando de resources.arcgis.com/gallery/file/geoprocessing/... convertir el polígono de puntos a continuación, ejecutar la opción de Delaunay
1
Hay una respuesta a esto en Stack Overflow: stackoverflow.com/a/6686842/1300519 Los algoritmos descritos no deberían ser demasiado difíciles de escribir usando arcpy.
Snorfalorpagus
1
@snorf Eso parece responder una pregunta leve, pero importante, diferente. La solución aparentemente implica una combinación de "polígonos" y "agujeros" , que no es lo que generalmente se entiende por "división". Por lo menos, esa respuesta necesita más elaboración para ser útil aquí. (Por cierto, su respuesta se cambió a un comentario porque las referencias cruzadas a otras soluciones en otras partes de la Web, sin ninguna explicación adicional, no se consideran respuestas aquí en SE.)
whuber
2
A juzgar por los comentarios aquí y no surgen respuestas, mi recomendación sería editar su pregunta para incorporar esa retroalimentación y considerar ofrecer una recompensa.
PolyGeo

Respuestas:

1

Aquí hay algunos pasos para identificar los vértices de las partes cóncavas:

con parcela: geometría límite mínima (casco) -> parcelHull

con parcela: FeatureVerticesToPoint -> parcelPoints

con parcelHull: FeatureVerticesToPoint -> parcelHullPoints

con parcelPoint y parcelHullPoint: diferencia simétrica -> concavePoints

basado en esos puntos, puede dibujar el bisectriz para cortar su polígono (distancia de rumbo a la línea), seleccionar los bordes del triángulo de Voronoï que intersectan su punto pero no comparten un segmento con el límite de su parcela (seleccione por ubicación después de dividir el triángulo líneas en los vértices), seleccione el vértice en el sitio opuesto y haga una línea (puntos a línea), seleccione el punto más cercano en el borde opuesto y haga una línea (puntos a línea) ...

Al final, use sus líneas preferidas y las parcelas originales con "entidad a polígono" para dividir los polígonos.

radouxju
fuente