路径规划PgRouting
2015年7月1日
1 目标:根据矢量路线图,进行路线规划计算。
输入起止点,生成路线规划的最短路径。
2 方法:pgRouting。
目标:使用已有的成熟算法,利用postgresql中的postgis图层和postgis算法,进行路线规划。
原理:Dijkstra,A*(A Star)。
Dijkstra:从起点开始计算到各点的最短路径,逐个取出。找到最短路径。
参考:
http://baike.baidu.com/view/1712262.htm?fromtitle=Dijkstra%E7%AE%97%E6%B3%95&fromid=215612&type=syn
A*:与Dijkstra类似,从起点开始计算与各点的最短路径和终点的估计最短路径之和,逐个取出。找到最短路径。效率较高。
参考:http://blog.youkuaiyun.com/crayondeng/article/details/12342989
2.1 方法:安装
参考:http://www.xuebuyuan.com/1655300.html
2.1.1下载源程序
下载pgRouting,解压后复制到postgres的目录中,与原程序合并。
如果安装的postgis中已经包含pgRouting则不用再手动安装。
2.1.2添加postgis和pgRouting扩展
Create Extension Postgis;
Create Extension pgRouting;
参见:..\postgis\Postgis.docx中扩展安装方法
2.2 方法:准备规划数据
规则数据要求各个线路之间具有相互独立,在换乘站具有节点。
2.2.1创建换乘节点:在线路相交的位置生成节点。
2.2.1.1 使用Qgis生成一副简单的线路矢量图。
2.2.1.2 使用OpenJump进行交点分割。
参见:..\QGIS\编译过程\qgis应用\qgis应用-矢量操作.docx中OpenJump部分。
2.2.1.3 将数据导入postgis。
2.2.2构建拓扑关系:pgr_createTopology()。
拓扑关系:所有线段节点之间的相互关系。包括每一条线段的节点与其它节点之间的连接线起点、终点,且每条线段只使用一次。目的是路径的可达性基础数据。
起点:source。
终点:target。
2.2.2.1 添加起止点:
2.2.2.2 构建拓扑数据索引:默认创建source和target的btree索引。
如果没有创建,可以使用create index IndexName on TableName(“colName”);创建索引。
2.2.3添加每条线段的权重:cost
可以使用qgis或者直接在postgis中添加cost的字段(integer)并设置一些值。
2.3 方法:Dijkstra计算最短路径,pgr_dijkstra()。
dijstra算法需要提供每个元素的id,source,target,cost;路径起点,终点。
结果为id,起点,经过的边,cost数组。
将结果保存为新的表供使用。
示例:将结果保存为数据表
select seq,id1 asnode,id2 as edge,cost into dijkstra from pgr_dijkstra(