postgis+geoserver最短路径

本文介绍了如何利用PostGIS和GeoServer计算两点间的最短路径。涉及PostgreSQL数据库的安装、数据预处理、操作postgres、操作Geoserver以及计算最短路径的步骤。在数据预处理中强调了拓扑检查和编码设置的重要性。在计算最短路径时,通过pgr_dijkstra函数并结合SQL进行路径截取和拼接。同时,文中还指出了在使用过程中遇到的问题及解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1 安装软件

安装PostgreSQL与 postgis,以及geoserver。

2 数据预处理

对路网的shapefile数据进行处理:

1、打断相交线。
2、拓扑检查。

以上处理均可以在ArcMap中实现,在此不再详细列出操作步骤。注意如果不打断相交线或不进行拓扑检查,很有可能导致后面无法进行最短路径的计算,建议可以先用简单数据进行实验。

本实验所用的数据为自己绘制的简单数据,数据及属性表如下图所示 :
在这里插入图片描述 在这里插入图片描述

3 操作postgres

  1. 打开pgAdmin,新建名为simple_road的数据库。
    在这里插入图片描述
    在这里插入图片描述
  2. 在simple_road数据库上右键打开CREATE Script,对simple_road数据库增加如下的拓展:
    在这里插入图片描述
CREATE EXTENSION postgis;
CREATE EXTENSION postgis_topology;
CREATE EXTENSION fuzzystrmatch;
CREATE EXTENSION postgis_tiger_geocoder; 
CREATE EXTENSION pgRouting;
CREATE EXTENSION address_standardizer;
  1. 打开postgis shapefile import/export manager工具,进行如下图所示的4个步骤:
    在这里插入图片描述
    (1)点击“view connection details”连接至postgres的simple_road数据库。
    在这里插入图片描述
    (2)点击“add file”选择shapefile文件上传,注意设置SRID为4326,Geo_Colunm为geom。
    在这里插入图片描述
    (3) 点击“options”进入设置,设置编码为“GBK”以支持中文字段,勾选三个选项,注意必须要勾选最后一个选项,将MULIPOLYLINE简化为POLYLINE。
    在这里插入图片描述
    (4)点击“import”导入数据后,即可在postgres的simple_road数据库中查看到导入的数据。

  2. 继续在CREATE Script中输入代码进行以下的步骤:

(1) 添加路网线段的起止点,存储线段的首尾编号

ALTER TABLE simple_road ADD COLUMN source integer;
ALTER TABLE simple _road ADD COLUMN target integer;

(2)添加路网道路权重值

ALTER TABLE simple_road ADD COLUMN length double precision;

(3)为权重赋值,这里将路段的长度赋值给权重值

UPDATE simple_road SET length = ST_Length(geom);

(4) 回程成本设置,则可支持回程

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

(5) 创建拓扑结构(数据量较大时,这一步骤需要等待较长)

SELECT pgr_createTopology('province_road',0.0001, 'geom', 'gid');

(6) 为source和target字段创建索引

CREATE INDEX source_idx ON simple_road ("source");
CREATE INDEX target_idx ON simple_road ("target");

(7) 创建起点经度x1、起点纬度y1、终点经度x2、终点纬度y2

ALTER TABLE simple_road ADD COLUMN x1 double precision;
ALTER TABLE simple_road ADD COLUMN y1 double precision;	
ALTER TABLE simple_road ADD COLUMN x2 double precision;
ALTER TABLE simple_road ADD COLUMN y2 double precision;

(8) 给x1、y1、x2、y2复制

UPDATE simple_road SET x1 =ST_x(ST_PointN(geom, 1));	
UPDATE simple_road SET y1 =ST_y(ST_PointN(geom
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值