最近又该推进毕业设计里面的算法了,两个基本的算法:Dijkstra算法和A*算法前段时间写完了,都是原始实现,没有考虑更多的优化,因为是要作为自己测试结果的一个对比基准。而打算研究的双向算法,包括双向Dijkstra(Bidirection Dijkstra)和双向A*(Bidirection A*)算法,也是要自己去实现的。今天在搜集双向搜索算法时够然看到一只在使用的pgRouting居然出2.0版了,赶紧去官网看下新特性,果断加入了双向算法的实现!这简直是今天最大的好消息,可以直接在我的数据集上进行测试了。别的不说,赶紧动手把2.0的环境给搞起来。
上一个版本的pgRouting是1.0,并且能够适配的最高的postgresql版本是8.4,导致我现在用的还一只都是8.4版本,看了下2.0的支持,还保留了对8.4的兼容,但是现在9.2已经是recommended的了。
安装前插一句,又两种方式的安装,一种是自己下载源码,通过cmake进行配置,生成工程文件后编译生成需要的dll,另一种是使用别人编译好的dll。编译涉及的环境主要是boost,还需要下载、编译、安装,相对较为繁琐,当时1.0版本时没有找到编译好的dll,只能自己动手编译了。还好,现在有编译好的dll可供下载,此处快速安装使用编译后的包。
快速安装:pgRouting下载地址
1.选择pgrouting-pg92-binaries-2.0w32.zip包,也可以选择64位包。
2.找到本机的PostgreSQL安装目录(例如:G:\Program Files\PostgreSQL\9.2),将三个文件夹中的内容复制到对应文件夹下,share中有extension目录,对应复制到此目录。除了文件夹之外的其他文件,都复制到9.2目录下,跟bin文件夹平级。
3.然后,就没有然后了,这就装好了,下面需要在postgis创建pgRouting的扩展。
4.通过pgAmin连接到postgis数据库,进入console模式,输入以下命令create EXTENSION pgrouting;之后输入select pgr_version(),看到如下结果。
5.下一步需要进行函数的注册,将pgrouting包share目录下的sql文件拷贝到安装目录下(最好是bin目录下,方便psql执行),如下图
6.下一步是打开psql console,执行这几个sql文件,注册函数。关于如何在console中执行sql脚本插播一句,可以使用\i *.sql执行位于bin目录下的sql文件,那其他文件下的怎么办呢,此时还用木灵如下\i D:/GISData/test.sql的格式。
7.这一步是可选的,即使用测试数据集进行路径规划,检测结果是否正确(可参见这个链接:使用数据集测试pgRouting模块)。由于自己的库中包含了已经建立好拓扑关系的数据,所以直接使用就好了。
另外,pgrouting1.0版本中提供的函数shortestpath/shortestpath_astar/shortestpath_shootingstar函数被替换了,分别为pgr_dijkstar/pgr_astar/pgr_shootingstar,进行程序迁移时需要注意这一点。
题外话,从去年开始到现在,使用post系列的东西有一年多了,以前用的时候解决了问题最多就保留个文档仍在自己电脑里面就完事,现在逐渐认识到写博客分享的意义,决定趁毕业之前这段时间还在一直做post系列的开发,打算逐步把以前遇到的问题和解决方案搬到博客上,以备自己查询,也方便那些遇到跟我相似问题的人参考。