Eu estive procurando por uma função que pode me dizer se um LineString se cruza. Tentei ligar st_intersects
com a mesma LineString duas vezes, mas obviamente linhas de linhas idênticas se cruzam. Meu plano, se não houver nenhuma função, seria obter todos os pontos na sequência de linhas e criar cadeias de linhas individuais e, em seguida, verificar cada nova cadeia de linhas uma contra a outra com st_intersects. Não quero que isso chegue a isso, mas receio que sim.
Portanto, existem funções do PostGIS para verificar se uma cadeia de linhas se intercepta? Deve ser semelhante a descobrir se um polígono é complexo, eu diria
Respostas:
Você pode testar uma cadeia de linhas com interseção automática com
ST_IsSimple(geom)
:A imagem acima e a legenda abaixo são do JTS TestBuilder (clique em "Simples?")
Isso pode ser corrigido com
ST_UnaryUnion(geom)
(desde o PostGIS 2.0), que retorna uma cadeia de linhas múltipla válida / simples de três partes:fonte