1.问题说明
你可能问这不是一眼就可以看出来吗?谁会问这么傻的问题
我还是要简单说明一下 就拿道路规划来说 前面规划一点 后面规划一点 现在验证道路是否通畅 那就需要这个方法
例子:
中间河流由于阻挡未进行规划
现在验证整个道路是否通畅
2.方法
结论
存在一条线 和剩下的所有线的集合都不相交 这个就是断的
- 首先拿第一条线和第二跳线判断是否相交,相交则合并,不相交返回结论
- 拿相交的线的集合和下一条线继续按上面的步骤进行判读
- 直到数据结束
3.代码
1.简化多线(ST_LineMerge)
SELECT
ST_AsText(
ST_LineMerge(
st_union('LINESTRING (0 0, 1 0)'::geometry,'LINESTRING (2 0,0.5 0)'::geometry)
)
)
例子
例子
合并具有不同方向的线条。
SELECT ST_AsText(ST_LineMerge(
'MULTILINESTRING((10 160, 60 120), (120 140, 60 120), (120 140, 180 120))'
));
--------------------------------------------
LINESTRING(10 160,60 120,120 140,180 120)
线不会在度数为 > 2 的交点之间合并。
SELECT ST_AsText(ST_LineMerge(
'MULTILINESTRING((10 160, 60 120), (120 140, 60 120), (120 140, 180 120), (100 180, 120 140))'
));
--------------------------------------------
MULTILINESTRING((10 160,60 120,120 140),(100 180,120 140),(120 140,180 120))
如果由于非接触线而无法合并, 返回原始多行字符串。
SELECT ST_AsText(ST_LineMerge(
'MULTILINESTRING((-29 -27,-30 -29.7,-36 -31,-45 -33),(-45.2 -33.2,-46 -32))'
));
----------------
MULTILINESTRING((-45.2 -33.2,-46 -32),(-29 -27,-30 -29.7,-36 -31,-45 -33))
如果定向 = TRUE,则不会合并具有相反方向的线。
SELECT ST_AsText(ST_LineMerge(
'MULTILINESTRING((60 30, 10 70), (120 50, 60 30), (120 50, 180 30))',
TRUE));
-------------------------------------------------------
MULTILINESTRING((120 50,60 30,10 70),(120 50,180 30))
显示 Z 维度处理的示例。
SELECT ST_AsText(ST_LineMerge(
'MULTILINESTRING((-29 -27 11,-30 -29.7 10,-36 -31 5,-45 -33 6), (-29 -27 12,-30 -29.7 5), (-45 -33 1,-46 -32 11))'
));
--------------------------------------------------------------------------------------------------
LINESTRING Z (-30 -29.7 5,-29 -27 11,-30 -29.7 10,-36 -31 5,-45 -33 1,-46 -32 11)
2.合并线
st_union(所有线)
3.判断是否相交
ST_Intersects
完成