pgRouting是地理空間數(shù)據(jù)庫(kù)PostGIS的擴(kuò)展插件,提供了路徑規(guī)劃的功能计螺。
需求
輸入一個(gè)起始點(diǎn)(經(jīng)緯度坐標(biāo))和駕車(步行蕾各、騎行)的時(shí)間蕊温,根據(jù)已有的路網(wǎng)袱箱,輸出能到達(dá)的最大范圍,并獲得范圍內(nèi)的興趣點(diǎn)义矛。
思路
主要使用pgRouting的pgr_drivingDistance + ST_ConcaveHull生成包圍圈发笔。
準(zhǔn)備
計(jì)算過(guò)程
1.1 計(jì)算離目標(biāo)點(diǎn)最近的節(jié)點(diǎn)
<-> :返回兩點(diǎn)之間的距離
SELECT * FROM shenzhen_vertices_pgr
ORDER BY the_geom <-> ST_GeometryFromText('POINT(113.954396 22.580677)',4326)
LIMIT 1;
1.2 以該節(jié)點(diǎn)作為起點(diǎn)凉翻,給定時(shí)間成本了讨,計(jì)算可達(dá)路網(wǎng)
pgr_drivingDistance :詳情查看pgRouting手冊(cè)
with drivingDistance as(
SELECT
sz.geom
FROM
pgr_drivingDistance (
'SELECT gid as id, source, target, distance/mean_speed as cost FROM shenzhen', --路網(wǎng)表
1034, --節(jié)點(diǎn)的ID
0.5*3600, --總成本(時(shí)間)
FALSE
) dd,
shenzhen as sz
WHERE sz.gid = dd.edge
)
路網(wǎng)范圍
1.3 根據(jù)路網(wǎng)計(jì)算可達(dá)圈
SELECT st_concavehull(st_collect(array(select * from drivingDistance)),0.7)
st_concavehull:返回坐標(biāo)點(diǎn)的包圍圈,詳情
可達(dá)圈
路網(wǎng)和可達(dá)圈疊加:
SELECT st_concavehull(st_collect(array(select * from drivingDistance)),0.7)
union
SELECT * FROM drivingDistance;
疊加
1.4 根據(jù)可達(dá)圈計(jì)算圈內(nèi)的POI(興趣點(diǎn))
主要用到的是st_contains函數(shù)
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和可達(dá)圈疊加
參考資料:
使用pgRouting可達(dá)范圍計(jì)算
官網(wǎng)
PostGIS介紹:http://www.reibang.com/p/66ea816f6fee