Я искал функцию, которая может сказать мне, если LineString пересекает себя. Я пытался звонить st_intersects
с одной и той же LineString дважды, но очевидно, что идентичные строки будут пересекаться. Мой план, если нет функции, состоял бы в том, чтобы получить все точки в строке и создать отдельные строки, а затем проверить каждую новую строку друг против друга с помощью st_intersects. Я не хочу, чтобы это дошло до этого, но я боюсь, что так и будет.
Так есть ли функции PostGIS для проверки самопересекающейся линии? Это должно быть похоже на выяснение, является ли многоугольник сложным, я бы предположил
Ответы:
Вы можете проверить наличие самопересекающейся линии с помощью
ST_IsSimple(geom)
:Выше изображение и подпись ниже взяты из JTS TestBuilder (нажмите «Простой?»)
Это можно исправить с помощью
ST_UnaryUnion(geom)
(начиная с PostGIS 2.0), которая возвращает правильную / простую трехкомпонентную строку:источник