趙雅鵬,江彬,樊偉平,齊跡
(中煤(西安)地下空間科技發(fā)展有限公司,陜西 西安 710054)
城市地下管網(wǎng)根據(jù)用途可以將地下管線分為供水、電路、燃氣、通信等類別,不同類別的管線,承擔(dān)著城市不同的運作,保障了城市發(fā)展的經(jīng)濟建設(shè)[1]。地下管線管理系統(tǒng)是對地下管線進行綜合管理的計算機管理系統(tǒng),在計算機軟硬件、數(shù)據(jù)庫和互聯(lián)網(wǎng)等條件的支持下,運用GIS技術(shù)對地下管網(wǎng)位置關(guān)系、拓撲關(guān)系、屬性信息等進行存儲、展示、處理、輸出,結(jié)合實地需求,個性化地運用和展示城市地下管網(wǎng)信息。地理信息系統(tǒng)的空間分析能力可以分析和可視化地理空間數(shù)據(jù)中隱藏的信息,制作統(tǒng)計圖表或?qū)n}地圖,輔助決策;同時,地理信息系統(tǒng)的網(wǎng)絡(luò)分析能力可以分析地理網(wǎng)絡(luò),如排水網(wǎng)絡(luò)的路徑分析、最短路徑的求解等,為管道突發(fā)事故應(yīng)急救援提供有力支持,是解決管網(wǎng)問題的利器。另外,GIS提供了強大的數(shù)據(jù)快速查詢和展示能力,為二三維管網(wǎng)呈現(xiàn)做了有力支撐[2-4]。因此高效、穩(wěn)定的管網(wǎng)查詢、空間分析、網(wǎng)絡(luò)分析服務(wù)能力,是上述呈現(xiàn)的前提條件。筆者就如何構(gòu)建高性能管網(wǎng)分析做了深入研究,采用開源數(shù)據(jù)庫Postgresql結(jié)合過程存儲開發(fā),應(yīng)用數(shù)據(jù)庫自身高性能特性,有效提升了管網(wǎng)數(shù)據(jù)的查詢分析能力。
PostgreSQL是一個強大的對象關(guān)系數(shù)據(jù)庫管理系統(tǒng),是自由和開放源代碼的軟件。PostgreSQL能夠在運行時添加新的數(shù)據(jù)類型、函數(shù)和訪問方法的機制。正因為如此PostGIS擴展可以由單獨的開發(fā)團隊開發(fā),但仍然可以非常緊密地集成到PostgreSQL數(shù)據(jù)庫中[5-7]。
PostGIS通過向PostgreSQL添加對空間數(shù)據(jù)類型、空間索引和空間函數(shù)的支持,將PostgreSQL數(shù)據(jù)庫管理系統(tǒng)轉(zhuǎn)換為空間數(shù)據(jù)庫。因為PostGIS是建立在PostgreSQL之上的,所以PostGIS自動繼承了重要的“企業(yè)級”特性以及開放源代碼的標(biāo)準(zhǔn)[8-9]。
存儲過程是在大型數(shù)據(jù)庫系統(tǒng)中,一組為了完成特定功能的SQL語句集,它存儲在數(shù)據(jù)庫中,一次編譯后永久有效,用戶通過指定存儲過程的名字并給出參數(shù)(如果該存儲過程帶有參數(shù))來執(zhí)行它。存儲過程是數(shù)據(jù)庫中的一個重要對象。在數(shù)據(jù)量特別龐大的情況下利用存儲過程能達到倍速的效率提升。筆者基于存儲過程開發(fā)了管網(wǎng)分析常用功能。
管網(wǎng)分析算法依托Postgresql數(shù)據(jù)庫存儲過程函數(shù)結(jié)合postgis空間數(shù)據(jù)庫插件實現(xiàn)。JAVA調(diào)用數(shù)據(jù)庫管網(wǎng)分析方法后以REST方式給前端提供服務(wù),來查詢管網(wǎng)分析結(jié)果。
目前常用管網(wǎng)分析功能包括如圖1所示:

