18 votos

Hay un PostGIS función para determinar si una cadena de línea intersecta a sí misma?

He estado buscando una función que me pueda decir si una cadena de línea intersecta a sí misma. He intentado llamar a st_intersects con la misma cadena de línea dos veces, pero obviamente idénticos linestrings se cruzan. Mi plan si no hay ninguna función sería la de conseguir que todos los puntos en la cadena de la línea, y crear individuales linestrings y, a continuación, compruebe cada uno de los nuevos linestring el uno contra el otro con st_intersects. No quiero que venga a este, pero me temo que lo hará.

Entonces, ¿hay alguna PostGIS funciones para comprobar si una cadena de línea es la auto-intersección? Debe ser similar a la de averiguar si un polígono es complejo me asumir

16voto

hernan43 Puntos 566

Usted puede probar un auto-intersección linestring con ST_IsSimple(geom):

SELECT ST_IsSimple('LINESTRING (50 50, 150 150, 50 150, 150 50)');
 st_issimple
-------------
 f
(1 row)

Self-intersection at POINT ( 100.0 100.0 )

La imagen de arriba y de abajo de la leyenda de son de JTS TestBuilder (haga clic en "Simple?")

Auto-intersección en POINT ( 100.0 100.0 )

Esto puede ser solucionado con ST_UnaryUnion(geom) (desde PostGIS 2.0), que devuelve un válido/simple de tres piezas multilinestring:

MULTILINESTRING((50 50, 100 100), 
  (100 100, 150 150, 50 150, 100 100), 
  (100 100, 150 50))

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