美文网首页开源
pgRouting参考资料

pgRouting参考资料

作者: 阿群1986 | 来源:发表于2022-04-11 16:42 被阅读0次

    博客

    专栏作者:不睡觉的怪叔叔
    https://blog.csdn.net/qq_35732147

    知乎专栏pgRouting教程

    (专栏作者:不睡觉的怪叔叔
    https://www.zhihu.com/people/li-yang-qiao-89

    路径导航示意图1 路径导航示意图2

    pgrouting天然支持路径的weight权重系数(比如路段限速、上坡下坡、道路弯道多少、道路的车道数、道路的拥堵程度,都可以作为动态的weight值),支持多个路径规划算法,支持自定义规划算法。

    路线查询的例子

    此教程将会使用深圳市的一些地点信息,这些地点的地名和对应的shenzhen_roads_vertices_pgr表中的顶点id值为:

    • 世界之窗 —— 12089
    • 锦绣中华民俗村 —— 10564
    • 欢乐谷 —— 13019
    • 华侨城体育场 —— 7304
    
    ALTER TABLE shenzhen_roads
    ADD COLUMN source INTEGER,
    ADD COLUMN target INTEGER,
    ADD COLUMN cost DOUBLE PRECISION,
    ADD COLUMN reverse_cost DOUBLE PRECISION;
    
    UPDATE shenzhen_roads
    SET cost = ST_Length(geom), reverse_cost = -1
    WHERE oneway = 'F';
    
    UPDATE shenzhen_roads
    SET reverse_cost = ST_Length(geom), cost = -1
    WHERE oneway = 'T';
    
    UPDATE shenzhen_roads
    SET cost = ST_Length(geom), reverse_cost = ST_Length(geom)
    WHERE oneway = 'B';
    
    SELECT pgr_createTopology(
        'shenzhen_roads', 
        0.001,
        'geom',
        'gid',
        'source',
        'target'
    );
    
    
    1. 步行路线:从6831(锦绣中华民俗村)到44540(世界之窗)
    -- 步行路线:从6831(锦绣中华民俗村)到44540(世界之窗)
    
    SELECT * FROM pgr_dijkstra(
      'SELECT gid AS id, source, target, cost, reverse_cost FROM shenzhen_roads',
      6831, 44540,
      directed := FALSE
    );
    
    
    查询结果

    第二步:整理途经的节点坐标

    • 使用LEFT JOIN 顶点表可以一并查询出最短路径途径顶点的坐标
    SELECT path.seq, path.node, ST_AsEWKT(nodes.the_geom) as node_position
    FROM pgr_dijkstra
      (
      'SELECT gid AS id, source, target, cost, reverse_cost FROM shenzhen_roads',
      6831, 44540,
      directed := FALSE
      ) AS path
    LEFT JOIN shenzhen_roads_vertices_pgr AS nodes
    ON path.node = nodes.id;
    

    第三步:因当前使用的是3857墨卡托坐标系,有时候需要转换回4326经纬度坐标系

    • 使用ST_Transform(the_geom, 4326)完成参考坐标系转换操作
    -- SELECT id, ST_Transform(the_geom, 4326) as the_geom4326
    -- FROM shenzhen_roads_vertices_pgr
    -- LIMIT 100;
    
    SELECT id, ST_AsEWKT(ST_Transform(the_geom, 4326)) as the_geom4326_ewkt
    FROM shenzhen_roads_vertices_pgr
    LIMIT 100;
    
    3857墨卡托坐标转为4326经纬度坐标的结果
    1. 步行路线:从45268(欢乐谷)到44540(世界之窗)
    
    SELECT * FROM pgr_dijkstra(
      'SELECT gid AS id, source, target, cost, reverse_cost FROM shenzhen_roads',
      45268, 44540,
      directed := FALSE
    );
    
    

    相关文章

      网友评论

        本文标题:pgRouting参考资料

        本文链接:https://www.haomeiwen.com/subject/qywisrtx.html