Mar*_*sta 9 postgresql postgis
我有这样的问题,我会很高兴,如果有人可以帮助我.我有GIST索引的积分表.这些要点不会及时改变.
我想获取一些给定线串附近的点.示例:想象一下,线串是道路,道路上的点是poi.我想去距离特定道路5公里的poi.我想以正确的顺序取得那些poi(沿路的驾驶秩序).看图像:

对于从1点到5点的给定道路,我想从道路上获取距离最远5公里的POI,并且从道路的1点到5点依次获取POI.所以结果应该是:
POI_ID
1
5
6
8
9
10
12
13
Run Code Online (Sandbox Code Playgroud)
这应该告诉我在沿着这条路旅行时我能以最低成本访问的POI.
有没有人有一些想法如何用postgres和postgis做到这一点?
Mik*_*e T 13
假设您的几何列geom在表格road(LINESTRING)和poi(POINT)中使用了米的投影SRID,那么查找5公里范围内所有POI(其中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);
Run Code Online (Sandbox Code Playgroud)
第一ORDER部分ST_LineLocatePoint使用0.0到1.0之间的分数,具体取决于LINESTRING的点.如果道路的方向是"错误的方式",则附加DESC反转顺序.第二个ORDER部分基于距离,如果该点稍微超过LINESTRING的开始/结束(其中ST_LineLocatePoint将分别返回0.0或1.0),则可以使用该距离.
如果您使用geography具有长/纬度值的类型,则此查询也可能有效,因为它会自动计算米 - 而不是度.查看文档了解更多信息:
ST_DistanceST_DWithinST_LineLocatePoint(或者ST_Line_Locate_Point对于PostGIS的旧版本)| 归档时间: |
|
| 查看次数: |
6390 次 |
| 最近记录: |