Dokumentasi PostGIS menyatakan bahwa ST_PointOnSurface
mengembalikan "TITIK dijamin terletak di permukaan". Sepertinya fungsi ini bisa diimplementasikan secara sepele untuk memberikan hasil yang memuaskan dokumentasi tetapi menyediakan sedikit utilitas dunia nyata, meskipun saya yakin bahwa PostGIS menyediakan implementasi non-sepele.
Pengantar PostGIS ini memberikan perbandingan dan kontras yang bagus ST_Centroid
dengan ST_PointOnSurface
dan mengatakan bahwa "[ST_PointOnSurface] jauh lebih mahal secara komputasi daripada operasi centroid".
Apakah ada penjelasan yang lebih menyeluruh tentang bagaimana cara ST_PointOnSurface
menghitungnya? Saya telah menggunakan ST_Centroid
, tetapi telah menemukan beberapa kasus tepi dalam data saya di mana centroid berada di luar geometri. Saya percaya itu ST_PointOnSurface
adalah pengganti yang tepat, tetapi nama fungsi dan dokumentasi meninggalkan ruang untuk ketidakpastian.
Lebih lanjut, apakah biaya komputasi yang ST_PointOnSurface
dikeluarkan bahkan jika centroid memang berada dalam geometri?
Jawaban:
Berdasarkan beberapa percobaan, saya kira
ST_PointOnSurface()
bekerja kira-kira seperti ini, jika geometri adalah sebuah poligon:Itu mungkin tidak masuk akal, jadi inilah sketsa poligon dengan sinar yang membaginya menjadi bagian utara dan selatan:
Jadi,
ST_PointOnSurface()
danST_Centroid()
biasanya titik yang berbeda, bahkan pada poligon cembung.Satu-satunya alasan "permukaan" dalam nama, saya pikir, adalah bahwa jika geometri memiliki garis 3D maka hasilnya akan menjadi salah satu verteks.
Saya setuju bahwa lebih banyak penjelasan (dan penamaan yang lebih baik) akan bermanfaat dan berharap seorang programmer GEOS dapat menjelaskan lebih banyak tentang masalah ini.
sumber