¿Cómo se calcula exactamente el centroide de los polígonos?

10

Me gustaría saber cómo exactamente las herramientas de geometría QGIS -> centroide poligonal calculan las coordenadas de los puntos. Por ejemplo, ¿divide el límite del polígono en puntos pequeños, toma dos pares de dos puntos (largo y ancho) con la distancia máxima y toma el cruce de estas dos líneas como el centroide?

Hausladen Carina
fuente

Respuestas:

13

Si QGIS está calculando el centroide con GEOS, que es un puerto JTS, entonces el algoritmo es http://tsusiatsoftware.net/jts/javadoc/com/vividsolutions/jts/algorithm/CentroidArea.html . Sobre la teoría hay un enlace en el javadoc en http://www.faqs.org/faqs/graphics/algorithms-faq/ , vea la sección 2.02: ¿Cómo se puede calcular el centroide de un polígono?

El centroide (también conocido como el centro de masa o centro de gravedad) de un polígono se puede calcular como la suma ponderada de los centroides de una partición del polígono en triángulos. El centroide de un triángulo es simplemente el promedio de sus tres vértices, es decir, tiene coordenadas (x1 + x2 + x3) / 3 y (y1 + y2 + y3) / 3. Esto sugiere primero triangular el polígono, luego formar una suma de los centroides de cada triángulo, ponderada por el área de cada triángulo, la suma total normalizada por el área total del polígono. De hecho, esto funciona, pero hay un método más simple: la triangulación no necesita ser una partición, sino que puede usar triángulos orientados positiva y negativamente (con áreas positivas y negativas), como se usa al calcular el área de un polígono. Esto lleva a un algoritmo muy simple para calcular el centroide, basado en una suma de triángulos centroides ponderados con su área firmada. Se puede considerar que los triángulos son los formados por cualquier punto fijo, por ejemplo, el vértice v0 del polígono y los dos puntos finales de los bordes consecutivos del polígono: (v1, v2), (v2, v3), etc. El área de un triángulo con vértices a, b, c es la mitad de esta expresión: (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.

Me parece que el método es exacto. Si desea comprobar cómo se utilizan los valores de coordenadas y si puede haber errores de redondeo, etc., puede consultar el código fuente de JTS o GEOS.

usuario30184
fuente
1
Solo unos pocos enlaces: gdal.org/python/osgeo.ogr.Geometry-class.html#Centroid señala que GDAL utiliza el método GEOS descrito en geos.osgeo.org/doxygen/classgeos_1_1algorithm_1_1Centroid.html . QGIS utiliza la funcionalidad GDAL en segundo plano.
AndreJ
2
El método solo es preciso para polígonos muy pequeños. Para los grandes te encuentras con el problema de que el globo no es plano.
Peter Taylor