21 votos

¿Cómo se calcula ST_PointOnSurface?

El PostGIS documentación indica que ST_PointOnSurface devuelve "un PUNTO garantizado que yacen en la superficie". Parece que esta función podría ser trivialmente implementado para dar resultados que satisfagan la documentación, pero ofrecen poco en el mundo real utilidad, aunque estoy seguro de que PostGIS es una no-trivial de ejecución.

Esta introducción a PostGIS proporciona una buena comparación y el contraste de ST_Centroid con ST_PointOnSurface y dice que "[ST_PointOnSurface] es considerablemente más costosas computacionalmente que el centro de gravedad de la operación".

Hay una explicación más detallada de cómo ST_PointOnSurface se calcula? He estado usando ST_Centroid, pero se han encontrado algunos casos de borde en mis datos, donde el centro de gravedad está fuera de la geometría. Creo que ST_PointOnSurface es la correcta sustituto, pero el nombre de la función y de la documentación de dejar espacio para la incertidumbre.

Además, es el costo de cómputo de ST_PointOnSurface incurridos incluso si el centro de gravedad no se encuentran dentro de la geometría ya?

21voto

knightofmathematics Puntos 176

Basado en un par de experimentos, creo ST_PointOnSurface() trabaja aproximadamente como esta, si la geometría, es un polígono:

  1. Traza este-oeste ray, mintiendo a medio camino entre el norte y el el sur de las extensiones del polígono.
  2. Encontrar la más larga del segmento de los rayos que cruza el polígono.
  3. Devolver el punto que se encuentra a medio camino a lo largo de dicho segmento.

Que puede que no tenga sentido, así que aquí un boceto de un polígono con un rayo de su división en una de las zonas norte y sur:

             _
            / \             <-- northern extent
           /   \
          /     \
         /       \
        /         \      __
       /           \    /  \
      /_ _ _ P _ _ _\  / _ _\  P = point-on-surface
     /               \/      \
    /                         \
   /            C              \   C = centroid
  /                             \
 /                              /
/______________________________/  <-- southern extent

Por lo tanto, ST_PointOnSurface() y ST_Centroid() son por lo general diferentes puntos, incluso en polígonos convexos.

La única razón para la "superficie" en el nombre, creo, es que si la geometría 3D de líneas, entonces el resultado va a ser simplemente uno de los vértices.

Yo estaría de acuerdo en que la explicación más (y mejor de nomenclatura) habría sido útil y la esperanza de una GEOS programador podría arrojar algo más de luz sobre el asunto.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X