Postgresql 如何捕捉线串开始&;将顶点结束到最近的点?
我有一个点层和一个线层。这些点是使用DGPS收集的道路交叉点,而这些线是连接道路,在跟踪模式下通过手持GPS收集。因此,线实际上没有连接到点 现在我想:Postgresql 如何捕捉线串开始&;将顶点结束到最近的点?,postgresql,gis,postgis,spatial,Postgresql,Gis,Postgis,Spatial,我有一个点层和一个线层。这些点是使用DGPS收集的道路交叉点,而这些线是连接道路,在跟踪模式下通过手持GPS收集。因此,线实际上没有连接到点 现在我想: 删除每个线串的所有中间节点,使其成为一条直线 将直线的起点和终点捕捉到最近的点 我正在使用PostGIS 2.0。到目前为止,我所做的是: UPDATE line SET geom = ST_Simplify(geom, 1000); 有没有其他更好的方法来实现它?(因为我使用的是荒谬的宽容) 这将把线(id=1)延伸到最近的点(在线的开头
UPDATE line
SET geom = ST_Simplify(geom, 1000);
有没有其他更好的方法来实现它?(因为我使用的是荒谬的宽容)
这将把线(id=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
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)
);
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