我有这样的问题,我会很高兴如果有人能帮助我。 我有个表GIST指数。 这些点没有及时更换。
我想获取该接近某个给定的线串点。 例如:假设线串是道路和点沿路兴趣点。 我想获取的POI是根据给定的道路5公里的距离。 我想获取这些兴趣点以正确的顺序(沿道路行驶的顺序)。 看看图片:
对于从点1至5给出路上,我想取的POI是在最多5公里的道路,才能从点1至5沿着道路。 所以结果应该是:
POI_ID
1
5
6
8
9
10
12
13
这应该告诉我什么POI我可以沿着以最小的成本在道路上行驶时参观。
是否有人有一些想法如何在Postgres和PostGIS的办呢?
假设你有几何列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的)
这听起来像你可能会从去年夏天的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