In der PostGIS-Dokumentation wird angegeben, dass ST_PointOnSurface
"ein PUNKT garantiert auf der Oberfläche liegt". Es scheint, als ob diese Funktion trivial implementiert werden könnte, um Ergebnisse zu liefern, die der Dokumentation entsprechen, aber nur wenig praktischen Nutzen bieten, obwohl ich mir sicher bin, dass PostGIS eine nicht triviale Implementierung bietet.
Diese Einführung in PostGIS bietet einen schönen Vergleich und Kontrast ST_Centroid
zu ST_PointOnSurface
und besagt, dass "[ST_PointOnSurface] wesentlich rechenintensiver ist als die Schwerpunktoperation".
Gibt es eine genauere Erklärung für die ST_PointOnSurface
Berechnung? Ich habe verwendet ST_Centroid
, bin jedoch auf einige Randfälle in meinen Daten gestoßen, bei denen sich der Schwerpunkt außerhalb der Geometrie befindet. Ich glaube, das ST_PointOnSurface
ist der richtige Ersatz, aber der Funktionsname und die Dokumentation lassen Raum für Unsicherheit.
Fällt der Rechenaufwand ST_PointOnSurface
auch dann an, wenn der Schwerpunkt bereits in der Geometrie liegt?
Antworten:
Basierend auf einigen Experimenten, denke ich,
ST_PointOnSurface()
funktioniert das ungefähr so, wenn die Geometrie ein Polygon ist:Das mag keinen Sinn ergeben, deshalb hier eine Skizze eines Polygons mit einem Strahl, der es in einen nördlichen und einen südlichen Teil unterteilt:
Somit liegen
ST_PointOnSurface()
undST_Centroid()
liegen in der Regel unterschiedliche Punkte vor, auch auf konvexen Polygonen.Der einzige Grund für die "Oberfläche" im Namen ist meiner Meinung nach, dass, wenn die Geometrie 3D-Linien aufweist, das Ergebnis einfach einer der Scheitelpunkte ist.
Ich würde zustimmen, dass mehr Erklärungen (und eine bessere Benennung) nützlich gewesen wären und hoffe, dass ein GEOS-Programmierer mehr Licht in die Sache bringen könnte.
quelle