王重陽
(1.沈陽燃?xì)庥邢薰荆|寧 沈陽110000)
基于現(xiàn)勢性較好的百度地圖服務(wù),通過報警器設(shè)備選型,選取具有WiFi報警傳輸功能的家用WiFi報警器,開發(fā)出了可用于我市燃?xì)夤镜募矣萌細(xì)釽iFi遠(yuǎn)傳報警系統(tǒng)的原型系統(tǒng)。系統(tǒng)能夠?qū)崿F(xiàn)多臺設(shè)備同時預(yù)警監(jiān)控,實(shí)時在線傳輸報警信息,并能對接公司相關(guān)的業(yè)務(wù)系統(tǒng),及時將位置信息及氣體泄漏程度等下發(fā)維修部門,為城市家用燃?xì)獾念A(yù)警和應(yīng)急響應(yīng)提供很好的解決方案[1-3]。
目前燃?xì)鈭缶魃a(chǎn)廠商眾多,但大部分都屬于單機(jī)報警設(shè)備,雖具有較好的報警性能,但無法及時傳輸?shù)饺細(xì)夤镜木S修調(diào)度部門,因此無法用于燃?xì)夤镜募矣脠缶到y(tǒng)。這里選用一款具有遠(yuǎn)傳功能的智能燃?xì)鈭缶O(shè)備,能方便地接入并借助WiFi發(fā)送報警信息到廠商的云端。
利用百度提供的API開發(fā)接口,采用GIS中流行的REST訪問方式,就可以實(shí)時從云端獲取智能燃?xì)鈭缶O(shè)備的狀態(tài)信息,通過設(shè)定的燃?xì)鈭缶y值,便可快速分析和判斷。當(dāng)發(fā)生報警或者傳感器故障時,程序會觸發(fā)預(yù)警客戶端并推送到相關(guān)的業(yè)務(wù)部門,顯示為在監(jiān)控系統(tǒng)的百度地圖頁面上的閃爍報警狀態(tài),從而實(shí)現(xiàn)設(shè)備的智能管理、實(shí)時監(jiān)控和應(yīng)急處置。
首先對居民區(qū)按巡檢搶修責(zé)任范圍進(jìn)行劃分,把各區(qū)域內(nèi)的燃?xì)釽iFi報警器、路由器、移動定位APP及小區(qū)監(jiān)控探頭,在廠商及百度地圖提供的服務(wù)下,組成以小區(qū)為單位的監(jiān)控子區(qū)。燃?xì)夤镜闹笓]系統(tǒng)負(fù)責(zé)市內(nèi)各個區(qū)域的實(shí)時監(jiān)控,通過與公司巡檢、搶修等相關(guān)業(yè)務(wù)系統(tǒng)的全面對接,借助GIS平臺在線完成路徑規(guī)劃、車輛調(diào)度及任務(wù)派發(fā),發(fā)現(xiàn)問題快速調(diào)度處置和及時搶修,如圖1所示。
圖1 燃?xì)膺h(yuǎn)傳報警系統(tǒng)示意圖
指揮中心監(jiān)控系統(tǒng)使用.net平臺結(jié)合百度API接口進(jìn)行開發(fā),后臺數(shù)據(jù)庫采用ORACLE數(shù)據(jù)庫管理各個設(shè)備的空間位置信息和屬性等業(yè)務(wù)信息。 通過REST方式,實(shí)時讀取報警器廠商的云服務(wù)平臺,分析出報警器的狀態(tài)信息,并在服務(wù)器端完成計算和設(shè)備的動態(tài)報警監(jiān)控。之所以采用REST方式,是因為它是一種對于服務(wù)器更加有效的抽象方式[4],此外,系統(tǒng)還使用了Windows Socket API和多線程技術(shù),系統(tǒng)總體采用MVC架構(gòu)設(shè)計。
百度地圖 API 是一套由 JavaScript 編寫的將百度地圖嵌入網(wǎng)頁的應(yīng)用程序接口,為開發(fā)者提供了豐富的函數(shù)、控件、事件和封裝的類,以BMAP作為命名空間,所有類均在該命名空間之下。通過調(diào)用百度API接口可實(shí)現(xiàn)地圖功能的構(gòu)建,包括各種地圖控件、右鍵菜單及控制坐標(biāo)點(diǎn)顯示效果等。此外,還提供如本地搜索、路線規(guī)劃、地址解析等很多專題圖服務(wù)功能[5],為快速構(gòu)建功能豐富、交互性強(qiáng)的地圖應(yīng)用提供了便利。
本文通過核心類Map的構(gòu)造函數(shù)構(gòu)造地圖對象Wcymap,進(jìn)而設(shè)置顯示的中心點(diǎn)坐標(biāo)、縮放比例。出于前端監(jiān)控頁面顯示簡潔的考慮,將添加地圖比例尺、地圖類型切換、縮略圖等控件及讀取和清除監(jiān)控點(diǎn),都通過右鍵菜單加以控制,該功能使用ContextMenu類實(shí)現(xiàn)。讀取WiFi報警設(shè)備坐標(biāo)的自定義函數(shù)為Readwebservice(),主要是通過前端iQuery Aiax調(diào)取Web Service實(shí)現(xiàn),讀取Oracle數(shù)據(jù)庫中對應(yīng)的SQL查詢和存儲過程,將監(jiān)控點(diǎn)坐標(biāo)及屬性信息返回前端頁面,并利用覆蓋物類Marker進(jìn)行坐標(biāo)顯示。
在以上初始化結(jié)束后,程序便開始實(shí)時監(jiān)控各WiFi報警設(shè)備。實(shí)時監(jiān)控時采用REST方式按照設(shè)置的時間間隔訪問設(shè)備的云端,并將返回的結(jié)果進(jìn)行解析,對燃?xì)忸A(yù)警值進(jìn)行閥值設(shè)定,如圖2所示。通過百度地圖的路徑查詢及百度街景提供搶修點(diǎn)周邊路況,如圖3所示,可制定出便捷的出行路線,為快速應(yīng)急搶修提供保障。
圖2 預(yù)警判斷業(yè)務(wù)流程
圖3 右鍵菜單及百度街景
系統(tǒng)采用B/S架構(gòu)開發(fā)設(shè)計,針對報警器設(shè)備的定位坐標(biāo)采集甚至可采用免費(fèi)的方式獲得。例如,本文采用了改寫百度APP DEMO,將獲取到的報警器百度坐標(biāo)及地址、建筑物、樓層單元、房間編號等屬性信息上傳系統(tǒng)平臺并寫入ORACLE對應(yīng)的數(shù)據(jù)庫表,通過設(shè)備唯一的ID標(biāo)識進(jìn)行關(guān)聯(lián)。設(shè)備在百度地圖中的展示,則可通過iQuery Aiax調(diào)取Web Service實(shí)現(xiàn)。Aiax作為在WebGIS中廣泛使用的一種技術(shù),其核心是基于XMLHttpRequest的異步請求機(jī)制[6],使用iQuery不但能兼容多瀏覽器iavascript庫,還能使開發(fā)更加便捷。
通過iQuery Aiax調(diào)取Web Service中的數(shù)據(jù)讀取的自定義函數(shù),借助數(shù)據(jù)庫訪問類OraHelper的AdapterFill方法,執(zhí)行數(shù)據(jù)庫Sql查詢等,并將結(jié)果以Json的形式返回前端。前端訪問頁面接收后,可利用eval()函數(shù)進(jìn)行解析,該函數(shù)可將后臺返回的Json格式字符串處理成Json對象數(shù)組,進(jìn)而提取出監(jiān)控點(diǎn)的位置坐標(biāo)等信息,借助數(shù)組的push()函數(shù)將監(jiān)控點(diǎn)對應(yīng)的X、Y坐標(biāo)存入points數(shù)組中,調(diào)用百度API接口,通過BMap.Marker()方法生成對應(yīng)的覆蓋物對象,進(jìn)而顯示在地圖對象wcymap中生成該監(jiān)控點(diǎn)圖標(biāo)進(jìn)行地圖顯示。
為了提高系統(tǒng)的安全性,各居民區(qū)設(shè)置區(qū)域監(jiān)控點(diǎn),開發(fā)過程中客戶端、監(jiān)控點(diǎn)與服務(wù)器之間的通訊主要采用以下技術(shù)實(shí)現(xiàn)。
WebSocket技術(shù) ( 又稱 WinSock 或 Windows Sockets)是應(yīng)用程序和網(wǎng)絡(luò)之間的標(biāo)準(zhǔn)接口,主要分為流式套接字(Stream Socket)、數(shù)據(jù)報套接字( Datagram Socket) 和原始數(shù)據(jù)報套接字(Raw Socket)三類 。用Socket設(shè)計多線程服務(wù)器,其具體實(shí)現(xiàn)過程是調(diào)用Socket()建立套接字,通過Socket類對象的Bind()方法,將該套接字綁定監(jiān)聽端口, 通過listen方法設(shè)定監(jiān)聽隊列,使套接字做好監(jiān)聽準(zhǔn)備,用 accept方法來接收連接,用close方法關(guān)閉套節(jié)字[7]。將以上過程封裝到自定義函數(shù)中,針對監(jiān)控設(shè)備通過實(shí)例化Thread類開啟線程,通過多線程調(diào)用,可以實(shí)現(xiàn)同時連接和接受多點(diǎn)數(shù)據(jù)發(fā)送。
Web Service 所使用的是Internet上統(tǒng)一、開放的標(biāo)準(zhǔn),如 HTTP、XML、SOAP、WSDL 等,是站點(diǎn)之間能夠相互通信、共享資源的一種接口。所以 Web Service可以在任何支持這些標(biāo)準(zhǔn)的環(huán)境(Windows、Linux)中使用。使用Web Service模式與系統(tǒng)間的通訊,可通過設(shè)定某一時間間隔,借助iQuery Aiax調(diào)取Web Service中負(fù)責(zé)數(shù)據(jù)讀取和解析的自定義函數(shù)來開發(fā)實(shí)現(xiàn)。
瀏覽器端與廠商的云端通訊采用的是REST方式,REST是 Roy Fielding 在2000年首次提出的一種軟件架構(gòu)。具體地說,REST 用來定義一個 Web 服務(wù)API,通過 HTTP 來進(jìn)行資源管理,是一種基于資源的服務(wù)訪問架構(gòu)風(fēng)格,每個 URL 代表一個資源,而整個系統(tǒng)就是由這些資源組成的。由于操作執(zhí)行中URI始終沒有變化,極大地簡化了 Web 開發(fā),也使得 URI 可以被設(shè)計成更為直觀的反映資源的結(jié)構(gòu),這種URI的設(shè)計被稱作 RESTFUL 的 URI[8]。REST 訪問方式因為比 SOAP方式簡單便捷,所以廣泛用于WebGIS開發(fā)中。
通過報警器設(shè)備唯一的ID標(biāo)識及廠商提供的訪問地址組成requestUriString,調(diào)用自定義函數(shù)ReadwebWIFIservice()中負(fù)責(zé)云端請求和返回的數(shù)據(jù)處理函數(shù)為ReadwifiBack()來實(shí)現(xiàn),用到的核心抽象類是WebRequest,訪問后將返回值序列化為JSON對象返回前端頁面。由于返回報警器的很多工作屬性信息,因此需要借助正則表達(dá)式進(jìn)行拆分,然后取出其中燃?xì)庀嚓P(guān)的屬性值,存入相應(yīng)的數(shù)組中進(jìn)行處理、分析和展示。
根據(jù)報警器的可燃?xì)怏w屬性閥值,編寫算法,如果氣體泄漏,則對應(yīng)屬性值超限,便進(jìn)入報警狀態(tài),可見報警器的靈敏度和閥值設(shè)定是關(guān)鍵。由于報警器的靈敏度設(shè)定值是不一樣的,所以在選用時必須搞清楚報警器安裝場所使用的是何種燃?xì)猓龠x用有針對性的報警器。由于燃?xì)馄骶呷紵a(chǎn)生的廢氣中含有CO,而CO對人體的危害程度極大,在選擇燃?xì)庑孤﹫缶鲿r,必須從生產(chǎn)企業(yè)資質(zhì)、報警器性能、售后服務(wù)、經(jīng)濟(jì)成本等多方面綜合考慮。而燃?xì)庑孤﹫缶鞯男阅苤饕菑撵`敏度、選擇性、穩(wěn)定性、使用壽命等幾方面進(jìn)行考核[9,10]。
基于上述考慮,本系統(tǒng)選型的報警器,同時具有對CO及天然氣的監(jiān)控能力,報警點(diǎn)預(yù)設(shè)值分別為10%LEL和100 PPM。由于本項目專業(yè)數(shù)據(jù)的保密要求,這里只舉例說明,假定數(shù)組Jiankong是天燃?xì)鈱傩?,如?shù)字為“0”,則為正常狀態(tài),不需報警,否則開啟報警模式,通過百度API接口,實(shí)例化BMap.Marker類對象,調(diào)用setAnimation()方法可將報警點(diǎn)顯示為跳動的圖標(biāo)。
系統(tǒng)通過后臺ORACLE數(shù)據(jù)庫進(jìn)行各報警設(shè)備位置及屬性信息管理,為了信息維護(hù)的方便,空間數(shù)據(jù)和屬性數(shù)據(jù)采用獨(dú)立存儲,通過設(shè)備ID唯一標(biāo)識進(jìn)行關(guān)聯(lián),方便解決設(shè)備精準(zhǔn)定位和擴(kuò)容等問題。系統(tǒng)通過實(shí)時獲取各報警器信息,正常狀態(tài)下系統(tǒng)顯示為規(guī)律閃爍,間隔的時間可根據(jù)具體業(yè)務(wù)需求設(shè)定和更改,一旦有燃?xì)饧癈O等氣體產(chǎn)生且濃度達(dá)到報警設(shè)定值時,泄露點(diǎn)將顯示為閃爍跳動的圖標(biāo),并給出“燃?xì)庑孤?,請快速搶修?”的報警提示,如圖4所示,同時將泄露點(diǎn)信息推送到相關(guān)的業(yè)務(wù)系統(tǒng)模塊進(jìn)行維修業(yè)務(wù)的派發(fā)和調(diào)度,并將報警信息等存入ORACLE數(shù)據(jù)庫中。
在系統(tǒng)的具體部署中,由于百度地圖切片最高縮放級別的限制,會造成顯示上的多點(diǎn)重疊現(xiàn)象??紤]到系統(tǒng)設(shè)計的美觀,針對這一問題需要改進(jìn)算法及屬性信息配合加以解決,即可將彈窗的信息顯示模式改為以屬性列表的方式展現(xiàn)。另外,借助百度街景,可快速查看報警點(diǎn)的周邊路況,進(jìn)而借助百度地圖實(shí)現(xiàn)最優(yōu)的路徑規(guī)劃,以便調(diào)度搶修人員快速到達(dá)應(yīng)急搶修。
圖4 燃?xì)庑孤﹫缶癄顟B(tài)
利用百度網(wǎng)絡(luò)地圖豐富的API接口,對接基于WiFi遠(yuǎn)傳的燃?xì)鈭缶髟O(shè)備進(jìn)行開發(fā),實(shí)時獲取云端的預(yù)警信息進(jìn)行分析,實(shí)時監(jiān)控,起到了很好的預(yù)警和報警效果,為燃?xì)馄髽I(yè)的安全生產(chǎn)提供了一套很好的解決方案。結(jié)合現(xiàn)勢性較好的百度地圖,更是方便了燃?xì)馄髽I(yè)的快速定位和應(yīng)急搶修,目前系統(tǒng)可同時監(jiān)控數(shù)臺設(shè)備。
隨著系統(tǒng)的推廣使用,將進(jìn)一步提升系統(tǒng)的穩(wěn)定性,同時還將完善定位導(dǎo)航及空間分析等GIS功能,進(jìn)而開發(fā)完善具有就近任務(wù)分派和快速應(yīng)急響應(yīng)的業(yè)務(wù)系統(tǒng),進(jìn)一步提升與相關(guān)業(yè)務(wù)系統(tǒng)對接的響應(yīng)時間,并爭取和目前公司的燃?xì)夤芫W(wǎng)安全運(yùn)行平臺APP實(shí)現(xiàn)信息共享,為燃?xì)馄髽I(yè)的業(yè)務(wù)平臺信息化建設(shè)提供重要保障。
[1] 許敬偉.LBS系統(tǒng)中基于WLAN的無線定位技術(shù)研究[D].武漢:華中科技大學(xué),2011
[2] 劉成.LBS定位技術(shù)研究與發(fā)展現(xiàn)狀[J].導(dǎo)航定位學(xué)報,2013,1(1):79-81
[3] 侯振宇.燃?xì)鈶魞?nèi)安全技術(shù)解決方案[D].北京:北京建筑大學(xué),2014
[4] 黃夢雄,朱勤東.基于REST和AJAX的WebGIS設(shè)計與實(shí)現(xiàn)[J].測繪與空間地理信息,2013(7):58-59
[5] 杜傳明.百度地圖API在小型地理信息系統(tǒng)中的應(yīng)用[J].測繪與空間地理信息,2011,34(2):152-153
[6] 徐卓揆,劉德欽,林宗堅.Aajx技術(shù)在WebGIS中的應(yīng)用[J].測繪信息與工程,2007(1):3-5
[7] 張允剛.基于Socket和多線程的遠(yuǎn)程監(jiān)控系統(tǒng)[J].控制工程,2006(2):175-176
[8] 李久剛.REST架構(gòu)的WebGIS技術(shù)研究與實(shí)現(xiàn)[J].測繪科學(xué),2011(3):85-87
[9] 許葉忠.燃?xì)庑孤﹫缶鞯倪x擇與應(yīng)用[J].城市燃?xì)?2005(2):29-31
[10] 王鶴超,吳明,等.室內(nèi)燃?xì)鈭缶鞯陌惭b位置優(yōu)化[J].遼寧是有化工大學(xué)學(xué)報,2014,34(6):45-46