Dokumentacja PostGIS stwierdza, że ST_PointOnSurface
zwraca „PUNKT z pewnością leżący na powierzchni”. Wygląda na to, że ta funkcja może być trywialnie zaimplementowana, aby uzyskać wyniki, które spełniają wymogi dokumentacji, ale zapewniają niewiele praktycznych narzędzi, chociaż jestem pewien, że PostGIS zapewnia nietrywialną implementację.
To wprowadzenie do PostGIS zapewnia ładne porównanie i kontrast ST_Centroid
z tym ST_PointOnSurface
i mówi, że „[ST_PointOnSurface] jest znacznie droższy obliczeniowo niż operacja centroidu”.
Czy istnieje dokładniejsze wyjaśnienie sposobu ST_PointOnSurface
obliczania? Używałem ST_Centroid
, ale napotkałem kilka przypadków krawędzi w moich danych, w których środek ciężkości znajduje się poza geometrią. Uważam, że ST_PointOnSurface
jest to właściwy zamiennik, ale nazwa funkcji i dokumentacja pozostawiają miejsce na niepewność.
Ponadto, czy koszt obliczeniowy ST_PointOnSurface
poniesiony, nawet jeśli środek ciężkości leży już w geometrii?
Odpowiedzi:
Na podstawie kilku eksperymentów myślę, że
ST_PointOnSurface()
działa mniej więcej tak, jeśli geometria jest wielokątem:To może nie mieć sensu, więc oto szkic wielokąta z promieniem dzielącym go na części północną i południową:
Tak więc
ST_PointOnSurface()
iST_Centroid()
zwykle są to różne punkty, nawet na wypukłych wielokątach.Myślę, że jedynym powodem „powierzchni” w nazwie jest to, że jeśli geometria ma linie 3D, wynikiem będzie po prostu jeden z wierzchołków.
Zgodziłbym się, że więcej wyjaśnień (i lepszego nazewnictwa) byłoby przydatne i mam nadzieję, że programista GEOS rzuci nieco więcej światła na tę sprawę.
źródło