网络分析之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算法实现最短路径搜索,之后慢慢添加了其他的路径分析算法 ...
随机推荐
- .Net 转战 Android 4.4 日常笔记(4)--按钮事件和国际化
我们知道资源被注册到R.java我们通过R.java就可以读取到界面中的组件.跟我们.net一样,通过ID来读取组件 知识点: 通过R.java读取组件 MainActivity.java通过find ...
- 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 ...
- 4、解析配置文件 redis.conf、Redis持久化RDB、Redis的主从复制
1.Units单位 配置大小单位,开头定义了一些基本的度量单位,只支持bytes,不支持bit 对大小写不敏感 2.INCLUDES包含 和我们的Struts2配置文件类似,可以通过includes包 ...
- Hibernate学习之——Hibernate环境搭建
之前在写关于安卓闹钟的教程,写了一半就没后一半了,其实自己也没做好,在校外实习,校内毕业实习又有任务,只能先放放了,等毕业实习结束之后,在继续安卓闹钟开发之旅,相信这个时间不会很久的.现在毕业实习用到 ...
- MySQL分区总结
MySQL支持RANGE,LIST,HASH和KEY四种分区.其中,每个分区又都有一种特殊的类型.对于RANGE分区,有RANGE COLUMNS分区.对于LIST分区,有LIST COLUMNS分区 ...
- 设计窘境:来自 Repository 的一丝线索,Domain Model 再重新设计
写在前面 阅读目录: 疑惑解读 设计窘境 一幅图的灵感 为嘛还是你-Repository 后记 上一篇<No zuo no die:DDD 应对具体业务场景,Domain Model 重新设计& ...
- php模拟数据库常用操作效果
test.php <?php header("Content-type:text/html;charset='utf8'"); error_reporting(E_ALL); ...
- EasyUI管理后台模板(附源码)
下载地址:http://files.cnblogs.com/wyguo/easyui_demo.zip
- Kooboo CMS 无聊随笔(2)
上次写了一篇博客 http://www.cnblogs.com/kmsfan/p/Kooboo_CMS_suibi.html 作为这个系列的开篇,简单的介绍了一下Kooboo CMS的一些基本情况和界 ...
- C#基于两种需求向图片添加水印
使用场景 1.也就是大家经常用的,一般是图片的4个角落,基于横纵坐标来添加. 2.在图片内基于固定位置,文字始终居中.刚开始我基于第一种场景来根据水印汉字的长度来计算坐标,后来发现方法始终不可靠.现在 ...