PostGIS管網連通性分析

GIS兵器庫發表於2021-04-27

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)
    

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

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

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

相關文章