网络分析之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算法实现最短路径搜索,之后慢慢添加了其他的路径分析算法 ...
随机推荐
- LINQ系列:Linq to Object集合操作符
集合操作符对元素的集合或序列集合进行操作,并返回一个集合.LINQ共有4种集合查询操作符:Distinct.Union.Intersect和Except. 1. Distinct Distinct操作 ...
- python利用dict模拟switch
pytho本身并未提供switch语句,但可以通过dict来模拟switch, #方法1 def add(x,y): return x+y def dec(x,y): return x-y def m ...
- 深入理解this机制系列第三篇——箭头函数
× 目录 [1]痛点 [2]解决 [3]基本用法[4]回调函数[5]注意事项 前面的话 this机制与函数调用有关,而作用域则与函数定义有关.有没有什么是可以将this机制和作用域联系起来的呢?本文将 ...
- google浏览器截图工具 Open Screenshot(代码截图)
有的时候特别想把自己写的代码保存为图片,但是代码的内容很长,用普通的截图工具只能一次一次的拼接起来,太麻烦了.这里使用了Google的截图插件,很好用. 或者使用360极速浏览器-->保存网页也 ...
- js self = this的解释
Demo 1: function Person(){ this.name = 'hjzgg'; this.age = 24; this.show = function(){ alert(name + ...
- java Proxy(代理机制)
我们知道Spring主要有两大思想,一个是IoC,另一个就是AOP,对于IoC,依赖注入就不用多说了,而对于Spring的核心AOP来说,我们不但要知道怎么通过AOP来满足的我们的功能,我们更需要学习 ...
- iOS开发之使用Runtime给Model类赋值
本篇博客算是给网络缓存打个基础吧,本篇博客先给出简单也是最容易使用的把字典转成实体类的方法,然后在给出如何使用Runtime来给Model实体类赋值.本篇博客会介绍一部分,主要是字典的key与Mode ...
- 基于DDD + SD.Framework实现的统一身份认证系统
项目地址 http://git.oschina.net/lishilei0523/ShSoft.UAC 项目说明 本项目开发的目的有三: 1.作为一个使用SD.Framework框架开发的项目样板 2 ...
- C语言 第六章 多重循环
一.概要 在c语言中,if,switch,for,while,do-while可以相互间多次嵌套. if(){ for() { for() { } } } while() { for(){ } for ...
- 学习SpringMVC——如何获取请求参数
@RequestParam,你一定见过:@PathVariable,你肯定也知道:@QueryParam,你怎么会不晓得?!还有你熟悉的他(@CookieValue)!她(@ModelAndView) ...