黎佩東,許 金,何 橋
(中煤科工集團(tuán)重慶研究院有限公司,重慶 400039)
煤安監(jiān)函[2016]5號《煤礦安全監(jiān)控系統(tǒng)升級改造技術(shù)方案》明確要求煤礦安全監(jiān)控系統(tǒng)必須支持多網(wǎng)、多系統(tǒng)融合,必須實(shí)現(xiàn)監(jiān)測監(jiān)控與GIS技術(shù)的有機(jī)融合。當(dāng)前的煤礦安全監(jiān)控系統(tǒng),多采用組態(tài)軟件來實(shí)現(xiàn)井下巷道與設(shè)備等要素的集中展示[1-3]。組態(tài)軟件不具有縮放及縮放后改變要素樣式的功能,當(dāng)?shù)V井結(jié)構(gòu)足夠復(fù)雜,在有限的界面大小內(nèi),會出現(xiàn)巷道交叉重疊、設(shè)備堆疊排放的情況。不能很好的平衡信息的全面與界面的簡要,是組態(tài)軟件在礦井綜合展示業(yè)務(wù)中的局限。
由此本文在對比現(xiàn)有成熟的GIS組件中,選擇PostGIS、Geoserver、Openlayers三款開源GIS組件組合,搭建出了一款能夠?qū)崿F(xiàn)巷道空間位置展示、實(shí)時(shí)監(jiān)測設(shè)備參數(shù)、人員井下軌跡回放的多系統(tǒng)可用的礦井一張圖模塊,以較低的開發(fā)與分發(fā)成本滿足了新一代礦井安全系統(tǒng)對圖形化顯示的要求。
現(xiàn)有的市面上商業(yè)GIS組件,無論是美國ESRI公司ARCGIS系列還是國內(nèi)的超圖系列軟件,其收費(fèi)方式都是基于分發(fā)數(shù)來決定[4,5]。考慮到煤礦監(jiān)控系統(tǒng)對安全的高要求和GIS一張圖的推廣性,本文全部采用開源GIS組件,進(jìn)行二次開發(fā)。為了安裝與部署的方便性,礦井GIS一張圖組件應(yīng)能滿足B/S架構(gòu)進(jìn)行開發(fā)設(shè)計(jì)。現(xiàn)有國內(nèi)外使用最廣泛,最穩(wěn)定的開源架構(gòu)為PostGIS+Geoserver+Openlayers[5-7]。
PostGIS是PostgreSQL的空間數(shù)據(jù)擴(kuò)展[8,9],一方面它提供了Geometry數(shù)據(jù)格式用于儲存有空間參考的點(diǎn)線面矢量數(shù)據(jù),另一方面它也提供了上百個(gè)空間運(yùn)算的SQL方法,可用于空間數(shù)據(jù)的轉(zhuǎn)化、關(guān)系運(yùn)算、處理、編輯等功能,配合PostgreSQL數(shù)據(jù)庫的Function類型與PgSQL語言,使得PostGIS成為了當(dāng)前唯一的內(nèi)部可編程的空間數(shù)據(jù)庫。
Geoserver是現(xiàn)有開源GIS服務(wù)端中功能最豐富的一款,支持包括PostGIS數(shù)據(jù)庫在內(nèi)的多種地理數(shù)據(jù)來源,支持wmts、wms、wfs等多種OGC標(biāo)準(zhǔn)的數(shù)據(jù)發(fā)布接口,尤其是其支持slg樣式語言對地圖樣式的修改、支持wfs-t數(shù)據(jù)修改接口、支持PostGIS中使用SQL進(jìn)行數(shù)據(jù)查詢等,對于實(shí)現(xiàn)礦井一張圖模塊的全部功能提供了非常強(qiáng)大的支撐[10]。
Openlayers本質(zhì)是一種WebGIS API。在網(wǎng)頁上實(shí)現(xiàn)可縮放平移的地圖空間的構(gòu)建,并通過接口獲取已經(jīng)渲染完畢的地圖放置其中,或者使用未渲染矢量數(shù)據(jù)內(nèi)部渲染展示,是WebGIS API區(qū)別與其他網(wǎng)頁組件的基本能力,也是在網(wǎng)頁上實(shí)現(xiàn)地圖展示與交互必備工具。Openlayers作為現(xiàn)有開源WebGIS API中歷史最長久、功能最豐富的一款,其對于OGC接口的完整支持是搭建開源GIS模塊的最佳選擇[11-13]。
由此本文選擇開源組件PostGIS+Geoserver+Openlayers進(jìn)行二次開發(fā)。
礦井一張圖模塊的目的是對井下多類系統(tǒng)設(shè)備和實(shí)時(shí)監(jiān)測數(shù)據(jù)的分層展示等?;炯軜?gòu)圖如圖1所示。
圖1 GIS一張圖架構(gòu)
GIS一張圖主要包含基于Openlayers的前端網(wǎng)頁、GIS服務(wù)器、空間數(shù)據(jù)庫和外部接口。數(shù)據(jù)展現(xiàn)的一般流程為前端通過Openlayer發(fā)出請求,Geoserver接受請求,并調(diào)用PostgreSQL查詢數(shù)據(jù),并經(jīng)過PostGIS運(yùn)算分析,將結(jié)果再由PostgreSQL返回給Geoserver服務(wù)器,然后經(jīng)過渲染或處理傳遞給Openlayers,最后呈現(xiàn)給用戶。具體如下:
1)基于Openlayers的前端網(wǎng)頁。前端界面是整個(gè)一張圖模塊的核心,一方面它分別由外部口獲取業(yè)務(wù)數(shù)據(jù),由GIS服務(wù)器獲取地理數(shù)據(jù),綜合兩種數(shù)據(jù)生成最終展示圖形;另一方面它接收用戶的編輯操作,并將編輯結(jié)果上傳至GIS服務(wù)器用于顯示。以O(shè)penlayers API生成的地圖為核心,顯示獲取自GIS服務(wù)端的已經(jīng)渲染完成的巷道圖,并根據(jù)圖層控制樹的篩選,顯示井下的各類設(shè)備以及工作面。
2)GIS服務(wù)器。GIS服務(wù)器是連接前端網(wǎng)頁與空間數(shù)據(jù)庫的橋梁,不同于一般程序無定型的數(shù)據(jù)結(jié)構(gòu)與前后端交互方式,GIS數(shù)據(jù)的格式相對復(fù)雜且固定,于是一個(gè)不需要編程的通用GIS服務(wù)端程序便應(yīng)運(yùn)而生,而且逐漸具備了獨(dú)有的常用功能,比如矢量數(shù)據(jù)渲染為柵格圖像并發(fā)布。
在一張圖模塊中,Geoserver服務(wù)器對外發(fā)布了設(shè)備、巷道、工作面的數(shù)據(jù)接口,提供編輯與查詢;發(fā)布了人員軌跡生成與巷道拓?fù)渖傻恼{(diào)用接口;通過編寫slg渲染樣式,發(fā)布了渲染后的巷道圖像。
3)空間數(shù)據(jù)庫。在一張圖模塊的架構(gòu)中,PostGIS空間數(shù)據(jù)庫,承當(dāng)空間數(shù)據(jù)存儲與空間運(yùn)算兩大功能。其支持的Geometry空間數(shù)據(jù)格式是便捷、完整存取設(shè)備位置、巷道走勢、工作范圍的保證,也是進(jìn)行空間運(yùn)算基礎(chǔ)。
4)外部接口。一張圖模塊的對外接口都是在網(wǎng)頁端提供的,主要是為了適配多系統(tǒng)調(diào)用減少耦合,分為數(shù)據(jù)獲取接口與功能調(diào)用接口:數(shù)據(jù)獲取接口是返回JSON數(shù)據(jù)的Webservice接口,包括設(shè)備的定義與監(jiān)測數(shù)據(jù)接口、工作面的定義與監(jiān)測數(shù)據(jù)接口;功能調(diào)用接口是前端交互的Post Message接口,包括著重顯示設(shè)備接口、人員軌跡回放接口、設(shè)備點(diǎn)擊事件回調(diào)接口等。
礦井一張圖的GIS展現(xiàn),主要涉及巷道拓?fù)渖伤惴ǎ詫?shí)現(xiàn)礦井巷道的數(shù)字化;人員軌跡回放算法,以實(shí)現(xiàn)人員軌跡的融合與回溯;井下各要素空間關(guān)系算法,以確定并展現(xiàn)監(jiān)測點(diǎn)與巷道的空間位置。
1.3.1 巷道拓?fù)渖伤惴?/p>
用戶在前端繪制巷道的時(shí)候一般不會考慮到巷道的拓?fù)涫欠裢暾c一致,比如通用數(shù)據(jù)結(jié)構(gòu)中要求相互連接的三叉、四叉路口必須由三條、四條獨(dú)立的巷道端點(diǎn)重合而成,而一般用戶繪制時(shí)只會在主巷道上橫畫一條新巷道出去,不會做將主巷道打斷這一步驟。
為解決用戶自繪制巷道拓?fù)洳荒苁褂玫膯栴},提出巷道拓?fù)渖伤惴?,算法會根?jù)巷道坐標(biāo)位置自動提取與每一條巷道相交的巷道,并進(jìn)一步提取相交巷道的端點(diǎn)與拐點(diǎn),最后使用端點(diǎn)與拐點(diǎn)的集合對巷道進(jìn)行打斷,將打斷后的巷道分別保存拓?fù)浔?,如圖2所示。
圖2 巷道拓?fù)渖伤惴ㄔ?/p>
通過本算法,可以在不要求用戶按照拓?fù)錁?biāo)準(zhǔn)繪制巷道、不增加用戶繪制工作的情況下,又能獲取完整的巷道拓?fù)鋽?shù)據(jù),以支持巷道路徑運(yùn)算。
1.3.2 人員軌跡回放算法
為保障煤礦人員的安全,需要對煤礦進(jìn)行活動軌跡進(jìn)行反演。而當(dāng)前的人員定位系統(tǒng)多為非精確定位系統(tǒng),因此獲取的人員軌跡只能大致的位置??紤]煤礦井下實(shí)際環(huán)境以及作業(yè)人員實(shí)際活動情況,通常來說兩個(gè)監(jiān)測點(diǎn)之間的最短巷道距離為作業(yè)人員在此監(jiān)測點(diǎn)的實(shí)際軌跡。因此本系統(tǒng)主要基于最短路徑算法實(shí)現(xiàn)人員軌跡回放。具體實(shí)現(xiàn)原理如圖3所示:
圖3 井下人員軌跡回放原理
1)通過WCF等相關(guān)接口從煤礦安監(jiān)控系統(tǒng)獲取人員軌跡列表數(shù)據(jù),通過PostSQL獲取人員定位設(shè)備位置。
2)主程序向前端頁面發(fā)送軌跡回放指令及人員經(jīng)過的定位設(shè)備列表,前端網(wǎng)頁執(zhí)行顯示變化為軌跡回放作準(zhǔn)備,并將所有經(jīng)過的定位設(shè)備標(biāo)注在地圖上。
3)前端頁面向Geoserver發(fā)送定位設(shè)備列表數(shù)據(jù),Geoserver向PostGIS調(diào)用人員軌跡生成算法。
4)在人員軌跡算法中,會遍歷獲取列表中定位設(shè)備的位置,調(diào)用以Dijkstra算法為核心的兩點(diǎn)間最短路線算法,拼接n-1條最短路徑作為人員在井下的完整軌跡輸出。
5)Geoserver將人員軌跡算法的結(jié)果返回前端頁面,前端頁面將完整軌跡顯示在地圖上,并使用定時(shí)函數(shù)定距前進(jìn)的方式實(shí)現(xiàn)人員圖標(biāo)沿軌跡移動的動畫。
從圖3可知人員軌跡回放的核心為兩點(diǎn)間最短路徑的生成。本文基于巷道拓?fù)鋽?shù)據(jù)為基礎(chǔ),采用Dijkstra實(shí)現(xiàn)最短路徑的生成,拓?fù)鋽?shù)據(jù)是由全部岔路口組成的節(jié)點(diǎn)表,以及鏈接各節(jié)點(diǎn)的線段表組成。其算法步驟如下(其中頂點(diǎn)為岔路口組成的節(jié)點(diǎn)):①初始時(shí),S只包含源點(diǎn),即S={v},v的距離為0,U包含除v外的其他頂點(diǎn),即:U={其余頂點(diǎn)},若v與U中頂點(diǎn)u有邊,則正常有權(quán)值,若u不是v的出邊鄰接點(diǎn),則權(quán)值為∞;②從U中選取一個(gè)距離v最小的頂點(diǎn)k,把k,加入S中(該選定的距離就是v到k的最短路徑長度);③以k為新考慮的中間點(diǎn),修改U中各頂點(diǎn)的距離;若從源點(diǎn)v到頂點(diǎn)u的距離(經(jīng)過頂點(diǎn)k)比原來距離(不經(jīng)過頂點(diǎn)k)短,則修改頂點(diǎn)u的距離值,修改后的距離值的頂點(diǎn)k的距離加上邊上的權(quán);④重復(fù)步驟b和c直到所有頂點(diǎn)都包含在S中。
1.3.3 井下各要素空間關(guān)系的算法
一方面井下各要素都實(shí)際只存在于巷道中、相互間只能通過巷道聯(lián)系;另一方面用戶在繪制巷道與布置設(shè)備、關(guān)鍵點(diǎn)時(shí),既可能為了查看方便將要素放置在巷道外,也可能為了美觀不按照真實(shí)距離比例繪制巷道與布置要素。計(jì)算井下各要素空間關(guān)系時(shí),必然要考慮到上述情況做特殊處理。
如圖4所示,計(jì)算設(shè)備、關(guān)鍵點(diǎn)與巷道的關(guān)系時(shí),首先取與之相交的巷道作為所在巷道,沒有相交時(shí),取距離最近的巷道作為所在巷道。計(jì)算設(shè)備與關(guān)鍵點(diǎn)的關(guān)系時(shí),首先去設(shè)備與關(guān)鍵點(diǎn)在臨近巷道上的最近點(diǎn)作為實(shí)際存在點(diǎn),再獲取兩個(gè)最近點(diǎn)的最短路徑,取最短路徑的長度作為設(shè)備與關(guān)鍵點(diǎn)的實(shí)際距離。
圖4 井下各要素空間關(guān)系算法
井下各要素的空間關(guān)系,除了作為其他算法的中間參數(shù)之外,也會輸出到外部程序作為判斷設(shè)備安裝合規(guī)的條件使用。
GIS一張圖實(shí)現(xiàn)流程如圖5所示,GIS一張圖展現(xiàn)的基本操作步驟為,首先結(jié)合煤礦安全監(jiān)控系統(tǒng)圖、礦井通風(fēng)系統(tǒng)圖和采掘工程布置圖人工繪制GIS巷道,實(shí)現(xiàn)巷道的數(shù)字化。繪制巷道時(shí),需要設(shè)置巷道的屬性,包括巷道類型、所屬工作面、所屬開采水平、風(fēng)向、巷道長度、巷道高度、巷道斷面類型等。繪制完成后,系統(tǒng)會運(yùn)用巷道拓?fù)渖伤惴z查并生成巷道拓?fù)潢P(guān)系。然后需要將瓦斯、溫度、風(fēng)速、人員、局扇等進(jìn)行圖元化,即設(shè)置各自的圖標(biāo),并手動綁定到巷道上,然后系統(tǒng)調(diào)用井下各要素關(guān)系算法,確定巷道與設(shè)備的空間位置關(guān)系。然后,根據(jù)相關(guān)規(guī)程整理得到各巷道設(shè)備安裝規(guī)則集,即不同礦井、不同類型的巷道應(yīng)安裝的傳感器類型、個(gè)數(shù)。依據(jù)規(guī)則集和已繪制的巷道設(shè)備關(guān)系,系統(tǒng)自動評判巷道設(shè)備繪制是否合規(guī),并給出提示。最后通過數(shù)據(jù)接口,將實(shí)時(shí)采集的數(shù)據(jù)展現(xiàn)在礦井GIS一張圖上。由于傳感器類別不同,同時(shí)分類別設(shè)置了巷道的屬性,所屬水平,GIS一張圖可以根據(jù)選分層展現(xiàn)巷道、分類別展現(xiàn)設(shè)備等。
圖5 GIS一張圖實(shí)現(xiàn)流程
為確保本系統(tǒng)的獨(dú)立性和安全性,本系統(tǒng)采用相對獨(dú)立的方式進(jìn)行開發(fā)和部署。本系統(tǒng)采用Java語言進(jìn)行開發(fā),Tomcat作物應(yīng)用服務(wù)器容器。開發(fā)完成的GIS一張圖可以完全嵌入其余任何系統(tǒng),實(shí)現(xiàn)與其他系統(tǒng)的適配。對方系統(tǒng)只需按照約定格式提供數(shù)據(jù)和按照約定協(xié)議進(jìn)行交互即可。本系統(tǒng)采用addEventListener() 方法,實(shí)現(xiàn)事件監(jiān)聽,進(jìn)行方法與接口的調(diào)用。GIS一張圖實(shí)現(xiàn)的主要功能如圖6所示。
圖6 GIS一張圖系統(tǒng)主要功能
1)礦井巷道空間位置展現(xiàn)。GIS一張圖是基于礦井真實(shí)巷道布置轉(zhuǎn)化而來。通過GIS一張圖可以直觀的掌握煤礦的各類巷道分布及巷道間的空間位置關(guān)系和運(yùn)輸系統(tǒng)、通風(fēng)系統(tǒng)、排水系統(tǒng)等礦井各大生產(chǎn)系統(tǒng)的布置。
2)實(shí)時(shí)數(shù)據(jù)展現(xiàn)。本系統(tǒng)通過WCF、WebAPI等接口的方式從煤礦安全監(jiān)控系統(tǒng)、人員定位系統(tǒng)等獲取數(shù)據(jù),并動態(tài)展示實(shí)時(shí)監(jiān)測數(shù)據(jù)。系統(tǒng)采取分系統(tǒng)分類別展示監(jiān)測點(diǎn)及數(shù)據(jù),用于可以隨時(shí)選擇只展示某幾個(gè)系統(tǒng)或某幾類數(shù)據(jù)。數(shù)據(jù)展示采用主動獲取和被動接受的兩種方式。主動獲取方式為GIS一張圖界面每間隔一定時(shí)間去請求各類生產(chǎn)系統(tǒng),獲得最新的數(shù)據(jù),并展現(xiàn)到界面上。被動方式為GIS一張圖設(shè)置監(jiān)聽器,時(shí)刻監(jiān)聽是否有新的數(shù)據(jù)到來,并將監(jiān)聽到的數(shù)據(jù)刷新到界面上。
對于獲取的報(bào)警數(shù)據(jù),根據(jù)報(bào)警級別采用不同的顏色進(jìn)行展現(xiàn),同時(shí)針對不同類別的異常數(shù)據(jù)可以設(shè)置語音報(bào)警,以提示用戶實(shí)時(shí)了解礦井安全生產(chǎn)監(jiān)測狀態(tài)。
3)人員軌跡回放。采用人員軌跡回放算法,可以快速自動實(shí)現(xiàn)歷史作業(yè)人員的軌跡回放。
4)井下設(shè)備關(guān)系空間展示。根據(jù)獲取到的井下交換機(jī)環(huán)網(wǎng)、分站和傳感器數(shù)據(jù)及對應(yīng)的設(shè)備拓?fù)潢P(guān)系通過連線的方式展現(xiàn) GIS一張圖上。同時(shí)根據(jù)獲取到控饋關(guān)系、傳感器斷電影響范圍等通過關(guān)系圖和影響區(qū)域圖的方式展現(xiàn)在GIS一張圖中。當(dāng)某一個(gè)傳感器超上限斷電時(shí),傳感器會自動變?yōu)閳?bào)警狀態(tài)顏色,同其斷電影響范圍內(nèi)會突出顯示,影響范圍內(nèi)的井下人員也會突出顯示在GIS一站圖中。
5)安全風(fēng)險(xiǎn)信息展現(xiàn)等。由于GIS具有很強(qiáng)的擴(kuò)展性和兼容性,該系統(tǒng)可以接入煤礦所有生產(chǎn)系統(tǒng)、監(jiān)測監(jiān)控系統(tǒng)和安全管理系統(tǒng)以及視頻等。
該系統(tǒng)現(xiàn)在主要應(yīng)用在KJ90X煤礦安全監(jiān)控中,用于支持融合不同廠家的人員定位系統(tǒng)、廣播系統(tǒng)、LED顯示屏等,并實(shí)現(xiàn)各類數(shù)據(jù)的展現(xiàn)和查看,同時(shí)也根據(jù)相應(yīng)授權(quán)對各類系統(tǒng)發(fā)送指令。由于本系統(tǒng)的相對獨(dú)立性和可擴(kuò)展性,本系統(tǒng)也應(yīng)用在煤礦監(jiān)管監(jiān)察中,為監(jiān)管人員實(shí)現(xiàn)煤礦各類監(jiān)管參數(shù)的便捷查詢、實(shí)時(shí)分析提供支撐。
1)礦井GIS一張圖系統(tǒng)是基于開源PostGIS+Geoserver+Openlayers組件二次開發(fā)構(gòu)建,實(shí)現(xiàn)了礦井巷道與監(jiān)測監(jiān)控設(shè)備的數(shù)字化和井下多系統(tǒng)業(yè)務(wù)集成與“一張圖”數(shù)據(jù)展示。
2)該系統(tǒng)將各類監(jiān)測監(jiān)控系統(tǒng)數(shù)據(jù)通過一張圖的形式展現(xiàn),使得各類數(shù)據(jù)的時(shí)空相關(guān)系更加直觀,監(jiān)管監(jiān)察人員可以直觀的掌握各類數(shù)據(jù)狀態(tài)和相鄰空間數(shù)據(jù)狀態(tài),從而可為礦山安全防控的信息快速查詢,指導(dǎo)決策提供支撐。
3)由于該系統(tǒng)完全采用開源組件開發(fā),且通過外部接口的方式與煤礦各類業(yè)務(wù)系統(tǒng)進(jìn)行數(shù)據(jù)交互,既保持了各類業(yè)務(wù)系統(tǒng)原有的封閉性和安全性,又具有較強(qiáng)的適用性和推廣性。