Come viene calcolato esattamente il centroide dei poligoni?


10

Vorrei sapere come esattamente gli strumenti di QGIS Geometry -> poligono centroide stanno calcolando le coordinate del punto. Ad esempio divide il bordo del poligono in piccoli punti, prende due coppie di due punti (lunghezza e larghezza) con la massima distanza e considera l'incrocio di queste due linee come centroide?

Risposte:


13

Se QGIS sta calcolando il centroide con GEOS che è una porta JTS, l'algoritmo è questo http://tsusiatsoftware.net/jts/javadoc/com/vividsolutions/jts/algorithm/CentroidArea.html . Circa la teoria c'è un collegamento nel javadoc in http://www.faqs.org/faqs/graphics/algorithms-faq/ , vedere la sezione 2.02: Come si può calcolare il centroide di un poligono ?.

Il centroide (noto anche come centro di massa o centro di gravità) di un poligono può essere calcolato come la somma ponderata dei centroidi di una divisione del poligono in triangoli. Il centroide di un triangolo è semplicemente la media dei suoi tre vertici, cioè ha coordinate (x1 + x2 + x3) / 3 e (y1 + y2 + y3) / 3. Ciò suggerisce innanzitutto di triangolare il poligono, quindi di formare una somma dei centroidi di ciascun triangolo, ponderata dall'area di ciascun triangolo, l'intera somma normalizzata dall'area totale del poligono. Funziona davvero, ma esiste un metodo più semplice: la triangolazione non deve necessariamente essere una partizione, ma può piuttosto usare triangoli orientati positivamente e negativamente (con aree positive e negative), come si usa per calcolare l'area di un poligono. Ciò porta a un algoritmo molto semplice per il calcolo del centroide, basato su una somma di centroidi triangolari ponderati con la loro area con segno. I triangoli possono essere considerati costituiti da qualsiasi punto fisso, ad esempio il vertice v0 del poligono e i due punti finali dei bordi consecutivi del poligono: (v1, v2), (v2, v3), ecc. L'area di un triangolo con vertici a, b, c è la metà di questa espressione: (b [X] - a [X]) * (c [Y] - a [Y]) - (c [X] - a [X] ) * (b [Y] - a [Y]);

Code available at ftp://cs.smith.edu/pub/code/centroid.c (3K).
Reference: [Gems IV] pp.3-6; also includes code.

Mi sembra che il metodo sia accurato. Se vuoi controllare come vengono usati i valori delle coordinate e se ci possono essere errori di arrotondamento ecc. Puoi dare un'occhiata al codice sorgente di JTS o GEOS.


1
Solo alcuni altri link: gdal.org/python/osgeo.ogr.Geometry-class.html#Centroid osserva che GDAL utilizza il metodo GEOS descritto in geos.osgeo.org/doxygen/classgeos_1_1algorithm_1_1Centroid.html . QGIS utilizza la funzionalità GDAL in background.
AndreJ,

2
Il metodo è accurato solo per poligoni molto piccoli. Per quelli di grandi dimensioni si incontra il problema che il globo non è piatto.
Peter Taylor,
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.