曹新運,汪云甲,王 堅,張儷文,蔣 龍
(中國礦業大學 環境與測繪學院,江蘇 徐州 221116)
在移動應用商店中,各種基于位置的服務(location based service,LBS)應用層出不窮,一方面是手機性能的提升使地理信息系統(geographic information system,GIS)中復雜的計算可以在手機上實現,另一方面一些大型地圖公司(如GoogleMap、OpenStreetMap),提供的地圖服務較為成熟,使應用開發的難度大大降低[1-2]。
雖然LBS應用的功能涉及到生活中的各個方面,但應用范圍以室外地圖服務為主,室內的地圖服務很少。主要原因是室內地圖服務目前還處于研發階段,沒有成熟的開發平臺出現;室內地圖對于不同的建筑往往有不同的需求,個性化較強,難于推廣;室內定位較為困難,精度比較低。一些物聯網公司開始嘗試在一些場景中進行開發,但在開發的過程中往往更加關注信號傳輸和服務器架設[3-4],導致地圖系統的顯示效果差,運行效率低。
本文詳細介紹嵌入式系統面向對象的建模過程及各過程的功能,并將其引入到安卓(Android)平臺的室內地圖構建過程中,以廣州白云機場室內地圖設計為例,完成該實驗場地的室內地圖設計與功能分析,重點介紹瓦片地圖[5-6],地圖概括[7-8]和路徑導航[9-10]三方面的優化設計細節,提高系統地圖顯示效率。
嵌入式系統的快速面向對象過程(rapid object-oriented process for embedded system,ROPES)是20世紀九十年代提出的針對嵌入式實時系統的面向對象建模過程[11]。與經典的面向對象(object-oriented class model,OO)建模相比,ROPES過程更適合嵌入式實時系統,對狀態圖和對象圖進行反復的修改和細化,在時間上和容錯方面有著比PC機更高的要求。小型嵌入式系統的ROPES過程用到了以下幾個開發活動:
(1)分析
小型嵌入式系統的分析只包括下面的兩個步驟:需求分析和對象分析,需求分析是典型的黑盒分析,主要針對系統的功能需求和性能需求。對象分析包括對象的結構分析和行為分析:結構分析的重點是分析各個對象之間的關系,進一步完善和驗證協作圖,而行為分析的重點是分析對象內部如何響應各種來自內外的消息。
(2)設計
得到分析模型之后需要對系統進行優化,保證了需求的一致性。包括體系結構設計、機械設計和詳細設計,維持軟件和硬件之間協調,完善對象之間的協作,進一步細化和優化類內部成員。
(3)轉換
將設計轉換為代碼,包括單元級的測試。在測試過程中會出現設計與實際要求不相符的情況,比如響應時間,需要對算法進行改進或者數據結構以及特殊機制進行優化。
(4)測試
包括完整性測試和有效性測試。完整性測試是檢驗系統模型是否滿足所需的功能,有效性測試是檢驗系統的性能是否達到要求。
從功能上講,室內地圖系統包括兩個部分:顯示地圖的GIS系統和顯示商家信息的管理信息系統(management information system,MIS),本文的重點是在嵌入式系統上實現室內的GIS功能,因此在MIS系統上沒有進行細致的設計。限于文章篇幅,本文主要描述的室內地圖系統功能有:底圖顯示、地圖目標顯示和路徑導航。
在底圖顯示上,考慮平板電腦的內存較小,整幅圖像的顯示會消耗大量的存儲空間和時間,經測試分析,在Android2.2的模擬器上一次性加載800 kB的整幅圖像就會造成溢出錯誤,因此選擇瓦片金字塔技術實現地圖顯示。在地圖目標的顯示上,除了裁剪問題,還有在目標顯示時不能出現目標點的重疊顯示,需要進行地圖概括。在路徑導航上,考慮通過減少節點的數量來滿足導航計算時間需求,同時保證正常的顯示路徑,沒有穿越墻壁等不符合邏輯的錯誤。
系統中的用例協作體系是一致的,分為數據層、計算層和顯示層,不同用例在細節上做了少量調整以保證需求的完整性。通過對各個用例遞歸分析得到了完整對象集,將基本對象進一步合并和優化,形成帶有屬性的類圖。具體改進如下:為了方便程序實現,將計算對象作為顯示對象的一個成員;將文件讀取作為一個公共輔助類,方便各種文件的讀取和轉換,用例-對象如表1所示。

