网络分析之Pgrouting(转载)
网上关于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(转载)的更多相关文章
- (转载)微软数据挖掘算法:Microsoft 神经网络分析算法(10)
前言 有段时间没有进行我们的微软数据挖掘算法系列了,最近手头有点忙,鉴于上一篇的神经网络分析算法原理篇后,本篇将是一个实操篇,当然前面我们总结了其它的微软一系列算法,为了方便大家阅读,我特地整理了一篇 ...
- (转载)微软数据挖掘算法:Microsoft 神经网络分析算法原理篇(9)
前言 本篇文章继续我们的微软挖掘系列算法总结,前几篇文章已经将相关的主要算法做了详细的介绍,我为了展示方便,特地的整理了一个目录提纲篇:大数据时代:深入浅出微软数据挖掘算法总结连载,有兴趣的童鞋可以点 ...
- 网络分析之networkx(转载)
图的类型 Graph类是无向图的基类,无向图能有自己的属性或参数,不包含重边,允许有回路,节点可以是任何hash的python对象,节点和边可以保存key/value属性对.该类的构造函数为Graph ...
- [转载]我的Java后端书架 (2016年暖冬4.0版)
[转载]我的Java后端书架 (2016年暖冬4.0版) ps:最近正在初学Java,有一些其他语言的底子,但是还是要好好看书,好好练习,网上找了好久,都没有这份书单来的实用,特意转载过来,方便以 ...
- (转载)Windows常见性能计数器(较好的说明)
转载地址:http://blog.csdn.net/dfbrt56/article/details/3341591 Windows常见性能计数器 性能计数器(counter)是描述服务器或操作系统性能 ...
- ArcGIS网络分析之Silverlight客户端最近设施点分析(四)
原文:ArcGIS网络分析之Silverlight客户端最近设施点分析(四) 在上一篇中说了如何实现最近路径分析,本篇将讨论如何实现最近设施点分析. 最近设施点分析实际上和路径分析有些相识,实现的过程 ...
- ArcGIS网络分析之Silverlight客户端路径分析(三)
原文:ArcGIS网络分析之Silverlight客户端路径分析(三) 首先贴上最终的效果图: a.路径查询 2.最近设施点查询 3.服务区分析 说明: 1.以上的示例使用的数据是随意在ArcMap中 ...
- ArcGIS 网络分析[2] 利用自定义基础数据创建网络数据集
前言 似乎除了官方介绍的例子,我还没有在网上见过一篇介绍如何"使用自己的数据"创建"网络数据集"的文章. 有介绍几何网络的,有介绍如何用官方SanFrancis ...
- 使用pgrouting进行最短路径搜索
PgRouting是基于开源空间数据库PostGIS用于网络分析的扩展模块,最初它被称作pgDijkstra,因为它只是利用Dijkstra算法实现最短路径搜索,之后慢慢添加了其他的路径分析算法 ...
随机推荐
- Transaction Replication6:Transaction cleanup
distribution中暂存的Transactions和Commands必须及时cleanup,否则,distribution size会一直增长,最终导致数据更新耗时增加,影响replicatio ...
- Sql Server系列:Transact-SQL概述
结构化查询语言(Structure Query Language,SQL)是对数据库进行查询和修改的语言.Transact-SQL是SQL的一种实现形式,它包含了标准的SQL语言部分. 根据完成的具体 ...
- SQL 里解析 XML 格式 字段 信息
DECLARE @ItemMessage XML ),zje ),yfje ),bcje ),URL ),Remark )) SET @ItemMessage=N'<List> <i ...
- Python第一天 - set
(一)初识set dict的作用是建立一组 key 和一组 value 的映射关系,dict的key是不能重复的.有的时候,我们只想要 dict 的 key,不关心 key 对应的 value,目的就 ...
- jquery $.each的用法
通过它,你可以遍历对象.数组的属性值并进行处理. 使用说明 each函数根据参数的类型实现的效果不完全一致: 1.遍历对象(有附加参数) $.each(Object, function(p1, p2) ...
- ASP.NET MVC之下拉框绑定四种方式(十)
前言 上两节我们讲了文件上传的问题,关于这个上传的问题还未结束,我也在花时间做做分割大文件处理以及显示进度的问题,到时完成的话再发表,为了不耽误学习MVC其他内容的计划,我们今天开始好好讲讲关于MVC ...
- PHP代码的执行
先看下PHP的结构图:
- Apple的LZF算法解析
有关LZF算法的相关解析文档比较少,但是Apple对LZF的开源,可以让我们对该算法进行一个简单的解析.LZFSE 基于 Lempel-Ziv ,并使用了有限状态熵编码.LZF采用类似lz77和lzs ...
- 【集合框架】JDK1.8源码分析之IdentityHashMap(四)
一.前言 前面已经分析了HashMap与LinkedHashMap,现在我们来分析不太常用的IdentityHashMap,从它的名字上也可以看出来用于表示唯一的HashMap,仔细分析了其源码,发现 ...
- 放养的小爬虫--京东定向爬虫(AJAX获取价格数据)
放养的小爬虫--京东定向爬虫(AJAX获取价格数据) 笔者声明:只用于学习交流,不用于其他途径.源代码已上传github.githu地址:https://github.com/Erma-Wang/Sp ...