这几天研究了下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