pgRouting是地理空间数据库PostGIS的扩展插件,提供了路径规划的功能。
需求
输入一个起始点(经纬度坐标)和驾车(步行、骑行)的时间,根据已有的路网,输出能到达的最大范围,并获得范围内的兴趣点。
思路
主要使用pgRouting的pgr_drivingDistance + ST_ConcaveHull生成包围圈。
准备
计算过程
1.1 计算离目标点最近的节点
<-> :返回两点之间的距离
SELECT * FROM shenzhen_vertices_pgr
ORDER BY the_geom <-> ST_GeometryFromText('POINT(113.954396 22.580677)',4326)
LIMIT 1;
1.2 以该节点作为起点,给定时间成本,计算可达路网
pgr_drivingDistance :详情查看pgRouting手册
with drivingDistance as(
SELECT
sz.geom
FROM
pgr_drivingDistance (
'SELECT gid as id, source, target, distance/mean_speed as cost FROM shenzhen', --路网表
1034, --节点的ID
0.5*3600, --总成本(时间)
FALSE
) dd,
shenzhen as sz
WHERE sz.gid = dd.edge
)
路网范围
1.3 根据路网计算可达圈
SELECT st_concavehull(st_collect(array(select * from drivingDistance)),0.7)
st_concavehull:返回坐标点的包围圈,详情
可达圈路网和可达圈叠加:
SELECT st_concavehull(st_collect(array(select * from drivingDistance)),0.7)
union
SELECT * FROM drivingDistance;
叠加
1.4 根据可达圈计算圈内的POI(兴趣点)
主要用到的是st_contains函数
select t.* from
(SELECT st_concavehull(st_collect(array(select * from drivingDistance)),0.9)) c
left join traffic_facility t
on st_contains(c.st_concavehull,t.geom)
where t.station_type IN ('SUBWAY');
POI和可达圈叠加
参考资料:
使用pgRouting可达范围计算
官网
PostGIS介绍:https://www.jianshu.com/p/66ea816f6fee
网友评论