使用pgRouting生成可达圈(等时圈)

2019-11-03  本文已影响0人  圣瓦伦

pgRouting是地理空间数据库PostGIS的扩展插件,提供了路径规划的功能。

需求

输入一个起始点(经纬度坐标)和驾车(步行、骑行)的时间,根据已有的路网,输出能到达的最大范围,并获得范围内的兴趣点。

思路

主要使用pgRouting的pgr_drivingDistance + ST_ConcaveHull生成包围圈。

准备

  1. 安装PostgreSQL/PostGIS/pgRouting
  2. 导入路网数据,生成拓扑

计算过程

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

上一篇下一篇

猜你喜欢

热点阅读