檀昊,張貞貞,詹毅帆
(武漢市特種設備監督檢驗所,湖北 武漢 4 3 0 0 4 0)
基于A r c G I S A P I f o r J a v a S c r i p t的電梯標注展示與性能優化探討
檀昊,張貞貞,詹毅帆
(武漢市特種設備監督檢驗所,湖北 武漢 4 3 0 0 4 0)
電梯地理信息系統開發核心內容是電梯位置的標注和信息的展示,其需求一般是精確定位,展示較全面的設備信息,同時兼顧系統運行效率,有較高的靈活性和可擴展性。作為武漢市“智慧電梯”項目的重要組成部分,武漢市電梯地理信息系統的開發在電梯展示方案的選擇、系統性能優化等方面做了較多探究,建立了具有特色的電梯地理信息系統,為電梯的信息查詢、檢驗調度、安全監管、應急救援等提供了地理信息基礎平臺。
電梯;地理信息系統;標注展示
開發電梯地理信息系統(G I S)是當前特種設備信息化發展的一大熱點。該系統是基于電梯數據庫系統和信息網絡,以數字地圖為背景,以電梯設備數據和地理環境數據為運行對象的計算機集成系統。它可將電梯各類參數信息和空間位置在數字地圖背景下進行統一管理,以直觀的形式在數字地圖上展現,同時輔以安全監控和風險評估數據,服務于電梯的使用管理、維護保養、檢驗檢測、安全監察情況與事故救援等。
作為系統性解決方案,We b G I S是當前地理信息系統實現的最佳選擇。在眾多的We b G I S平臺中,E S RI公司的A r c G I S S e r v e r是首選的We b G I S開發平臺。A r c G I S S e r v e r使地圖服務管理更人性化,提供了基于RE S T(Re p r e s e n t a t i o n a l S t a t e T r a n s f e r,轉移表述性狀況)的服務器端和大量的分析組件。A r c G I S S e r v e r開發平臺的主要開發模式之一是A r c G I S A P I,這是基于RE S T服務器端接口開發模式,其最流行的開發技術毫無疑問是A r c G I S A P I f o r J a v a S c r i p t。隨著RE S T服務應用的快速發展,A r c G I S A P I f o r J a v a S c r i p t將會被更廣泛地應用。作為We b G I S客戶端典型的開發技術,A r c G I S A P I f o r J a v a S c r i p t使得很多工作可以在客戶端完成,不需要通過服務器支持,因此減輕了服務器的數據處理和網路傳輸負擔,系統響應更快、界面更美觀、功能更人性化,大大提高了用戶體驗。
J a v a S c r i p t的運行環境主要依靠瀏覽器的支持,而不是本機的開發環境,只要本機的瀏覽器支持J a v a S c r i p t,A r c G I S A P I f o r J a v a S c r i p便能發揮效用,因此其部署門檻極低,易于普及。A r c G I S A P I f o r J a v a S c r i p t 是基于D o j o框架,通過J a v a S c r i p t腳本語言調用 A r c G I S S e r v e r RE S T A P I 中RE S T接口的開發技術。可以快速高效的創建交互式的地圖應用程序。通過調用A r c G I S S e r v e r的RE S T 接口并當其操作符合RE S T風格時,它能實現空間數據發布平臺對空間數據分析處理的各種功能,以及將A r c G I S S e r v e r的空間地理數據和 G e o p r o c e s s i n g服務嵌入We b 應用中,獲得專業的空間信息分析結果,同時它還能調用多個A r c G I S S e r v e r的服務,實現多個A r c G I S S e r v e r 服務相互融合交互應用。
武漢市電梯地理信息系統選用武漢市政務地圖作為基礎地圖,此地圖測繪精準,基礎地理信息全面。特別是該地圖支持街道級行政區劃單獨展示和統計分析,有助于網格化精準監管。以此為基礎,需要將電梯位置信息展示在地圖之上,有兩種解決方案。一種是直接采用數字地圖的開發服務,將電梯圖層加入到地圖上直接顯示,第二種是將服務器中的電梯經緯度和屬性等數據提取到本地數據庫中,在加載電梯展示頁面時,從本地數據庫中讀取電梯相關數據,利用A r c G I S繪制到數字地圖上。下面對這兩種方案進行詳細的分析比較:
第一種方案采用已有服務,能夠減少數據庫的數據存儲量,但靈活性和擴展性都很差。首先只能采用單一的一次性加載方式,一次將所有電梯標注都繪制在地圖之上,對網絡速度要求高,在網絡狀況差的情況下,容易產生標注無法展示的情況。標注本身的自定義方式有限,無法隨需求改變位置、標記圖片等標注屬性。電梯數量逐年增加,若地圖未更新,則無法顯示新增設備,擴展性差。
第二種方案則有著很高的靈活性和擴展性。首先將已有的電梯數據存入數據庫中,可采用異步分頁的加載方式將電梯繪制到底圖上;同時標注的定制性強,能夠自定義圖標,不同狀態、不同種類的電梯采用不同的圖標,用戶能夠清晰分辨;從本地數據庫讀取電梯信息能夠輕松加入不同的查詢條件,可實現靈活展示。
第二種方案的實施分為數據存儲和數據展示兩大部分。在數據存儲中,需要用到a r c g i s f o r j a v a s c r i p t中的特征圖層(f e a t u r e L a y e r)的相關功能,即首先將電梯的地圖服務以特征圖層的形式進行加載,調用其中的查詢A P I(Qu e r y),將所有電梯數據查詢出來并傳入服務器,在服務器將電梯數據插入服務器中,完成電梯數據從服務到數據庫的存儲。在數據展示中則主要運用了客戶端圖層(G r a p h i c s L a y e r),運用該圖層能夠將數據庫中的電梯數據以符號標注的形式展現在客戶端(即瀏覽器)上,與服務相分離;應用G r a p h i c符號對電梯進行標注,根據電梯的經緯度對G r a p h i c進行定位,通過電梯的狀態對G r a p h i c進行色彩渲染,如用綠色表示正常狀態,紅色代表超期狀態等;將電梯的基本信息通過i n f o T e mp l a t e展示在標注的信息面板上,方便即時查看電梯信息。流程如圖1所示。

