¿Existe una función PostGIS para determinar si una cadena lineal se interseca a sí misma?

16

He estado buscando una función que me diga si un LineString se interseca. He intentado llamar a st_intersects con el mismo LineString dos veces, pero obviamente se interceptarán cadenas lineales idénticas. Mi plan, si no hay una función, sería obtener todos los puntos de la cadena de líneas, crear cadenas lineales individuales y luego verificar cada nueva cadena lineal entre sí con st_intersects. No quiero que esto ocurra, pero me temo que lo hará.

Entonces, ¿existen funciones de PostGIS para verificar si una cadena de líneas se auto interseca? Debería ser similar a averiguar si un polígono es complejo, supongo

    
pregunta Jeff 27.10.2011 - 13:39

1 respuesta

14

Puedes probar una cadena de líneas con auto-intersección con ST_IsSimple(geom) :

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

LaimagenanteriorylaleyendainferiorcorrespondenaJTSTestBuilder(hagaclicen"¿Simple?")

  

Auto-intersección en POINT ( 100.0 100.0 )

Esto se puede solucionar con ST_UnaryUnion(geom) (desde PostGIS 2.0), que devuelve tres válidos / simples pieza multilínea:

MULTILINESTRING((50 50, 100 100), 
  (100 100, 150 150, 50 150, 100 100), 
  (100 100, 150 50))
    
respondido por el Mike T 31.10.2011 - 10:35

Lea otras preguntas en las etiquetas