Je cherchais une fonction qui peut me dire si un LineString se croise. J'ai essayé d'appeler st_intersects
avec le même LineString deux fois, mais des chaînes de lignes identiques se croiseront évidemment. Mon plan s'il n'y a pas de fonction serait d'obtenir tous les points dans la chaîne de lignes, de créer des chaînes de lignes individuelles, puis de comparer chaque nouvelle chaîne de lignes les unes avec les autres avec st_intersects. Je ne veux pas qu'il en soit ainsi, mais je crains que ce ne soit le cas.
Existe-t-il donc des fonctions PostGIS pour vérifier si une chaîne de lignes s'auto-intersecte? Cela devrait être similaire à savoir si un polygone est complexe, je suppose
Réponses:
Vous pouvez tester une chaîne de lignes auto-intersectée avec
ST_IsSimple(geom)
:L'image ci-dessus et la légende ci-dessous proviennent de JTS TestBuilder (cliquez sur "Simple?")
Cela peut être corrigé avec
ST_UnaryUnion(geom)
(depuis PostGIS 2.0), qui renvoie une chaîne multiligne à trois parties valide / simple:la source