La documentación de PostGIS establece que ST_PointOnSurfacedevuelve "un PUNTO garantizado para descansar en la superficie". Parece que esta función podría implementarse trivialmente para dar resultados que satisfagan la documentación pero que brinden poca utilidad en el mundo real, aunque estoy seguro de que PostGIS proporciona una implementación no trivial.
Esta introducción a PostGIS proporciona una buena comparación y contraste ST_Centroidcon ST_PointOnSurfacey dice que "[ST_PointOnSurface] es sustancialmente más costoso desde el punto de vista computacional que la operación centroide".
¿Hay una explicación más completa de cómo ST_PointOnSurfacese calcula? He estado usando ST_Centroid, pero he encontrado algunos casos de borde en mis datos donde el centroide está fuera de la geometría. Creo que ST_PointOnSurfacees el sustituto correcto, pero el nombre de la función y la documentación dejan lugar a la incertidumbre.
Además, ¿es el gasto computacional de ST_PointOnSurfaceincurrir incluso si el centroide ya se encuentra dentro de la geometría?

Respuestas:
Basado en algunos experimentos, creo que
ST_PointOnSurface()funciona más o menos así, si la geometría es un polígono:Eso puede no tener sentido, así que aquí hay un boceto de un polígono con un rayo que lo divide en partes norte y sur:
Por lo tanto,
ST_PointOnSurface()yST_Centroid()generalmente son puntos diferentes, incluso en polígonos convexos.Creo que la única razón de la "superficie" en el nombre es que si la geometría tiene líneas 3D, entonces el resultado será simplemente uno de los vértices.
Estoy de acuerdo en que más explicaciones (y mejores nombres) habrían sido útiles y espero que un programador de GEOS pueda arrojar algo más de luz sobre el asunto.
fuente