Bagaimana tepatnya centroid dari poligon dihitung?

10

Saya ingin tahu bagaimana tepatnya alat Geometri QGIS -> poligon centroid menghitung titik koordinat. Sebagai contoh, apakah ia membagi asrama dari poligon menjadi titik-titik kecil, mengambil dua pasang dua titik (panjang dan lebar) dengan jarak maksimum dan mengambil persilangan kedua garis ini sebagai centroid?

Hausladen Carina
sumber

Jawaban:

13

Jika QGIS menghitung centroid dengan GEOS yang merupakan port JTS maka algoritmenya adalah http://tsusiatsoftware.net/jts/javadoc/com/vividsolutions/jts/algorithm/CentroidArea.html . Tentang teori ini, ada tautan di javadoc ke http://www.faqs.org/faqs/graphics/algorithms-faq/ , lihat bagian 2.02: Bagaimana centroid poligon dapat dihitung ?.

Centroid (alias pusat massa, atau pusat gravitasi) poligon dapat dihitung sebagai jumlah tertimbang dari sentroid dari partisi poligon menjadi segitiga. Centroid segitiga hanyalah rata-rata dari tiga simpulnya, yaitu memiliki koordinat (x1 + x2 + x3) / 3 dan (y1 + y2 + y3) / 3. Ini menyarankan pertama triangulasi poligon, kemudian membentuk jumlah centroid dari setiap segitiga, ditimbang oleh luas setiap segitiga, keseluruhan jumlah dinormalisasi oleh total area poligon. Ini memang berhasil, tetapi ada metode yang lebih sederhana: triangulasi tidak harus berupa partisi, melainkan dapat menggunakan segitiga berorientasi positif dan negatif (dengan area positif dan negatif), seperti yang digunakan saat menghitung area poligon. Ini mengarah pada algoritma yang sangat sederhana untuk menghitung centroid, berdasarkan pada jumlah centroid segitiga yang dibobot dengan area yang ditandatangani. Segitiga dapat dianggap sebagai yang dibentuk oleh titik tetap mana pun, misalnya, titik v0 dari poligon, dan dua titik akhir dari tepi poligon berurutan: (v1, v2), (v2, v3), dll. Area dari sebuah segitiga dengan simpul a, b, c adalah setengah dari ungkapan ini: (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.

Menurut saya metode ini akurat. Jika Anda ingin memeriksa bagaimana nilai koordinat digunakan dan jika ada kesalahan pembulatan, dll. Anda dapat melihat kode sumber JTS atau GEOS.

pengguna30184
sumber
1
Hanya beberapa tautan lainnya: gdal.org/python/osgeo.ogr.Geometry-class.html#Centroid mencatat bahwa GDAL menggunakan metode GEOS yang dijelaskan di geos.osgeo.org/doxygen/classgeos_1_1algorithm_1_1Centroid.html . QGIS menggunakan fungsi GDAL di latar belakang.
AndreJ
2
Metode ini hanya akurat untuk poligon yang sangat kecil. Untuk yang besar Anda mengalami masalah bahwa bola bumi tidak rata.
Peter Taylor