圖1 管網(wǎng)分析方法
管網(wǎng)數(shù)據(jù)一般包含管點和管線數(shù)據(jù),數(shù)據(jù)為包含坐標(biāo)(x、y、z)信息的矢量數(shù)據(jù)。管線數(shù)據(jù)包含分析必須字段如:管線類型、管線編號、起始管點編號、終止管點編號、起始管點埋深、終止管點埋深、起始管點高程、終止管點高程、管徑、材質(zhì)、管線長度。管點數(shù)據(jù)包含必須字段如:管點編號、管點類型。
管網(wǎng)數(shù)據(jù)通過postgis Bundle數(shù)據(jù)插件導(dǎo)入Postgresql數(shù)據(jù)庫,導(dǎo)入過程中注意矢量數(shù)據(jù)坐標(biāo)系。矢量數(shù)據(jù)導(dǎo)入過程如圖2所示:

圖2 矢量數(shù)據(jù)導(dǎo)入插件
(1)代碼結(jié)構(gòu)示例
管網(wǎng)分析是基于postgis空間函數(shù)插件開發(fā),因此需在Postgresql Admin4中執(zhí)行CREATE EXTENSION postgis命令安裝插件。管網(wǎng)分析功能采用存儲過程函數(shù)實現(xiàn),函數(shù)根據(jù)功能定義輸入?yún)?shù)和輸出參數(shù),下面給出了上下游追蹤函數(shù)結(jié)構(gòu)代碼段示例:
CREATE OR REPLACE FUNCTION public.test_pipe_upstream_downstream_tracking(
pipeline_tablename character varying,
pipepoint_tablename character varying,
pipeline1_no character varying,
is_upstream boolean,
tracking_type character varying)
RETURNS TABLE(v_lno_array text[])
LANGUAGE 'plpgsql'
COST 100
VOLATILE STRICT PARALLEL UNSAFE
ROWS 1000
AS $BODY$
declare
--變量宣稱
begin
--過程函數(shù)實現(xiàn)邏輯
end;
$BODY$;
ALTER FUNCTION public.test_pipe_upstream_downstream_tracking(character varying,character varying,character varying,boolean,character varying) OWNER TO postgres;
基于上述方法創(chuàng)建過程函數(shù),實現(xiàn)了管網(wǎng)常用功能:垂直凈距分析、大管接小管分析、倒坡分析、覆土分析、橫斷面分析、開挖分析、上下游追蹤分析、水平凈距分析、連通性分析、縱斷面分析。
執(zhí)行各過程函數(shù)注冊函數(shù)到Postgresql數(shù)據(jù)庫。各函數(shù)位置如圖3所示。各管網(wǎng)分析函數(shù)列表如圖4所示,以test開頭的函數(shù)。

圖3 函數(shù)位置

圖4 管網(wǎng)分析函數(shù)列表
(2)管網(wǎng)分析部分結(jié)果展示
①大管接小管分析函數(shù)入?yún)?當(dāng)前管線表名,查詢范圍多邊形。輸出結(jié)果為:大管接小管連接點編號,大管管線編號,大管管徑,大管材質(zhì),小管管線編號,小管管徑,小管材質(zhì)。如圖5所示:

圖5 大管接小管分析結(jié)果
②上下游追蹤分析函數(shù)入?yún)?當(dāng)前管線表名,當(dāng)前管點表名,管線編號,上下游追蹤標(biāo)識(上游為true,下游為false),查詢終止標(biāo)識管點。輸出結(jié)果為:管線編號數(shù)組。如圖6所示:

圖6 上下游追蹤分析結(jié)果
③連通性分析函數(shù)入?yún)?管線表名,管線編號1,管線編號2。輸出結(jié)果為:管線編號,管線水平投影長度。如圖7所示:

圖7 連通性分析結(jié)果
本文以地下管網(wǎng)分析應(yīng)用為研究背景,深入研究了Postgresql數(shù)據(jù)庫過程函數(shù)以及postgis空間數(shù)據(jù)庫插件應(yīng)用方式的基礎(chǔ)上,開發(fā)常用管網(wǎng)分析過程函數(shù),使用戶通過簡單的sql查詢語句即可得到管網(wǎng)分析結(jié)果。從性能上而言,基于過程函數(shù)開發(fā)方式,可充分發(fā)揮開源Postgresql數(shù)據(jù)庫自身高性能的數(shù)據(jù)檢索特點,此管網(wǎng)分析服務(wù)相比傳統(tǒng)后端開發(fā)管網(wǎng)分析功能查詢效率更高。