GIS在管网数据中的很重要的一个利用方向就是”管网空间剖析“,其中包含连通性剖析、上下游剖析、爆管剖析等等。上面是我应用postgis来实现该“管网连通性剖析”的解决方案,分享给大家,以便互相学习。

应用该剖析之前确保已增加扩大postgispgrouting

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_sourcepgr_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_sourcepgr_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_sourcepgr_target以及权重值pgr_length,计算出两点之间的最短门路,如果有最短门路,证实两点联通。

该剖析可用于计算给水管网、排水管网、输油管道等管网数据的两节点的连通性,当然也可用于路网的最短路径分析。

函数脚本

下面为整体剖析思路,当初将上述思路整顿成函数,方便使用

  1. 创立拓扑函数:analysis_updatetopology()
  2. 计算连通性函数:analysis_connect()

如何应用

  1. 调用analysis_updatetopology()函数,实现拓扑创立

    -- 传入表名pipe,创立拓扑select * from analysis_updatetopology('pipe')
  2. 从地图抉择终点、起点,而后调用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/),不得用于商业目标,基于本文批改后的作品务必以雷同的许可公布。