查找沿着线串的最近点在指定距离限制和秩序(Find the nearest points along

2019-06-23 21:33发布

我有这样的问题,我会很高兴如果有人能帮助我。 我有个表GIST指数。 这些点没有及时更换。

我想获取该接近某个给定的线串点。 例如:假设线串是道路和点沿路兴趣点。 我想获取的POI是根据给定的道路5公里的距离。 我想获取这些兴趣点以正确的顺序(沿道路行驶的顺序)。 看看图片:

对于从点1至5给出路上,我想取的POI是在最多5公里的道路,才能从点1至5沿着道路。 所以结果应该是:

POI_ID
1
5
6
8
9
10
12
13

这应该告诉我什么POI我可以沿着以最小的成本在道路上行驶时参观。

是否有人有一些想法如何在Postgres和PostGIS的办呢?

Answer 1:

假设你有几何列geom使用的米投射SRID表格road (LINESTRING)和poi (POINT),查询到有5个公里的道路范围内的所有兴趣点(其中id = 123)应该是这样的:

SELECT poi.*, ST_Distance(road.geom, poi.geom)/1000.0 AS distance_km
FROM road, poi
WHERE road.id = 123 AND ST_DWithin(road.geom, poi.geom, 5000.0)
ORDER BY ST_LineLocatePoint(road.geom, poi.geom),
         ST_Distance(road.geom, poi.geom);

第一ORDER与部分ST_LineLocatePoint使用分数0.0和1.0之间,这取决于其中点是沿LINESTRING。 如果道路的方向前进“走错了路”,然后追加DESC颠倒顺序。 二阶部分是基于距离,如果点稍微越过LINESTRING(其中的开始/结束其可用于ST_LineLocatePoint将返回分别0.0或1.0)。

如果您使用的是此查询还可能工作geography不度-型与长期/纬度值,因为它自动地计算出米。 检查出更多的文档:

  • ST_Distance
  • ST_DWithin
  • ST_LineLocatePoint (或ST_Line_Locate_Point旧版本的PostGIS的)


Answer 2:

这听起来像你可能会从去年夏天的PostgreSQL 9.1版本的KNN-GIST功能中受益,并通过了PostGIS 2.0版本的支持。

http://blog.opengeo.org/2011/09/28/indexed-nearest-neighbour-search-in-postgis/



文章来源: Find the nearest points along the linestring in specified distance limit and order