用pgrouting对openstreetmap数据进行路径分析

1,将道路osm数据增加列字段

ALTER TABLE changsharoad_connected ADD COLUMN source integer;

ALTER TABLE changsharoad_connected ADD COLUMN target integer;
ALTER TABLE changsharoad_connected ADD COLUMN length double precision;
ALTER TABLE changsharoad_connected ADD COLUMN cost double precision;
ALTER TABLE changsharoad_connected ADD COLUMN reverse_cost double precision;

2,创建拓扑及索引
SELECT pgr_createTopology('changsharoad_connected',0.000001, 'geom', 'gid');
create index road_source_idx on changsharoad_connected("source");
create index road_target_idx on changsharoad_connected("target");

3,分析单双向
SELECT pgr_analyzeOneway('changsharoad_connected', ARRAY['', 'B', 'T'], ARRAY['', 'B', 'F'],ARRAY['', 'B', 'F'], ARRAY['', 'B', 'T'])
update changsharoad_connected set length = ST_LengthSpheroid(geom, 'SPHEROID["WGS 84",6378137,298.257223563]');
update changsharoad_connected set cost=length where oneway='B' or oneway='F'
update changsharoad_connected set cost=-length where oneway='T'
update changsharoad_connected set reverse_cost=-length where oneway='F'
update changsharoad_connected set reverse_cost=length where oneway='B' or oneway='T'


4,最短路径分析
drop table if exists dijkstra_res;
SELECT seq, id1 AS node, id2 AS edge, a.cost as cost, geom into dijkstra_res FROM pgr_dijkstra('     
    SELECT gid AS id,
        source::integer,
        target::integer,
        cost::double precision AS cost,
        reverse_cost::double precision AS reverse_cost
    FROM changsharoad_connected', 20946, 19758, true, true)a
LEFT JOIN changsharoad_connected b
ON (a.id2 = b.gid) order by seq;

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值