趙雅鵬,江彬,樊偉平,齊跡
(中煤(西安)地下空間科技發(fā)展有限公司,陜西 西安 710054)
城市地下管網(wǎng)根據(jù)用途可以將地下管線分為供水、電路、燃?xì)?、通信等類別,不同類別的管線,承擔(dān)著城市不同的運(yùn)作,保障了城市發(fā)展的經(jīng)濟(jì)建設(shè)[1]。地下管線管理系統(tǒng)是對(duì)地下管線進(jìn)行綜合管理的計(jì)算機(jī)管理系統(tǒng),在計(jì)算機(jī)軟硬件、數(shù)據(jù)庫(kù)和互聯(lián)網(wǎng)等條件的支持下,運(yùn)用GIS技術(shù)對(duì)地下管網(wǎng)位置關(guān)系、拓?fù)潢P(guān)系、屬性信息等進(jìn)行存儲(chǔ)、展示、處理、輸出,結(jié)合實(shí)地需求,個(gè)性化地運(yùn)用和展示城市地下管網(wǎng)信息。地理信息系統(tǒng)的空間分析能力可以分析和可視化地理空間數(shù)據(jù)中隱藏的信息,制作統(tǒng)計(jì)圖表或?qū)n}地圖,輔助決策;同時(shí),地理信息系統(tǒng)的網(wǎng)絡(luò)分析能力可以分析地理網(wǎng)絡(luò),如排水網(wǎng)絡(luò)的路徑分析、最短路徑的求解等,為管道突發(fā)事故應(yīng)急救援提供有力支持,是解決管網(wǎng)問(wèn)題的利器。另外,GIS提供了強(qiáng)大的數(shù)據(jù)快速查詢和展示能力,為二三維管網(wǎng)呈現(xiàn)做了有力支撐[2-4]。因此高效、穩(wěn)定的管網(wǎng)查詢、空間分析、網(wǎng)絡(luò)分析服務(wù)能力,是上述呈現(xiàn)的前提條件。筆者就如何構(gòu)建高性能管網(wǎng)分析做了深入研究,采用開(kāi)源數(shù)據(jù)庫(kù)Postgresql結(jié)合過(guò)程存儲(chǔ)開(kāi)發(fā),應(yīng)用數(shù)據(jù)庫(kù)自身高性能特性,有效提升了管網(wǎng)數(shù)據(jù)的查詢分析能力。
PostgreSQL是一個(gè)強(qiáng)大的對(duì)象關(guān)系數(shù)據(jù)庫(kù)管理系統(tǒng),是自由和開(kāi)放源代碼的軟件。PostgreSQL能夠在運(yùn)行時(shí)添加新的數(shù)據(jù)類型、函數(shù)和訪問(wèn)方法的機(jī)制。正因?yàn)槿绱薖ostGIS擴(kuò)展可以由單獨(dú)的開(kāi)發(fā)團(tuán)隊(duì)開(kāi)發(fā),但仍然可以非常緊密地集成到PostgreSQL數(shù)據(jù)庫(kù)中[5-7]。
PostGIS通過(guò)向PostgreSQL添加對(duì)空間數(shù)據(jù)類型、空間索引和空間函數(shù)的支持,將PostgreSQL數(shù)據(jù)庫(kù)管理系統(tǒng)轉(zhuǎn)換為空間數(shù)據(jù)庫(kù)。因?yàn)镻ostGIS是建立在PostgreSQL之上的,所以PostGIS自動(dòng)繼承了重要的“企業(yè)級(jí)”特性以及開(kāi)放源代碼的標(biāo)準(zhǔn)[8-9]。
存儲(chǔ)過(guò)程是在大型數(shù)據(jù)庫(kù)系統(tǒng)中,一組為了完成特定功能的SQL語(yǔ)句集,它存儲(chǔ)在數(shù)據(jù)庫(kù)中,一次編譯后永久有效,用戶通過(guò)指定存儲(chǔ)過(guò)程的名字并給出參數(shù)(如果該存儲(chǔ)過(guò)程帶有參數(shù))來(lái)執(zhí)行它。存儲(chǔ)過(guò)程是數(shù)據(jù)庫(kù)中的一個(gè)重要對(duì)象。在數(shù)據(jù)量特別龐大的情況下利用存儲(chǔ)過(guò)程能達(dá)到倍速的效率提升。筆者基于存儲(chǔ)過(guò)程開(kāi)發(fā)了管網(wǎng)分析常用功能。
管網(wǎng)分析算法依托Postgresql數(shù)據(jù)庫(kù)存儲(chǔ)過(guò)程函數(shù)結(jié)合postgis空間數(shù)據(jù)庫(kù)插件實(shí)現(xiàn)。JAVA調(diào)用數(shù)據(jù)庫(kù)管網(wǎng)分析方法后以REST方式給前端提供服務(wù),來(lái)查詢管網(wǎng)分析結(jié)果。
目前常用管網(wǎng)分析功能包括如圖1所示:
圖1 管網(wǎng)分析方法
管網(wǎng)數(shù)據(jù)一般包含管點(diǎn)和管線數(shù)據(jù),數(shù)據(jù)為包含坐標(biāo)(x、y、z)信息的矢量數(shù)據(jù)。管線數(shù)據(jù)包含分析必須字段如:管線類型、管線編號(hào)、起始管點(diǎn)編號(hào)、終止管點(diǎn)編號(hào)、起始管點(diǎn)埋深、終止管點(diǎn)埋深、起始管點(diǎn)高程、終止管點(diǎn)高程、管徑、材質(zhì)、管線長(zhǎng)度。管點(diǎn)數(shù)據(jù)包含必須字段如:管點(diǎn)編號(hào)、管點(diǎn)類型。
管網(wǎng)數(shù)據(jù)通過(guò)postgis Bundle數(shù)據(jù)插件導(dǎo)入Postgresql數(shù)據(jù)庫(kù),導(dǎo)入過(guò)程中注意矢量數(shù)據(jù)坐標(biāo)系。矢量數(shù)據(jù)導(dǎo)入過(guò)程如圖2所示:
圖2 矢量數(shù)據(jù)導(dǎo)入插件
(1)代碼結(jié)構(gòu)示例
管網(wǎng)分析是基于postgis空間函數(shù)插件開(kāi)發(fā),因此需在Postgresql Admin4中執(zhí)行CREATE EXTENSION postgis命令安裝插件。管網(wǎng)分析功能采用存儲(chǔ)過(guò)程函數(shù)實(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
--過(guò)程函數(shù)實(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)建過(guò)程函數(shù),實(shí)現(xiàn)了管網(wǎng)常用功能:垂直凈距分析、大管接小管分析、倒坡分析、覆土分析、橫斷面分析、開(kāi)挖分析、上下游追蹤分析、水平凈距分析、連通性分析、縱斷面分析。
執(zhí)行各過(guò)程函數(shù)注冊(cè)函數(shù)到Postgresql數(shù)據(jù)庫(kù)。各函數(shù)位置如圖3所示。各管網(wǎng)分析函數(shù)列表如圖4所示,以test開(kāi)頭的函數(shù)。
圖3 函數(shù)位置
圖4 管網(wǎng)分析函數(shù)列表
(2)管網(wǎng)分析部分結(jié)果展示
①大管接小管分析函數(shù)入?yún)?當(dāng)前管線表名,查詢范圍多邊形。輸出結(jié)果為:大管接小管連接點(diǎn)編號(hào),大管管線編號(hào),大管管徑,大管材質(zhì),小管管線編號(hào),小管管徑,小管材質(zhì)。如圖5所示:
圖5 大管接小管分析結(jié)果
②上下游追蹤分析函數(shù)入?yún)?當(dāng)前管線表名,當(dāng)前管點(diǎn)表名,管線編號(hào),上下游追蹤標(biāo)識(shí)(上游為true,下游為false),查詢終止標(biāo)識(shí)管點(diǎn)。輸出結(jié)果為:管線編號(hào)數(shù)組。如圖6所示:
圖6 上下游追蹤分析結(jié)果
③連通性分析函數(shù)入?yún)?管線表名,管線編號(hào)1,管線編號(hào)2。輸出結(jié)果為:管線編號(hào),管線水平投影長(zhǎng)度。如圖7所示:
圖7 連通性分析結(jié)果
本文以地下管網(wǎng)分析應(yīng)用為研究背景,深入研究了Postgresql數(shù)據(jù)庫(kù)過(guò)程函數(shù)以及postgis空間數(shù)據(jù)庫(kù)插件應(yīng)用方式的基礎(chǔ)上,開(kāi)發(fā)常用管網(wǎng)分析過(guò)程函數(shù),使用戶通過(guò)簡(jiǎn)單的sql查詢語(yǔ)句即可得到管網(wǎng)分析結(jié)果。從性能上而言,基于過(guò)程函數(shù)開(kāi)發(fā)方式,可充分發(fā)揮開(kāi)源Postgresql數(shù)據(jù)庫(kù)自身高性能的數(shù)據(jù)檢索特點(diǎn),此管網(wǎng)分析服務(wù)相比傳統(tǒng)后端開(kāi)發(fā)管網(wǎng)分析功能查詢效率更高。