2020/10/14,利用Postgis数据库对LineString的Shp文件进行路径规划,利用Geoserver对规划的结果进行发布,在Mapbox中使用WMS服务调用并呈现在地图上。
本文是以经纬度坐标为依据进行计算,参考其他网上已有教程可以选择以节点进行计算,其他链接放置本文底部。
软件版本
- Geoserver:geoserver-2.17.2-bin;
- PostGIS:2.1.7
- PostgreSQL:9.3
- QGIS:3.14.15
操作步骤
- 在
pgAdmin中导入shp文件,本次示例以roadLine文件为例,效果如图:

坐标系如图:

文件字段如图,框选内容字段是之前实验其他博文所添加,在本文中没有作用:
使用pgAdmin连接到数据库,直接导入文件,这里的模式选择为public,表名为gyroad,坐标系设置4326。

注意:红框内容强调,最后一个必须勾选才能生成单个的geometry。

- 数据导入完毕之后会在当前数据库的
public模式生成表,

接下来对数据库使用SQL语句,这里采用QGIS的SQL窗口,pgAdmin下的SQL也可以使用。
--向数据库导入支持PostGIS和pgRouting的函数和基础表(安装后只需要执行一次,以后会一直存在于本数据库中)。
CREATE EXTENSION postgis;
CREATE EXTENSION pgrouting;
CREATE EXTENSION postgis_topology;
CREATE EXTENSION fuzzystrmatch;
CREATE EXTENSION postgis_tiger_geocoder;
CREATE EXTENSION address_standardizer;
-----------------------------------------
--以起始点坐标为参数进行最短路径分析
--以gyroad表作为实例--
-----------------------------------------
ALTER TABLE gyroad ADD COLUMN source integer; --设置起点字段
ALTER TABLE gyroad ADD COLUMN target integer; --设置终点字段
ALTER TABLE gyroad ADD COLUMN length double precision; --增加路线长度字段(根据长度设置计算权重)
UPDATE gyroad SET length = ST_Length(geom); --计算路线长度
select pgr_createTopology('gyroad', 0.0001, 'geom', 'gid'); --创建拓扑模式
--为表增加起始点坐标x,y字段
ALTER TABLE gyroad ADD COLUMN x1 double precision;
ALTER TABLE gyroad ADD COLUMN y1 double precision;
ALTER TABLE gyroad ADD COLUMN x2 double precision;
ALTER TABLE gyroad ADD COLUMN y2 double precision;
--计算起始点坐标
UPDATE gyroad SET x1 =ST_x(ST_PointN(geom, 1));
UPDATE gyroad SET y1 =ST_y(ST_PointN(geom, 1));
UPDATE gyroad SET x2 =ST_x(ST_PointN(geom, ST_NumPoints(geom)));
UPDATE gyroad SET y2 =ST_y(ST_PointN(geom, ST_NumPoints(geom)));
--测试1
--A*算法路径查询
SELECT seq, id1 AS node, id2 AS edge, cost FROM pgr_astar(

本文详细介绍了如何利用PostGIS数据库对LineString的Shp文件进行路径规划,并通过Geoserver发布结果,然后在Mapbox中调用WMS服务显示。首先,通过pgAdmin导入Shp文件,接着使用SQL语句进行最短路径分析,包括A*算法和kdijkstra算法。然后,在Geoserver中创建SQL视图并发布图层。最后,使用Mapbox加载WMS服务展示路径规划结果。
最低0.47元/天 解锁文章
2881





