PostGIS管網連通性分析
- 2021 年 4 月 27 日
- 筆記
- GIS, PostGIS, PostgreSQL
GIS在管網數據中的很重要的一個應用方向就是」管網空間分析「,其中包括連通性分析、上下游分析、爆管分析等等。下面是我使用postgis
來實現該「管網連通性分析」的解決方案,分享給大家,以便相互學習。
使用該分析之前確保已添加擴展postgis
、pgrouting
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_source
、pgr_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_source
和pgr_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_source
和pgr_target
以及權重值pgr_length
,計算出兩點之間的最短路徑,如果有最短路徑,證明兩點聯通。
該分析可用於計算給水管網、排水管網、輸YouTube道等管網數據的兩節點的連通性,當然也可用於路網的最短路徑分析。
函數腳本
上面為整體分析思路,現在將上述思路整理成函數,方便使用
- 創建拓撲函數:analysis_updatetopology()
- 計算連通性函數:analysis_connect()
如何使用
-
調用
analysis_updatetopology()
函數,完成拓撲創建-- 傳入表名pipe,創建拓撲 select * from analysis_updatetopology('pipe')
-
從地圖選擇起點、終點,然後調用
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/),不得用於商業目的,基於本文修改後的作品務必以相同的許可發布。