如何创建一个查询来查找不统一的轮廓线(线串)

问题描述 投票:0回答:1

如何创建一个查询来查找不统一的轮廓线(线串)

示例:

在此图像中,理想的情况是一条红线,但有一条红线和一条白线,在这种情况下,白线应该连接到红线

postgresql postgis
1个回答
0
投票

您可以尝试使用

st_dump(st_linemerge(st_collect(geom)))
去节点/熔化/溶解/压缩这些线。完全统一的生产线不会对此做出反应,保持不变。

如果您正在显示合并尝试的后果,试图找出哪些线拒绝溶解以及原因,那么我猜如果您一直放大或检查顶点坐标,您可能会观察到其中任何一个

  1. 它们并不统一,因为它们根本没有真正接触过
  2. 一个在另一个的最后一段的中间结束,产生一个节点
  3. 他们相遇时有一条完整的共同线,而不仅仅是一个点
  4. 它们的最后一段交叉,再次需要在该位置有一个节点

其中一些问题可以通过

st_snap()
解决。

您还可以通过计算一系列线与其他线相交的数量来发现位于一系列线中间的线。你的目标只会有 1 或 2 个这样的邻居:

select t1.id 
from your_table t1 
join your_table t2 
on t1.id<>t2.id 
and st_intersects(t1.geom,t2.geom)
group by t1.id having count(*) in (1,2)

这可能会给你带来大量的误报,所以你可能只需要检查

st_startpoint()
/
st_endpoint()
的交集,而不是整个几何体,这反过来又不会让你得到运行的几何体一个序列,但不是从头到尾相遇,而是彼此相遇或穿过。

© www.soinside.com 2019 - 2024. All rights reserved.