表1 用例-對象表
系統中使用的觀察者模型沒有提供主動注銷的功能,范圍和比例尺數據發生變化時,所有的圖層中的相關參數都進行相應更新。數據集的索引文件和顯示文件使用了容器模式,瓦片地圖的放大和縮小中使用了接口模式。
數據庫可以使用嵌入式輕量級數據庫SQLite,支持基本的SQL功能,數據量極小。系統中可以使用兩個數據庫保存地圖目標數據和路徑數據,分別設為HotPoint和Path數據庫,其各自屬性如下表2~表4所示。

表2 HotPoint屬性表

表3 PathPointT屬性表

表4 PathLine屬性表
以廣州白云機場為例,按照上述室內地圖的ROPES設計過程,根據用戶體驗提出的要求列出需求分析,將瓦片地圖模型、地圖概括和路徑導航文件組織進行優化,滿足如下表5的要求。

表5 交互的需求分析
傳統的金字塔模型采用2倍的分辨率變化函數,適用于跨度較大的地圖數據,但對于地圖數據的跨度較小時,如室內地圖,區域專題地圖,這類模型將不再適合,動態縮放顯示時畫面會產生跳躍和斷層;圖像在幾何比例縮放時,會產生細節顯示模糊的情況,從而影響地圖表達,因此本文主要采用系數為0.2的線性分辨率變化函數。
(1)平移
按照改進的算法實現了瓦片地圖的顯示,但是在時間上卻不能滿足需求分析中的用例要求。為了解決顯示時間較長的問題,這里引用緩沖機制,減少顯示圖片時使用的時間。具體做法:引入緩沖隊列,在讀取瓦片時,將瓦片鄰接的對象一同讀入緩存;顯示瓦片,先從緩存中讀取,如果沒有再從文件中讀取。以X方向平移500個像素,Y方向平移300個像素為例,實驗結果如表6所示。
每次時間消耗相差較大,是由顯示范圍的瓦片個數造成的,顯示區域空白較多,顯示時間就短,反之時間較長。加速后,平均時間有了大幅度的減少,可以滿足需求分析中的特殊要求。
(2)放大縮小
添加緩存機制可以滿足平移的要求,但在放大縮小時,需要清空緩存,這就造成在放大縮小時顯示速度較慢的問題。解決方法:在放大縮小中加入Animation,填充讀取的時間;同時加開線程,讀取將要顯示的瓦片,在Animation結束后,添加到緩存中。
4.1.2 地圖概括加速
網格內地圖概括在平移操作過程中,并不需要進行重新計算,將計算過的網格保存在緩存中,可以減少計算次數。網格間的地圖概括計算的對象相對較多,會占用較多時間,但是放在單獨的線程中并不會加快速度。實驗中選擇10組相同的三類目標來顯示,使用時間見表7。

表6 加速前時間消耗

表7 地圖概括多線程對比
與不加線程相比,加線程的速度反而慢了一些。這是由于地圖概括的順序是先進行網格內的概括,后進行網格間的概括,網格間的概括并行計算時間上并沒有和原來的計算有時間上的重疊,因此不會減少消耗的時間,反而增加了線程操作影響了速度。
4.1.3 路徑導航加速
在使用Dijkstra算法過程中,減少節點的數目,只記錄路徑點。優化前的節點數目為325個,優化后僅為78個,如圖1所示。通過減少節點,算法消耗的時間大大減少,優化前需要的15 s,優化后僅為200 ms。

圖1 路徑節點優化示意圖
減少節點后,起點和終點節點的選取和顯示需要進行計算。起點和終點的選取使用到索引文件,由點所在的網格找到網格中距離點最近的路徑段,再由路徑段找到節點。路徑顯示時,起點和終點部分需要和路徑進行垂線截取,以保證路徑的美觀。
進入系統后會進入默認的比例尺和范圍,如圖2所示。地圖中的藍色原點代表用戶所處的位置,左上角的藍色圖標是地圖目標列表。點擊地圖目標列表,會出現下拉菜單,如圖3所示。系統采用地圖目標分類顯示,方便用戶快速找到感興趣目標。

