GIS 在管网数据中的很重要的一个利用方向就是”管网空间剖析“,其中包含连通性剖析、上下游剖析、爆管剖析等等。上面是我应用 postgis
来实现该“管网连通性剖析”的解决方案,分享给大家,以便互相学习。
应用该剖析之前确保已增加扩大postgis
、pgrouting
CREATE EXTENSION postgis;
CREATE EXTENSION pgrouting;
导入数据
将数据导入到 postgreSQL
数据库,我是从 ArcGIS
间接导入的,导入形式参考 https://blog.csdn.net/eternity_xyf/article/details/80168029
创立拓扑
这里我用的管网数据表名为pipe
创立拓扑,生成 pipe_vertices_pgr
,该操作相似于ArcGIS
中创立路网数据。
为 pipe
增加管段起始编号 pgr_source
、完结编号pgr_target
、管段长度pgr_length
三个字段,其中管段长度是用于剖析的权重值。
-- 增加终点 id
ALTER TABLE postgres.pipe ADD COLUMN IF NOT EXISTS pgr_source integer;
-- 增加起点 id
ALTER TABLE postgres.pipe ADD COLUMN IF NOT EXISTS pgr_target integer;
-- 增加权重值
ALTER TABLE postgres.pipe ADD COLUMN IF NOT EXISTS pgr_length double precision;
为 pgr_source
、pgr_target
创立索引
-- 为 pgr_source 字段创立索引
CREATE INDEX IF NOT EXISTS pgr_source_idx ON postgres.pipe("pgr_source")
-- 为 pgr_target 字段创立索引
CREATE INDEX IF NOT EXISTS pgr_target_idx ON postgres.pipe("pgr_target")
为权重字段 pgr_length
赋值
-- 为 pgr_length 赋值,shape 为几何类型的字段,可能为 shape、the_geom,通过 ArcGIS 导入的时候字段为 "shape",其余形式导入时个别为 "the_geom"
update postgres.pipe set pgr_length = public.st_length(shape)
调用 pgr_createTopology
办法,创立拓扑,这个步骤会为 pgr_source
和pgr_target
字段赋值,同时生成节点表pipe_vertices_pgr
-- 为指标表创立拓扑布局,即为 pgr_source 和 pgr_target 字段赋值
select public.pgr_createTopology('postgres.pipe',0.000001,'shape','objectid','pgr_source','pgr_target')
计算联通性
依据终点坐标、起点坐标从 pipe_vertices_pgr
查问最近的终点、起点标识
调用 pgr_kdijkstraPath
函数,查问出终点、起点联通的线。
通过这里咱们能够看出,该剖析的外围是调用了 pgrouting
扩大中的求最短门路的函数 pgr_kdijkstraPath
,该函数用的是是 Dijkstra 算法,通过已增加的索引pgr_source
和pgr_target
以及权重值pgr_length
,计算出两点之间的最短门路,如果有最短门路,证实两点联通。
该剖析可用于计算给水管网、排水管网、输油管道等管网数据的两节点的连通性,当然也可用于路网的最短路径分析。
函数脚本
下面为整体剖析思路,当初将上述思路整顿成函数,方便使用
- 创立拓扑函数:analysis_updatetopology()
- 计算连通性函数:analysis_connect()
如何应用
-
调用
analysis_updatetopology()
函数,实现拓扑创立-- 传入表名 pipe,创立拓扑 select * from analysis_updatetopology('pipe')
-
从地图抉择终点、起点,而后调用
analysis_connect()
函数,失去剖析后果-- 传入表名、终点坐标、起点坐标、容差值 select * from analysis_connect('pipe',103.90893393,30.789659886,103.911700936,30.787850094,0.00001)
原文地址:http://gisarmory.xyz/blog/index.html?blog=PostGISConnect
关注《GIS 兵器库》,第一工夫取得更多高质量 GIS 文章。
本文章采纳 常识共享署名 - 非商业性应用 - 雷同形式共享 4.0 国内许可协定 进行许可。欢送转载、应用、从新公布,但务必保留文章署名《GIS 兵器库》(蕴含链接:http://gisarmory.xyz/blog/),不得用于商业目标,基于本文批改后的作品务必以雷同的许可公布。