路径规划的应用 - cytggit/Map-openlayers GitHub Wiki

数据入库

  • csv数据经过脚本处理后导入数据库

添加网络拓扑

添加起点字段:

  • ALTER TABLE polyline ADD COLUMN source integer;

添加终点字段:

  • ALTER TABLE polyline ADD COLUMN target integer;

添加道路权重值:

  • ALTER TABLE polyline ADD COLUMN length double precision;

起点和终点赋值(创建拓扑布局):

  • SELECT pgr_createTopology('polyline',0.00001, 'geom', 'id');

为source和target字段创建索引:

  • CREATE INDEX source_idx ON polyline("source");
  • CREATE INDEX target_idx ON polyline("target");

为length赋值:

  • update polyline set length =st_length(geom);

为polyline表添加reverse_cost字段并用length的值赋值:

  • ALTER TABLE polyline ADD COLUMN reverse_cost double precision;
  • UPDATE polyline SET reverse_cost =length;

添加起点和终点的坐标字段

  • ALTER TABLE polyline ADD COLUMN x1 double precision;
  • ALTER TABLE polyline ADD COLUMN y1 double precision;
  • ALTER TABLE polyline ADD COLUMN x2 double precision;
  • ALTER TABLE polyline ADD COLUMN y2 double precision;

为起点和终点坐标字段赋值

  • UPDATE polyline SET x1 =ST_x(ST_PointN(geom, 1));
  • UPDATE polyline SET y1 =ST_y(ST_PointN(geom, 1));
  • UPDATE polyline SET x2 =ST_x(ST_PointN(geom, ST_NumPoints(geom)));
  • UPDATE polyline SET y2 =ST_y(ST_PointN(geom, ST_NumPoints(geom)));

geoserver添加路径查询的sql视图

使用pgr_dijkstra算法查询

SELECT seq,id1 AS node, id2 AS edge, cost,geom FROM pgr_dijkstra('

SELECT id,

source::integer,

target::integer,

length::double precision AS cost

FROM polyline',

%source%, %target%, false, false) as di

join polyline pt

on di.id2 = pt.id

使用A*算法查询

SELECT seq,id1 AS node, id2 AS edge, cost,geom ,x1,y1,x2,y2 FROM pgr_astar('

SELECT id,

source::integer,

target::integer,

length::double precision AS cost,

x1,y1,x2,y2

FROM polyline',

21, 26, false, false) as di

join polyline pt

on di.id2 = pt.id

基于pgrouting的任意两点间的最短路径查询函数 ----优化展示效果

一:

在真实的场景中用户进行路径规划的时候都是基于经纬度数据进行路径规划的,因为用户根本不会知道道路上节点的ID。因此下例讲述如何查询任意两点间的最短路径。 最短路径应用一

二:

前一篇查询任意两点间最短路径的函数,功能不完善。现在对该函数进行扩展,支持用户自己输入查询的数据库表,另外进行跨楼层的最短路径规划时,需要查询从A到楼梯口的最短路径和楼梯口到B的最短路径,这些都需要进行最短路径规划的时候能够自己选择数据表。 最短路径应用二

三:

第二篇可以选择数据库表,但是还没实现跨楼层路径规划。这一篇的话,在上一篇的基础上,A和B的所在楼层作为输入参数,实现跨楼层路径规划,其中A到楼梯口和楼梯口到B的最短距离直接调用上一篇的函数。 最短路径应用三