zoukankan      html  css  js  c++  java
  • 网络分析之Pgrouting(转载)

    网上关于Pgrouting的使用介绍太简单了,这里想详细的总结一下Pgrouting的使用,其实主要参照官方文档:http://workshop.pgrouting.org/

    第一步:配置环境

    关于PostgreSQL 、postgis以及pgrouting可以去官网下载,这里使用Pgrouting2.0

    clip_image002

               PostgreSQL与postgis安装可以参照网上教程

               pgRouting的安装很简单,以Windows为例,下载包以后解压缩,将lib目录下文件复制到PostgreSQL的lib目录下,再在PostgreSQL数据库中执行share/extension目录下的sql脚本,这样就完成了整个环境的配置

    第二步:导入数据

    这里先介绍一个Pgrouting的函数:pgr_createTopology,这个函数就是将我们的路网(线型)数据形成拓扑导航网络的数据,为下一步的导航路径算法提供支持,详见

    http://docs.pgrouting.org/2.0/en/src/common/doc/functions/create_topology.html#pgr-create-topology

    clip_image004

    这里source和target就是我们数据表中必须的两个字段

    source:

    text Source column name of the network table. Default value is source.

    target:

    text Target column name of the network table. Default value is target.

    理解这个以后我们将导入我们的数据:

    原始数据格式shap:

    这里我是利用算法生成了室内路网TransitionOpenDoor(红线)

    clip_image006

    将TransitionOpenDoor导入Postgresql中表中数据:

    clip_image008

    length:作为成本cost

    数据准备完毕后

    第三步:执行算法

    首先执行pgr_createTopology得到导航网络

    SELECT pgr_createTopology('transitioncloseddoor',0.001,source:='source',id:='gid',target:='target',the_geom:='geom')

    然后执行

    SELECT seq, id1 AS node, id2 AS edge, cost FROM pgr_dijkstra('
                    SELECT  gid AS id,
                             source::integer,
                             target::integer,
                             length::double precision AS cost
                            FROM transitioncloseddoordijsktrav1',
                    1, 9, false, false);

    查询从1号点到9号点的最短路径

    关于 pgr_dijkstra()使用可以参加官网说明

    结果将是

    clip_image010

    其中node代表路径的节点、edge代表边、cost就是length字段的成本

    1号点到9号点的最短路径可视化结果:可见图中与查询结果一致,1-4-6-20-7-21-22-13-9

    clip_image012

    --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

    clip_image002[5]

    这几天研究了下postgis的拓展插件pgrouting(http://www.pgrouting.org/)。

    首先到官网下载pgrouting(注意版本对应,当前支持最高版本的postgis为8.4):

    clip_image004[6]

    然后把下载的pgrouting下doc lib share三个文件夹里的文件拷到postgresql安装文件夹的相应目录里面。然后打开postgresql  执行pgRouting-1.03_pg-8.4.2ShareContrib下的3个sql文件

    安装完算法之后我们就可以开始做最优路径分析了:

    首先对已有的道路表添加source target length  分别代表 道路的起点id 终点id 和权重值。

    ALTERTABLE ch10.load_merge ADDCOLUMN source integer;
    ALTERTABLE ch10.load_merge ADDCOLUMN target integer;
    ALTERTABLE ch10.load_merge ADDCOLUMN length doubleprecision;

    然后就可以执行assign_vertex_id()为表建立拓扑关系:

    SELECT assign_vertex_id('load_merge',.001,'the_geom','gid');

    在进行分析之前还要设置下权重值,一下sql语句是以道路长度为权重值:

    UPDATE twin_cities SET length = ST_Length(the_geom);

    最后就可以执行查询(需要注意的是:道路表的the_geom类型应为muitilinestring):

    SELECT st_astext(the_geom)  FROM dijkstra_sp('load_merge',752,82);

    clip_image006[5]

    也可以插入一个表中 可以通过QGIS查看结果:

    SELECT the_geom INTO dijkstra_result FROM dijkstra_sp('load_merge',4752,82);

    clip_image008[5]

    在实际项目开发中使用pgrouting是相当方便的:

    clip_image010[5]

    地图服务:geoserver

    数据库:postgresql+postgis+pgrouting

    程序下载地址:https://github.com/shitao1988/AGS-PgRouting

  • 相关阅读:
    ie浏览器报错 DOM7009 无法解码 URL 处的图像 问题的解决方法
    javascript拷贝节点cloneNode()使用介绍
    动态构建 urlpatterns
    request属性
    用户分组权限(模型--登录自带字段)
    模型字段设为可选
    模型 命令
    模板 templates
    动态url加载
    APScheduler实现定时任务
  • 原文地址:https://www.cnblogs.com/gispathfinder/p/5790683.html
Copyright © 2011-2022 走看看