下载代码

  我在WebGIS最佳实践-2
在WebGIS程序中落实路径分析
中关系过pgRouting,以后来探望这头小象能给我们带来些什么。

图片 1

先上效果图给大家鼓鼓劲。:》

 
为了实现上述效果自个儿用jsp和openlayers编写了服务端和客户端,不过本文的根本是介绍pgRouting所以不在那里详细介绍这个这几个代码了,大家能够从下载包中找到这多个文件。要动用pgRouting得先安装,小编倘使我们已经安装了Postgresql和PostGIS。

 
这里下载合适的二进制包,作者下的是Windows本子,解压缩后把Lib上面的动态库复制到Postgresql的bin目录下,把Share\Contrib下边的sql文件复制到Postgresql的share\contrib目录下,然后重新启航Postgresql(这一步小编不显著是还是不是供给)。然后就能够展开路径搜素了,上面大家从数据准备上马,一步步得创设出全部可用的路网数据表。Let·s
rock!

 
大家先要创设二个新数据库,就叫routing吧,大家会先让它协理pgRouting的函数然后给她增添一张表,一张路网表。随后大家会要求履行一些sql脚本,你能够用postgresql提供的小程序psql.exe来执行也得以用图形化学工业具pgAdmin来形成。作者选择用psql。postgresql提供的次序createdb.exe能够扶持大家创设数据库,大家只要用户是postgres:

createdb -U postgres routing

  然后让数据库辅助PostGIS和pgRouting的函数和基础表

psql –U postgres –d routing –f postgis.sql
psql –U postgres –d routing –f spatial_ref_sys.sql
psql –U postgres –d routing –f routing_core.sql
psql –U postgres –d routing –f routing_core_wrappers.sql
psql –U postgres –d routing –f routing_topology.sql

其中,“postgis.sql,spatial_ref_sys.sql”能够在“<Postgresql的设置路径>\<version>\share\contrib\postgis<-1.4>”下边找到,到此数据库创造完结。

 
为了创设路网表,我们必要一些征程数据。能够从OpenStreetMap上免费获得XML格式的征途数据。由于大家平昔更便于得到Shapefile格式的数额,所以本人控制用shp来实现多少导入。从Geobase下载道路数据。这些网站提供加拿大举国上下的征程数据,选用British
Columbia , 艾德ition
8.0的Shapefile格式(nrn_rrn_bc_shp_en.zip)。解压缩,大家要运用的数据就在“NOdysseyN_BC_8_0_ROADSEG”中。这几个表的字段很多,我们能够用熟稔的GIS数据处理工科具删掉一些字段,当然不处理也没涉及。

  先用shp2psql.exe程序把shp文件装换来sql脚本

shp2pgsql -s 4326 NRN_BC_8_0_ROADSEG public.street_bc > street_bc.sql

 

 

若果一切顺遂的话,大家会得到文件“street_bc.sql”,那是二个非常的大的文书。然后大家实行这几个文件:

psql -U postgres -d routing -f street_bc.sql

下边创制路网的拓扑结构

psql –U postgres –d routing –c “alter table street_bc add “source” integer”
psql –U postgres –d routing –c “alter table street_bc add “target” integer”
psql –U postgres –d routing –c “select assign_vertex_id(“street_bc”,0.001,”the_geom”,”gid”)”
psql –U postgres –d routing –c “alter table street_bc add “length” double precision”
psql –U postgres –d routing –c “update routing set length=st_length(the_geom)”

到这边路网数据就搞好了。来测试一下:

SELECT astext(st_transform(the_geom,900913)),l_stname_c as name FROM shortest_path('SELECT gid as id,source::integer,target::integer,length::double precision as cost FROM street_bc',158390, 63634, false, false),street_bc where edge_id = gid;

相关文章

网站地图xml地图