La documentación de PostGIS establece que ST_PointOnSurface
devuelve "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_Centroid
con ST_PointOnSurface
y 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_PointOnSurface
se 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_PointOnSurface
es 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_PointOnSurface
incurrir 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