Dividere il poligono in dimensioni specifiche usando ArcGIS Desktop?


26

Ho diverse migliaia di poligoni di forma irregolare in un file di forma. Voglio essere in grado di dividere ogni poligono in tre aree e specificare quale sia la dimensione di quelle aree (che sommano alla superficie totale precedente). Non importa quale sia la forma del sub-poligono, poiché è a scopo di visualizzazione.

Come posso fare per fare questo? Esiste un algoritmo standard che posso usare?


Un approccio che ho considerato era quello di ottenere tutti i punti che compongono il poligono. Quindi, unirei due casualmente insieme usando una linea retta, dividere il poligono, quindi controllare se l'area rientrava in una tolleranza soddisfacente. Se fosse troppo piccolo, cambierei il punto in una direzione; se fosse troppo grande, cambierei in un punto nella direzione opposta.

Risposte:


34

Questo problema ha molte soluzioni valide. Uno di questi funziona un po 'come la tua descrizione, ma invece di tagliare i poligoni in posizioni "casuali" puoi farlo intenzionalmente in un modo progettato per ridurre al minimo la quantità di calcolo.

Ecco l'algoritmo di base. Il suo ingresso è costituito da qualsiasi direzione del piano di spazzata, un poligono P di zona diverso da zero, un'area bersaglio una tra zero e l'area del poligono, e una soglia non negativo t (in unità di area). Il suo scopo è quello di dividere P con una linea perpendicolare alla direzione dello sweep in due parti, una a destra della linea e l'altra a sinistra della linea, in modo tale che la differenza tra l'area destra e l'area target a non sia maggiore di t .

Sia L qualsiasi linea orientata perpendicolare alla direzione di scansione. Definisci f (L) come area di P trovata a destra di L, meno a . In questi termini il compito è trovare uno zero di f . Poiché è improbabile che f sia differenziabile, ma è continuo, utilizzare un metodo di bisection, il metodo secant o il metodo del mio preferito -Brent . Tutti sono semplici e garantiti per convergere. Utilizzare t per la tolleranza di convergenza per l'argomento.

Questo è tutto. Consideriamo cosa succede nel codificare questo. La ricerca della radice è di routine - è possibile utilizzare un pezzo generico di codice per esso - quindi il lavoro GIS si riduce alla codifica f . Per farlo è necessario

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

Entrambe le operazioni sono implementate in quasi tutti i GIS basati su vettori. In caso contrario, è possibile sostituire la linea con un rettangolo molto grande che rappresenta il mezzo piano a destra della linea. Il passaggio 1 diventa

1'. Clip the polygon to the rectangle.

Questa è un'operazione davvero di base.

Per iniziare con la ricerca della radice, è necessario trovare un intervallo in cui è garantito lo zero di f . Questo è facile: proiettare l'inviluppo del poligono ("rettangolo di selezione") nella direzione dello sweep della linea. La proiezione è l'intervallo desiderato.

Questa domanda ha una lunga storia. Ho implementato questo algoritmo per ArcView 3.x molto tempo fa e l'ho descritto molte volte nei vecchi forum degli utenti ESRI. Google

sito poligonale diviso huber: forums.esri.com

per discussioni, collegamenti a codice, miglioramenti e variazioni (come la divisione di poligoni in parti delle dimensioni desiderate che sono il più compatte possibile) e algoritmi per dati raster.

Ecco come appaiono gli stati degli Stati Uniti continentali (in una proiezione di uguale area) con il terzo inferiore di ogni stato ombreggiato. Evidentemente la direzione della spazzata era verticale.

testo alternativo


6

Esiste uno strumento già pronto chiamato "GeoTools" di ET Spatial. Dove esiste uno strumento chiamato "ET Varie". In questo strumento ci sono due tipi di modi per dividere i poligoni, vale a dire. Per percentuale e per area (diverse unità, ad esempio mq, ettari ecc.). Questo strumento divide i poligoni da uno dei quattro lati, ad esempio NESW, come mostrano le immagini. Ho usato il metodo "up to down", cioè da nord a sud.

Diviso


0

In ArcGIS Pro 2.3 è disponibile un nuovo strumento chiamato Subdivide Polygon .

Permette di dividere / suddividere un poligono dato il numero di parti o l'area della parte desiderata.

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.