PostGIS管網連通性分析


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查詢最近的起點、終點標識

image-20210426182158735

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

image-20210315104505557

通過這里我們可以看出,該分析的核心是調用了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)
    

總結

  1. 連通性分析的核心是利用最短路徑分析算法來實現
  2. 進行分析之前需要對管網數據創建拓撲

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

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

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM