gpt4 book ai didi

postgresql - 如何将线串的起点和终点顶点对齐到最近的点?

转载 作者:行者123 更新时间:2023-11-29 11:43:32 25 4
gpt4 key购买 nike

我有一个点层和一个线层。这些点是道路交叉口,使用 DGPS 收集,而线是连接道路,通过手持 GPS 在跟踪模式下收集。结果,线实际上并没有连接到点。

Sample Network Image

现在我想:

  1. 从每个线串中删除所有中间节点,使其成为一条直线。

  2. 将线的起点和终点捕捉到最近的点。

我正在使用 PostGIS 2.0。到目前为止,我所做的是:

UPDATE line
SET geom = ST_Simplify(geom, 1000);

问。有没有其他更好的方法来完成它?(因为我使用了荒谬的公差)

UPDATE line
SET geom = ST_AddPoint(
(SELECT geom FROM line WHERE id = 1),
(SELECT p.geom FROM point AS p, line AS l
ORDER BY ST_Distance(p.geom,(SELECT ST_StartPoint(l.geom) FROM lt WHERE l.id=1)) LIMIT 1),
0)
WHERE id=1;

这会将线(id=1)延伸到最近的点(在线的开头添加的点)。

问。上面看起来有点复杂,有没有其他有效的方法/功能可用?

最佳答案

在同一个查询上执行这两个操作似乎是合理的(未测试):

UPDATE line l
SET geom = ST_MakeLine(
(SELECT geom FROM point p ORDER BY ST_Distance(p.geom, ST_StartPoint(l.geom)) LIMIT 1),
(SELECT geom FROM point p ORDER BY ST_Distance(p.geom, ST_EndPoint(l.geom)) LIMIT 1)
);

如果数据集很小并且您只运行一次查询,性能不是问题 - 但您可以添加额外的 bbox 比较来加快速度:

SELECT geom FROM point p WHERE p.geom && ST_Expand(ST_StartPoint(l.geom), 100) ORDER BY ST_Distance(p.geom, ST_StartPoint(l.geom)) LIMIT 1

关于postgresql - 如何将线串的起点和终点顶点对齐到最近的点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14155749/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com