pgRouting扩展了PostgreSQL/PostGIS地理空间数据库,以提供地理空间路由功能。在项目中用到,此处简单记录一下过程。
1、数据准备
路网数据是关键,在保持道路完整性的同时,道路在相交的路口要打断,路口的各道路起点或终点最好是同一个点。同时做好拓扑检查(ArcMap),防止道路自相交、覆盖或被覆盖等拓扑问题。
2、路网入库
使用pgAdmin在PostgreSQ新建数据库pgroute,并添加 postgis和pgrouting扩展。使用PostGIS工具将路网数据(road,坐标系为4326)导入pgroute数据库。
3、创建路网拓扑结构
--对road表添加起点(source)和终点(target)字段
alter table road add column source integer;
alter table road add column target integer;
--为了提升查询效率,需要对这source和target添加索引
create index road_source_idx on road("source");
create index road_target_idx on road("target");
--添加道理权重length和rev_length
alter table road add column length numeric;
alter table road add column rev_length numeric;
--创建权重
update road set length=ST_Length(geom,true);
update road set rev_length=length;
--创建拓扑结构,即为source和target字段赋值,生成road_vertices_pgr
SELECT pgr_createTopology('road',0.000002,'geom','gid');