PostGIS管網連通性分析

GIS在管網數據中的很重要的一個應用方向就是」管網空間分析「,其中包括連通性分析、上下游分析、爆管分析等等。下面是我使用postgis來實現該「管網連通性分析」的解決方案,分享給大家,以便相互學習。

使用該分析之前確保已添加擴展postgispgrouting

CREATE EXTENSION postgis;
CREATE EXTENSION pgrouting;

導入數據

將數據導入到postgreSQL資料庫,我是從ArcGIS直接導入的,導入方式參考//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查詢最近的起點、終點標識

image-20210426182158735

調用pgr_kdijkstraPath函數,查詢出起點、終點聯通的線。

image-20210315104505557

通過這裡我們可以看出,該分析的核心是調用了pgrouting擴展中的求最短路徑的函數pgr_kdijkstraPath,該函數用的是是Dijkstra演算法,通過已添加的索引pgr_sourcepgr_target以及權重值pgr_length,計算出兩點之間的最短路徑,如果有最短路徑,證明兩點聯通。

該分析可用於計算給水管網、排水管網、輸YouTube道等管網數據的兩節點的連通性,當然也可用於路網的最短路徑分析。

函數腳本

上面為整體分析思路,現在將上述思路整理成函數,方便使用

  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)
    

原文地址://gisarmory.xyz/blog/index.html?blog=PostGISConnect

關注《GIS兵器庫》, 第一時間獲得更多高品質GIS文章。

本文章採用 知識共享署名-非商業性使用-相同方式共享 4.0 國際許可協議 進行許可。歡迎轉載、使用、重新發布,但務必保留文章署名《GIS兵器庫》(包含鏈接:  //gisarmory.xyz/blog/),不得用於商業目的,基於本文修改後的作品務必以相同的許可發布。