网上关于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. Conditional Split component 用法

    Conditional Split 用于将数据流按照条件进行拆分,每一个output 都有name和condition. 数据流逐行按照condition进行match,如果match,那么改行会进入 ...

  2. Unity3D移植到Windows phone8 遇到的点点滴滴

    LitJson.JsonMapper:Type.GetInterface(String)=>Type.GetInterface(String,Boolean) protobuf应位于Assets ...

  3. 在 ML2 中配置 VXLAN - 每天5分钟玩转 OpenStack(110)

    上一节我们介绍了 VXLAN 的基本概念,今天介绍如何在 ML2 中启用 VXLAN. 在 /etc/neutron/plugins/ml2/ml2_conf.ini 设置 vxlan network ...

  4. C#由变量捕获引起对闭包的思考

    前言 偶尔翻翻书籍看看原理性的东西确实有点枯燥,之前有看到园中有位园友说到3-6年工作经验的人应该了解的.NET知识,其中就有一点是关于C#中的闭包,其实早之前在看书时(之前根本不知道C#中还有闭包这 ...

  5. MyEclipse的项目中把 java EE 5 Libraries 删掉后怎么重新导入

    myeclipse中鼠标右击项目->properties->java Build Path=>Libraries=>Add Library...=>选择MyEclipse ...

  6. objective-c 语法快速过(4)

    oc 里的字符串 字符串的快速创建(最简单的方法) NSStirng *str = @“Hello”;//oc的字符串都是@“”形式的 oc的字符串也是类的对象,是NSString类的对象,创建没有那 ...

  7. C语言 第一章 C语言简介

    一.C语言介绍 C是一种通用的编程语言,广泛用于系统软件与应用软件的开发.于1969年至1973年间,为了移植与开发UNIX操作系统,由丹尼斯·里奇与肯·汤普逊,以B语言为基础,在贝尔实验室设计.开发 ...

  8. SIFT特征详解

    1.SIFT概述 SIFT的全称是Scale Invariant Feature Transform,尺度不变特征变换,由加拿大教授David G.Lowe提出的.SIFT特征对旋转.尺度缩放.亮度变 ...

  9. 一致性hash算法简介

    一致性哈希算法在1997年由麻省理工学院提出的一种分布式哈希(DHT)实现算法,设计目标是为了解决因特网中的热点(Hot spot)问题,初衷和CARP十分类似.一致性哈希修正了CARP使用的简单哈希 ...

  10. Sql Server之数据类型详解

      数据类型是一种属性,用于指定对象可保存的数据的类型,SQL Server中支持多种数据类型,包括字符类型.数值类型以及日期类型等.数据类型相当于一个容器,容器的大小决定了装的东西的多少,将数据分为 ...