本文主要是介绍postgis+geoserver最短路径,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
postgis+geoserver最短路径
- 1 安装软件
- 2 数据预处理
- 3 操作postgres
- 4 操作Geoserver
- 5 计算最短路径
- 6 问题记录
1 安装软件
安装PostgreSQL与 postgis,以及geoserver。
2 数据预处理
对路网的shapefile数据进行处理:
1、打断相交线。
2、拓扑检查。
以上处理均可以在ArcMap中实现,在此不再详细列出操作步骤。注意如果不打断相交线或不进行拓扑检查,很有可能导致后面无法进行最短路径的计算,建议可以先用简单数据进行实验。
本实验所用的数据为自己绘制的简单数据,数据及属性表如下图所示 :
3 操作postgres
- 打开pgAdmin,新建名为simple_road的数据库。
- 在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;
-
打开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数据库中查看到导入的数据。 -
继续在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))
这篇关于postgis+geoserver最短路径的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!