Come dividere un poligono concavo in poligoni convessi in Arcpy?


20

Sto cercando uno strumento o un algoritmo per rilevare poligoni concavi e dividerli in poligoni convessi. Come spiegato nella figura, il poligono blu è diviso in poligoni A e B.

Sto usando Arcpy sotto Arcgis 10.1

poligoni divisi


15
Forse potresti approfondire il motivo per cui lo stai facendo? Dopotutto, (a) il rilevamento è facile: un poligono concavo avrà meno area del suo scafo convesso; e (b) qualsiasi triangolazione di un poligono lo divide automaticamente in poligoni convessi, poiché tutti i triangoli sono convessi. Ciò dimostra che hai una certa flessibilità nella scelta tra le molte possibili soluzioni.
whuber

2
Questo set di strumenti vi permetterà di vedere ciò che Bill sta parlando resources.arcgis.com/gallery/file/geoprocessing/... convertire il poligono per punti quindi eseguire il Delaunay opzione

1
C'è una risposta a questo su Stack Overflow: stackoverflow.com/a/6686842/1300519 Gli algoritmi descritti non dovrebbero essere troppo difficili da scrivere usando arcpy.
Snorfalorpagus,

1
@snorf Questo sembra rispondere a una domanda leggermente diversa, ma soprattutto. Apparentemente la soluzione comporta una combinazione di "poligoni" e "buchi" , che non è ciò che di solito si intende per "scissione". Almeno, quella risposta ha bisogno di ulteriori elaborazioni per essere utile qui. (A proposito, la tua risposta è stata cambiata in un commento perché i riferimenti incrociati ad altre soluzioni altrove sul Web, senza alcuna spiegazione aggiuntiva, non sono considerati risposte qui su SE.)
whuber

2
A giudicare dai commenti qui e senza risposte, la mia raccomandazione sarebbe quella di modificare la tua domanda per incorporare quel feedback e prendere in considerazione l'offerta di una generosità.
PolyGeo

Risposte:


1

ecco alcuni passaggi per identificare i vertici dalle parti concave:

con pacco: geometria minima delimitazione (scafo) -> parcelHull

con pacco: FeatureVerticesToPoint -> parcelPoints

con parcelHull: FeatureVerticesToPoint -> parcelHullPoints

con parcelPoint e parcelHullPoint: sim simmetrico Diff -> concavePoints

in base a questi punti, puoi disegnare il bissectrice per tagliare il poligono (portando la distanza dalla linea), selezionare i bordi del triangolo Voronoï che intersecano il punto ma non condividono un segmento con il confine del pacco (seleziona per posizione dopo aver diviso il triangolo linee ai vertici), seleziona il vertice sul sito opposto e traccia una linea (punti su linea), seleziona il punto più vicino sul bordo opposto e crea una linea (punti su linea) ...

Alla fine, usa le tue linee preferite e i pacchi originali con "feature to poligono" per dividere i poligoni.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.