圖1 電梯標注展示的工作流程
由此可見,第二種方案優勢明顯,是當前首選的電梯展示方案。
由于電梯數量龐大,如果一次性顯示在頁面上,不僅耗時過長,易造成瀏覽器卡頓,同時電梯標注會產生重疊、擁擠的現象。不僅顯示不直觀,同時給用戶的點選操作造成困難。因此考慮減少一次性加載的電梯標注數量,一方面減少數據庫的讀取壓力和瀏覽器的繪制壓力,另一方面加強了標注展示的可讀性。這里采用分級別聚類的思想,當地圖縮放到特定級別時,對電梯進行聚類,具體方案為:將電梯展示分為三級(街道級,使用單位級和單個電梯級)。運用A r c G I S中的ma p對象讀取地圖當時的縮放等級,將此等級與規定好的電梯級別相比較,確定當前縮放等級屬于街道、使用單位還是單個電梯中的某一級別,并將標識傳入服務器,服務器通過標識從數據庫中分別讀取不同的位置信息,如傳入的級別為使用單位級別,則讀取單位的經緯度及該單位下的電梯數量傳到頁面,在瀏覽器中展示出單位標注。在縮放地圖時,監聽地圖的縮放事件,當縮放結束時,獲取當時地圖的縮放等級,判斷該縮放等級是否在當前標注級別的縮放等級范圍內,若不屬于當前標注級別,則清空地圖標注,應用A J A X技術從服務器請求相應數據,對地圖重新標注。縮放到不同標注級別的電梯標注展示效果如圖2~圖4所示。
在單個電梯級別,由于電梯數量接近于十萬,因此一次性讀取耗時在一分鐘左右,用戶體驗極差,因此采用分批加載的方式,在加載完地圖底圖后,用A J A X向后臺異步請求電梯數據,并傳入當前分頁編號,當服務器讀取數據時,首先比較當前頁號與總頁數,若當前頁小于總頁數,則繼續讀取下一頁數據,而頁面同時對上一頁數據進行繪制;若當前頁號大于總頁數,則停止讀取數據,并向頁面傳一個標識,頁面獲取標識后停止向服務器請求,數據加載完畢。部分代碼如下:
$.a j a x({d a t a : {當前頁號},s u c c e s s : f u n c t i o n(d a t a){//繪制服務器返回數據。i f(數據標識!= 最后一頁){//請求下一頁數據}}});
在電梯詳情的加載上,首先采用的是一次性將電梯所有數據讀取的方法,但這樣做數據量過大,在數據庫中讀取時間很長,影響整體性能。因此將數據分為兩部分進行讀取,第一次讀取標注展示所需的基本數據,包括標注定位所需的經緯度,下一步讀取數據所需的電梯唯一編號,這樣在讀取第一次數據后能夠將電梯標注在地圖上,但沒有讀取電梯的詳細信息數據。當用戶點擊標注時,首先通過監聽標注(G r a p h i c)的點擊事件,獲取當前標注的唯一編號,并將該編號傳入服務器讀取標注詳細信息,展現在標注面板(i n f o T e mp l a t e)上。部分代碼如下:
d o j o.c o n n e c t(g r a p h i c L a y e r, "o n Cl i c k", f u n c t i o n(e v e n t) {//標注點擊事件i f(地圖級別標識 == 單個電梯級別標識){$.a j a x({s u c c e s s :f u n c t i o n(d a t a){//讀取電梯基本信息}});}e l s e i f(地圖級別標識 == 單位級別標識){$.a j a x({s u c c e s s : f u n c t i o n(d a t a){//讀取單位信息和單位下的電梯列表}});}e l s e{$.a j a x({s u c c e s s : f u n c t i o n(d a t a){//讀取街道下的電梯列表}});}});
這樣處理能夠大幅度減少數據讀取量,減少服務器讀取壓力,同時也減輕了瀏覽器壓力,加快了瀏覽器的響應速度。在第一步數據讀取時,盡管只讀取了電梯展示所需的基礎數據,但數據量依然很大,這里采用異步分頁的方式進行電梯數據的讀取和電梯標注的繪制。在頁面加載后,首先對底圖進行加載,底圖加載完畢后用異步的方法進行電梯數據的讀取,每次讀取一萬條數據,在數據返回頁面時,加入一個標記位來傳遞是否是最后一頁數據。前臺頁面在讀取數據的同時進行標注的繪制,繪制完成后對標記位進行判斷,如果不是最后一頁數據,則繼續進行讀取操作,讀取下一萬條數據并進行繪制;如果是最后一頁數據,則終止數據讀取,完成標注的繪制。這樣能夠以最快的速度進行標注展示,降低了單次數據讀取壓力,提高了程序性能。

圖2 縮放到街道級別

圖3 縮放到使用單位級別

圖4 縮放到單個電梯級別
電梯地理信息系統開發的重點和難點就是電梯在數字地圖上的可視化展示及運行性能的優化。本文采用A r c G I S A P I f o r J a v a S c r i p t作為主要開發工具,選用下載服務數據的形式對電梯數據進行存儲,同時用分級、分頁等多種方式對電梯數據的讀取及繪制進行優化,最終將電梯快速、準確的標注到數字地圖上。
[1]杜棟.基于S u p e r Ma p I S J a v a的特種設備安全監察系統設計與實現[D].浙江大學,2 0 0 7.
[2]尹靜秋,邱新法,何永健.基于We b G I S的鋼鐵物流信息系統分析與設計[J].物流科技,2 0 1 0(0 9):1 8~2 1.
[3]房體盈.基于J a v a S c r i p t技術的We b G I S設計與實現[D].大連理工大學,2 0 0 8.
[4]趙沛.A r c G I S A P I F o r J a v a S c r i p t開發技術研究[D].遼寧師范大學,2 0 1 5.
[5]A r c G I S A P I f o r J a v a S c r i p t開發教程[S].E S RI(中國)信息技術有限公司,2 0 1 3(3).
P 2 0 8
A
1 6 7 1-0 7 1 1(2 0 1 7)0 2(下)-0 0 6 9-0 3