关于gis:PostGIS管网连通性分析

8次阅读

共计 2074 个字符,预计需要花费 6 分钟才能阅读完成。

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 三个字段,其中管段长度是用于剖析的权重值。

-- 增加终点 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_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/),不得用于商业目标,基于本文批改后的作品务必以雷同的许可公布。

正文完
 0