是否具有PostGIS函数来确定线串是否相交?


16

我一直在寻找一个可以告诉我LineString是否相交的函数。我尝试st_intersects用相同的LineString 调用两次,但是显然相同的线串会相交。我的计划是,如果没有功能,将获取线串中的所有点,并创建单独的线串,然后使用st_intersects将每个新的线串相互检查。我不希望它出现在这个问题上,但恐怕会这样。

那么,是否有任何PostGIS函数来检查线串是否自相交?它应该类似于确定多边形是否复杂


这里有第二个答案并不能很好地帮助我实现PostGIS,但确实包含了有关整个问题的一些有用信息的链接。似乎已被删除。有人有那个链接吗?
杰夫,

Answers:


14

您可以使用以下命令测试自相交的线串ST_IsSimple(geom)

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

POINT处的自相交(100.0 100.0)

图片上方和标题下方均来自JTS TestBuilder(单击“简单吗?”)

自相交处 POINT ( 100.0 100.0 )

可以使用ST_UnaryUnion(geom)(自PostGIS 2.0起)修复此问题,该函数将返回有效/简单的三段式多行字符串:

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

太棒了!我知道答案必须如此简单。您说您使用了JTS Testbuilder来创建映像。您在Postgis中知道什么方法来获取交叉点?
杰夫,

这是具有挑战性的细节。JTS TestBuilder具有CheckNoding,但是每次调用只能找到一个节点坐标,而不是MULTIPOINT。我不确定如何使用PostGIS获得提示点。
麦克T
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.