圖2 系統主界面

圖3 地圖目標列表
點擊地圖目標列表的選項,會在地圖上顯示相應的地圖目標。小比例尺顯示時,地圖概括程度大,被刪去的地圖目標多,需要保留重要的地圖目標,系統默認最后選中的地圖目標類別的優先級最大,地圖概括效果如圖4所示。

圖4 各分辨率地圖目標顯示
在地圖目標顯示的基礎上,可以進行路徑導航。起始位置是用戶所在位置(用戶位置由室內定位系統提供,這里使用示例數據,僅供顯示使用),終點位置是地圖目標位置,導航開始時會出現對話框,確定是否導航。其他的地圖目標移除,只顯示起點和終點,顯示細節見圖5所示。

圖5 路徑導航效果圖
在路徑導航過程中,如果用戶位置偏移導航路線較多,系統會出現如圖6所示的提示,用戶可以選擇重新導航和不再提醒。

圖6 路徑變化對話框
考慮ROPES更適合嵌入式軟件設計的過程,將其引入到Android系統的室內地圖服務系統設計中。本文描述ROPES的設計過程后,分析了室內地圖的需求分析、對象分析、機械設計和數據設計,并以廣州白云機場室內地圖設計為例,詳細講解了瓦片地圖、地圖概括和路徑導航的優化過程,滿足實驗場地用戶人員的需求。得到如下結論:
(1)對于室內地圖,使用線性變換分辨率函數不會使得原始圖像在放大的過程中經常出現模糊斷點的現象,引入緩存機制能夠很好的減少圖片顯示時間,滿足系統設計的需求;
(2)將地圖概括分為網格內概括和網格間概括,減少了計算次數,在不加并行計算的前提下,提高了計算效率;
(3)刪除路徑上的冗余點,能夠加快路徑導航的計算效率;
(4)基于ROPES的室內地圖服務系統彌補了PC機上設計嵌入式系統的不足,能夠很好的滿足用戶的需求。
[1] 楊帆.基于GSM和Google Map的定位與地圖標注關鍵技術研究[J].陜西科技大學學報:自然科學版,2011,29(2):122-125+129.
[2] 李垠,左德霖,侯建明,等.基于Google Map的地震綜合信息服務系統構建研究[J].大地測量與地球動力學,2011,31(S1):118-121+131.
[3] 許虎,聶云峰,舒堅.基于中間件的瓦片地圖服務設計與實現[J].地球信息科學學報,2010,12(4):562-567.
[4] 聶云峰,劉海玲,許虎.Geo Web Cache 瓦片地圖服務中間件研究[J].測繪科學,2011,36(6):207-209.
[5] 歐陽峰,楊春成,謝鵬,等.通用瓦片生成引擎設計與性能優化[J].測繪科學技術學報,2014,31(2):177-180+184.
[6] 李德仁,肖志峰,朱欣焰,等.空間信息多級網格的劃分方法及編碼研究[J].測繪學報,2006,35(1):52-56+70.
[7] 鄧敏,樊子德,劉慧敏.層次信息量的線要素化簡算法評價研究[J].測繪學報,2013,42(5):767-773+781.
[8] 鄧敏,徐震,趙彬彬,等.地圖概括中空間目標幾何信息傳遞模型研究[J].地球信息科學學報,2010,12(5):655-661.
[9] 李霖,毛凱,譚永濱.地標分層多粒度路徑導引描述方法[J].測繪學報,2014,43(1):105-110.
[10] 鄭年波,陸鋒,李清泉.面向導航的動態多尺度路網數據模型[J].測繪學報,2010,39(4):428-434.
[11] DOUGLASS B P.Doing Hard Time:Developing Real-time Systems with UML,Objects,Frameworks,and Patterns[M].New York:Addison-Wesley Professional,1999.