12 votos

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

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

15voto

Joe Puntos 16

Si QGIS está calculando el centroide con GEOS que es un puerto JTS entonces el algoritmo es este 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/, ver la sección 2.02: ¿Cómo se puede calcular el centroide de un polígono?.

El centroide (también conocido como 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, ponderados por el área de cada triángulo, la suma total normalizada por el área total del polígono. Esto funciona, pero hay un método más simple: la triangulación no necesita ser una partición, sino que puede utilizar triángulos con orientación positiva y negativa (con áreas positivas y negativas), como se utiliza al calcular el área de un polígono. Esto lleva a un algoritmo muy simple para calcular el centroide, basado en una suma de centroides de triángulos ponderados con su área firmada. Los triángulos pueden ser aquellos formados por algún punto fijo, por ejemplo, el vértice v0 del polígono, y los dos extremos de 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]);

Código disponible en ftp://cs.smith.edu/pub/code/centroid.c (3K).
Referencia: [Gems IV] pp.3-6; también incluye código.

Me parece que el método es preciso. Si deseas verificar cómo se utilizan los valores de coordenadas y si puede haber errores de redondeo, etc., puedes revisar el código fuente de JTS o GEOS.

1 votos

Solo otro par de 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.ht‌​ml. QGIS utiliza la funcionalidad de GDAL en segundo plano.

2 votos

El método solo es preciso para polígonos muy pequeños. Para los grandes, surge el problema de que el globo no es plano.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X