Como exatamente é calculado o centróide de polígonos?

10

Gostaria de saber exatamente como as ferramentas QGIS Geometry -> centróide de polígono estão calculando as coordenadas do ponto. Por exemplo, ele divide a fronteira do polígono em pequenos pontos, pega dois pares de dois pontos (comprimento e largura) com distância máxima e toma o cruzamento dessas duas linhas como o centróide?

Hausladen Carina
fonte

Respostas:

13

Se o QGIS estiver computando o centróide com o GEOS, que é uma porta JTS, o algoritmo é este http://tsusiatsoftware.net/jts/javadoc/com/vividsolutions/jts/algorithm/CentroidArea.html . Sobre a teoria, existe um link no javadoc para http://www.faqs.org/faqs/graphics/algorithms-faq/ , consulte a seção 2.02: Como o centróide de um polígono pode ser computado ?.

O centróide (também conhecido como centro de massa ou centro de gravidade) de um polígono pode ser calculado como a soma ponderada dos centróides de uma partição do polígono em triângulos. O centróide de um triângulo é simplesmente a média de seus três vértices, ou seja, possui coordenadas (x1 + x2 + x3) / 3 e (y1 + y2 + y3) / 3. Isso sugere primeiro triangular o polígono e formar uma soma dos centróides de cada triângulo, ponderada pela área de cada triângulo, a soma total normalizada pela área total do polígono. Isso realmente funciona, mas existe um método mais simples: a triangulação não precisa ser uma partição, mas pode usar triângulos de orientação positiva e negativa (com áreas positivas e negativas), como é usado ao calcular a área de um polígono. Isso leva a um algoritmo muito simples para calcular o centróide, com base em uma soma de centróides triangulares ponderados com sua área assinada. Os triângulos podem ser considerados aqueles formados por qualquer ponto fixo, por exemplo, o vértice v0 do polígono e os dois pontos finais das arestas consecutivas do polígono: (v1, v2), (v2, v3) etc. A área de um triângulo com vértices a, b, c é metade dessa expressão: (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.

Parece-me que o método é preciso. Se você quiser verificar como os valores das coordenadas são usados ​​e se pode haver erros de arredondamento, etc., consulte o código fonte do JTS ou GEOS.

user30184
fonte
1
Apenas mais alguns links: gdal.org/python/osgeo.ogr.Geometry-class.html#Centroid observa que o GDAL usa o método GEOS descrito em geos.osgeo.org/doxygen/classgeos_1_1algorithm_1_1Centroid.html . O QGIS usa a funcionalidade GDAL em segundo plano.
AndreJ 25/09
2
O método é preciso apenas para polígonos muito pequenos. Para os grandes, você encontra o problema de que o globo não é plano.
Peter BayPreço