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
三个字段,其中管段长度是用于剖析的权重值。
--增加终点idALTER TABLE postgres.pipe ADD COLUMN IF NOT EXISTS pgr_source integer;--增加起点idALTER 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/),不得用于商业目标,基于本文批改后的作品务必以雷同的许可公布。