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

第一步:配置环境

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

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

这里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(红线)

将TransitionOpenDoor导入Postgresql中表中数据:

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()使用可以参加官网说明

结果将是

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

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

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

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

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

然后把下载的pgrouting下doc lib share三个文件夹里的文件拷到postgresql安装文件夹的相应目录里面。然后打开postgresql  执行pgRouting-1.03_pg-8.4.2\Share\Contrib下的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);

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

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

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

地图服务:geoserver

数据库:postgresql+postgis+pgrouting

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

网络分析之Pgrouting(转载)的更多相关文章

  1. (转载)微软数据挖掘算法:Microsoft 神经网络分析算法(10)

    前言 有段时间没有进行我们的微软数据挖掘算法系列了,最近手头有点忙,鉴于上一篇的神经网络分析算法原理篇后,本篇将是一个实操篇,当然前面我们总结了其它的微软一系列算法,为了方便大家阅读,我特地整理了一篇 ...

  2. (转载)微软数据挖掘算法:Microsoft 神经网络分析算法原理篇(9)

    前言 本篇文章继续我们的微软挖掘系列算法总结,前几篇文章已经将相关的主要算法做了详细的介绍,我为了展示方便,特地的整理了一个目录提纲篇:大数据时代:深入浅出微软数据挖掘算法总结连载,有兴趣的童鞋可以点 ...

  3. 网络分析之networkx(转载)

    图的类型 Graph类是无向图的基类,无向图能有自己的属性或参数,不包含重边,允许有回路,节点可以是任何hash的python对象,节点和边可以保存key/value属性对.该类的构造函数为Graph ...

  4. [转载]我的Java后端书架 (2016年暖冬4.0版)

      [转载]我的Java后端书架 (2016年暖冬4.0版) ps:最近正在初学Java,有一些其他语言的底子,但是还是要好好看书,好好练习,网上找了好久,都没有这份书单来的实用,特意转载过来,方便以 ...

  5. (转载)Windows常见性能计数器(较好的说明)

    转载地址:http://blog.csdn.net/dfbrt56/article/details/3341591 Windows常见性能计数器 性能计数器(counter)是描述服务器或操作系统性能 ...

  6. ArcGIS网络分析之Silverlight客户端最近设施点分析(四)

    原文:ArcGIS网络分析之Silverlight客户端最近设施点分析(四) 在上一篇中说了如何实现最近路径分析,本篇将讨论如何实现最近设施点分析. 最近设施点分析实际上和路径分析有些相识,实现的过程 ...

  7. ArcGIS网络分析之Silverlight客户端路径分析(三)

    原文:ArcGIS网络分析之Silverlight客户端路径分析(三) 首先贴上最终的效果图: a.路径查询 2.最近设施点查询 3.服务区分析 说明: 1.以上的示例使用的数据是随意在ArcMap中 ...

  8. ArcGIS 网络分析[2] 利用自定义基础数据创建网络数据集

    前言 似乎除了官方介绍的例子,我还没有在网上见过一篇介绍如何"使用自己的数据"创建"网络数据集"的文章. 有介绍几何网络的,有介绍如何用官方SanFrancis ...

  9. 使用pgrouting进行最短路径搜索

       PgRouting是基于开源空间数据库PostGIS用于网络分析的扩展模块,最初它被称作pgDijkstra,因为它只是利用Dijkstra算法实现最短路径搜索,之后慢慢添加了其他的路径分析算法 ...

随机推荐

  1. .Net 转战 Android 4.4 日常笔记(4)--按钮事件和国际化

    我们知道资源被注册到R.java我们通过R.java就可以读取到界面中的组件.跟我们.net一样,通过ID来读取组件 知识点: 通过R.java读取组件 MainActivity.java通过find ...

  2. The network bridge on device VMnet0 is not running

    The network bridge on device VMnet0 is not running. The virtual machine will not be able to communic ...

  3. 4、解析配置文件 redis.conf、Redis持久化RDB、Redis的主从复制

    1.Units单位 配置大小单位,开头定义了一些基本的度量单位,只支持bytes,不支持bit 对大小写不敏感 2.INCLUDES包含 和我们的Struts2配置文件类似,可以通过includes包 ...

  4. Hibernate学习之——Hibernate环境搭建

    之前在写关于安卓闹钟的教程,写了一半就没后一半了,其实自己也没做好,在校外实习,校内毕业实习又有任务,只能先放放了,等毕业实习结束之后,在继续安卓闹钟开发之旅,相信这个时间不会很久的.现在毕业实习用到 ...

  5. MySQL分区总结

    MySQL支持RANGE,LIST,HASH和KEY四种分区.其中,每个分区又都有一种特殊的类型.对于RANGE分区,有RANGE COLUMNS分区.对于LIST分区,有LIST COLUMNS分区 ...

  6. 设计窘境:来自 Repository 的一丝线索,Domain Model 再重新设计

    写在前面 阅读目录: 疑惑解读 设计窘境 一幅图的灵感 为嘛还是你-Repository 后记 上一篇<No zuo no die:DDD 应对具体业务场景,Domain Model 重新设计& ...

  7. php模拟数据库常用操作效果

    test.php <?php header("Content-type:text/html;charset='utf8'"); error_reporting(E_ALL); ...

  8. EasyUI管理后台模板(附源码)

    下载地址:http://files.cnblogs.com/wyguo/easyui_demo.zip

  9. Kooboo CMS 无聊随笔(2)

    上次写了一篇博客 http://www.cnblogs.com/kmsfan/p/Kooboo_CMS_suibi.html 作为这个系列的开篇,简单的介绍了一下Kooboo CMS的一些基本情况和界 ...

  10. C#基于两种需求向图片添加水印

    使用场景 1.也就是大家经常用的,一般是图片的4个角落,基于横纵坐标来添加. 2.在图片内基于固定位置,文字始终居中.刚开始我基于第一种场景来根据水印汉字的长度来计算坐标,后来发现方法始终不可靠.现在 ...