曹新運(yùn),汪云甲,王 堅(jiān),張儷文,蔣 龍
(中國礦業(yè)大學(xué) 環(huán)境與測繪學(xué)院,江蘇 徐州 221116)
在移動(dòng)應(yīng)用商店中,各種基于位置的服務(wù)(location based service,LBS)應(yīng)用層出不窮,一方面是手機(jī)性能的提升使地理信息系統(tǒng)(geographic information system,GIS)中復(fù)雜的計(jì)算可以在手機(jī)上實(shí)現(xiàn),另一方面一些大型地圖公司(如GoogleMap、OpenStreetMap),提供的地圖服務(wù)較為成熟,使應(yīng)用開發(fā)的難度大大降低[1-2]。
雖然LBS應(yīng)用的功能涉及到生活中的各個(gè)方面,但應(yīng)用范圍以室外地圖服務(wù)為主,室內(nèi)的地圖服務(wù)很少。主要原因是室內(nèi)地圖服務(wù)目前還處于研發(fā)階段,沒有成熟的開發(fā)平臺出現(xiàn);室內(nèi)地圖對于不同的建筑往往有不同的需求,個(gè)性化較強(qiáng),難于推廣;室內(nèi)定位較為困難,精度比較低。一些物聯(lián)網(wǎng)公司開始嘗試在一些場景中進(jìn)行開發(fā),但在開發(fā)的過程中往往更加關(guān)注信號傳輸和服務(wù)器架設(shè)[3-4],導(dǎo)致地圖系統(tǒng)的顯示效果差,運(yùn)行效率低。
本文詳細(xì)介紹嵌入式系統(tǒng)面向?qū)ο蟮慕_^程及各過程的功能,并將其引入到安卓(Android)平臺的室內(nèi)地圖構(gòu)建過程中,以廣州白云機(jī)場室內(nèi)地圖設(shè)計(jì)為例,完成該實(shí)驗(yàn)場地的室內(nèi)地圖設(shè)計(jì)與功能分析,重點(diǎn)介紹瓦片地圖[5-6],地圖概括[7-8]和路徑導(dǎo)航[9-10]三方面的優(yōu)化設(shè)計(jì)細(xì)節(jié),提高系統(tǒng)地圖顯示效率。
嵌入式系統(tǒng)的快速面向?qū)ο筮^程(rapid object-oriented process for embedded system,ROPES)是20世紀(jì)九十年代提出的針對嵌入式實(shí)時(shí)系統(tǒng)的面向?qū)ο蠼_^程[11]。與經(jīng)典的面向?qū)ο?object-oriented class model,OO)建模相比,ROPES過程更適合嵌入式實(shí)時(shí)系統(tǒng),對狀態(tài)圖和對象圖進(jìn)行反復(fù)的修改和細(xì)化,在時(shí)間上和容錯(cuò)方面有著比PC機(jī)更高的要求。小型嵌入式系統(tǒng)的ROPES過程用到了以下幾個(gè)開發(fā)活動(dòng):
(1)分析
小型嵌入式系統(tǒng)的分析只包括下面的兩個(gè)步驟:需求分析和對象分析,需求分析是典型的黑盒分析,主要針對系統(tǒng)的功能需求和性能需求。對象分析包括對象的結(jié)構(gòu)分析和行為分析:結(jié)構(gòu)分析的重點(diǎn)是分析各個(gè)對象之間的關(guān)系,進(jìn)一步完善和驗(yàn)證協(xié)作圖,而行為分析的重點(diǎn)是分析對象內(nèi)部如何響應(yīng)各種來自內(nèi)外的消息。
(2)設(shè)計(jì)
得到分析模型之后需要對系統(tǒng)進(jìn)行優(yōu)化,保證了需求的一致性。包括體系結(jié)構(gòu)設(shè)計(jì)、機(jī)械設(shè)計(jì)和詳細(xì)設(shè)計(jì),維持軟件和硬件之間協(xié)調(diào),完善對象之間的協(xié)作,進(jìn)一步細(xì)化和優(yōu)化類內(nèi)部成員。
(3)轉(zhuǎn)換
將設(shè)計(jì)轉(zhuǎn)換為代碼,包括單元級的測試。在測試過程中會(huì)出現(xiàn)設(shè)計(jì)與實(shí)際要求不相符的情況,比如響應(yīng)時(shí)間,需要對算法進(jìn)行改進(jìn)或者數(shù)據(jù)結(jié)構(gòu)以及特殊機(jī)制進(jìn)行優(yōu)化。
(4)測試
包括完整性測試和有效性測試。完整性測試是檢驗(yàn)系統(tǒng)模型是否滿足所需的功能,有效性測試是檢驗(yàn)系統(tǒng)的性能是否達(dá)到要求。
從功能上講,室內(nèi)地圖系統(tǒng)包括兩個(gè)部分:顯示地圖的GIS系統(tǒng)和顯示商家信息的管理信息系統(tǒng)(management information system,MIS),本文的重點(diǎn)是在嵌入式系統(tǒng)上實(shí)現(xiàn)室內(nèi)的GIS功能,因此在MIS系統(tǒng)上沒有進(jìn)行細(xì)致的設(shè)計(jì)。限于文章篇幅,本文主要描述的室內(nèi)地圖系統(tǒng)功能有:底圖顯示、地圖目標(biāo)顯示和路徑導(dǎo)航。
在底圖顯示上,考慮平板電腦的內(nèi)存較小,整幅圖像的顯示會(huì)消耗大量的存儲(chǔ)空間和時(shí)間,經(jīng)測試分析,在Android2.2的模擬器上一次性加載800 kB的整幅圖像就會(huì)造成溢出錯(cuò)誤,因此選擇瓦片金字塔技術(shù)實(shí)現(xiàn)地圖顯示。在地圖目標(biāo)的顯示上,除了裁剪問題,還有在目標(biāo)顯示時(shí)不能出現(xiàn)目標(biāo)點(diǎn)的重疊顯示,需要進(jìn)行地圖概括。在路徑導(dǎo)航上,考慮通過減少節(jié)點(diǎn)的數(shù)量來滿足導(dǎo)航計(jì)算時(shí)間需求,同時(shí)保證正常的顯示路徑,沒有穿越墻壁等不符合邏輯的錯(cuò)誤。
系統(tǒng)中的用例協(xié)作體系是一致的,分為數(shù)據(jù)層、計(jì)算層和顯示層,不同用例在細(xì)節(jié)上做了少量調(diào)整以保證需求的完整性。通過對各個(gè)用例遞歸分析得到了完整對象集,將基本對象進(jìn)一步合并和優(yōu)化,形成帶有屬性的類圖。具體改進(jìn)如下:為了方便程序?qū)崿F(xiàn),將計(jì)算對象作為顯示對象的一個(gè)成員;將文件讀取作為一個(gè)公共輔助類,方便各種文件的讀取和轉(zhuǎn)換,用例-對象如表1所示。
表1 用例-對象表
系統(tǒng)中使用的觀察者模型沒有提供主動(dòng)注銷的功能,范圍和比例尺數(shù)據(jù)發(fā)生變化時(shí),所有的圖層中的相關(guān)參數(shù)都進(jìn)行相應(yīng)更新。數(shù)據(jù)集的索引文件和顯示文件使用了容器模式,瓦片地圖的放大和縮小中使用了接口模式。
數(shù)據(jù)庫可以使用嵌入式輕量級數(shù)據(jù)庫SQLite,支持基本的SQL功能,數(shù)據(jù)量極小。系統(tǒng)中可以使用兩個(gè)數(shù)據(jù)庫保存地圖目標(biāo)數(shù)據(jù)和路徑數(shù)據(jù),分別設(shè)為HotPoint和Path數(shù)據(jù)庫,其各自屬性如下表2~表4所示。
表2 HotPoint屬性表
表3 PathPointT屬性表
表4 PathLine屬性表
以廣州白云機(jī)場為例,按照上述室內(nèi)地圖的ROPES設(shè)計(jì)過程,根據(jù)用戶體驗(yàn)提出的要求列出需求分析,將瓦片地圖模型、地圖概括和路徑導(dǎo)航文件組織進(jìn)行優(yōu)化,滿足如下表5的要求。
表5 交互的需求分析
傳統(tǒng)的金字塔模型采用2倍的分辨率變化函數(shù),適用于跨度較大的地圖數(shù)據(jù),但對于地圖數(shù)據(jù)的跨度較小時(shí),如室內(nèi)地圖,區(qū)域?qū)n}地圖,這類模型將不再適合,動(dòng)態(tài)縮放顯示時(shí)畫面會(huì)產(chǎn)生跳躍和斷層;圖像在幾何比例縮放時(shí),會(huì)產(chǎn)生細(xì)節(jié)顯示模糊的情況,從而影響地圖表達(dá),因此本文主要采用系數(shù)為0.2的線性分辨率變化函數(shù)。
(1)平移
按照改進(jìn)的算法實(shí)現(xiàn)了瓦片地圖的顯示,但是在時(shí)間上卻不能滿足需求分析中的用例要求。為了解決顯示時(shí)間較長的問題,這里引用緩沖機(jī)制,減少顯示圖片時(shí)使用的時(shí)間。具體做法:引入緩沖隊(duì)列,在讀取瓦片時(shí),將瓦片鄰接的對象一同讀入緩存;顯示瓦片,先從緩存中讀取,如果沒有再從文件中讀取。以X方向平移500個(gè)像素,Y方向平移300個(gè)像素為例,實(shí)驗(yàn)結(jié)果如表6所示。
每次時(shí)間消耗相差較大,是由顯示范圍的瓦片個(gè)數(shù)造成的,顯示區(qū)域空白較多,顯示時(shí)間就短,反之時(shí)間較長。加速后,平均時(shí)間有了大幅度的減少,可以滿足需求分析中的特殊要求。
(2)放大縮小
添加緩存機(jī)制可以滿足平移的要求,但在放大縮小時(shí),需要清空緩存,這就造成在放大縮小時(shí)顯示速度較慢的問題。解決方法:在放大縮小中加入Animation,填充讀取的時(shí)間;同時(shí)加開線程,讀取將要顯示的瓦片,在Animation結(jié)束后,添加到緩存中。
4.1.2 地圖概括加速
網(wǎng)格內(nèi)地圖概括在平移操作過程中,并不需要進(jìn)行重新計(jì)算,將計(jì)算過的網(wǎng)格保存在緩存中,可以減少計(jì)算次數(shù)。網(wǎng)格間的地圖概括計(jì)算的對象相對較多,會(huì)占用較多時(shí)間,但是放在單獨(dú)的線程中并不會(huì)加快速度。實(shí)驗(yàn)中選擇10組相同的三類目標(biāo)來顯示,使用時(shí)間見表7。
表6 加速前時(shí)間消耗
表7 地圖概括多線程對比
與不加線程相比,加線程的速度反而慢了一些。這是由于地圖概括的順序是先進(jìn)行網(wǎng)格內(nèi)的概括,后進(jìn)行網(wǎng)格間的概括,網(wǎng)格間的概括并行計(jì)算時(shí)間上并沒有和原來的計(jì)算有時(shí)間上的重疊,因此不會(huì)減少消耗的時(shí)間,反而增加了線程操作影響了速度。
4.1.3 路徑導(dǎo)航加速
在使用Dijkstra算法過程中,減少節(jié)點(diǎn)的數(shù)目,只記錄路徑點(diǎn)。優(yōu)化前的節(jié)點(diǎn)數(shù)目為325個(gè),優(yōu)化后僅為78個(gè),如圖1所示。通過減少節(jié)點(diǎn),算法消耗的時(shí)間大大減少,優(yōu)化前需要的15 s,優(yōu)化后僅為200 ms。
圖1 路徑節(jié)點(diǎn)優(yōu)化示意圖
減少節(jié)點(diǎn)后,起點(diǎn)和終點(diǎn)節(jié)點(diǎn)的選取和顯示需要進(jìn)行計(jì)算。起點(diǎn)和終點(diǎn)的選取使用到索引文件,由點(diǎn)所在的網(wǎng)格找到網(wǎng)格中距離點(diǎn)最近的路徑段,再由路徑段找到節(jié)點(diǎn)。路徑顯示時(shí),起點(diǎn)和終點(diǎn)部分需要和路徑進(jìn)行垂線截取,以保證路徑的美觀。
進(jìn)入系統(tǒng)后會(huì)進(jìn)入默認(rèn)的比例尺和范圍,如圖2所示。地圖中的藍(lán)色原點(diǎn)代表用戶所處的位置,左上角的藍(lán)色圖標(biāo)是地圖目標(biāo)列表。點(diǎn)擊地圖目標(biāo)列表,會(huì)出現(xiàn)下拉菜單,如圖3所示。系統(tǒng)采用地圖目標(biāo)分類顯示,方便用戶快速找到感興趣目標(biāo)。
圖2 系統(tǒng)主界面
圖3 地圖目標(biāo)列表
點(diǎn)擊地圖目標(biāo)列表的選項(xiàng),會(huì)在地圖上顯示相應(yīng)的地圖目標(biāo)。小比例尺顯示時(shí),地圖概括程度大,被刪去的地圖目標(biāo)多,需要保留重要的地圖目標(biāo),系統(tǒng)默認(rèn)最后選中的地圖目標(biāo)類別的優(yōu)先級最大,地圖概括效果如圖4所示。
圖4 各分辨率地圖目標(biāo)顯示
在地圖目標(biāo)顯示的基礎(chǔ)上,可以進(jìn)行路徑導(dǎo)航。起始位置是用戶所在位置(用戶位置由室內(nèi)定位系統(tǒng)提供,這里使用示例數(shù)據(jù),僅供顯示使用),終點(diǎn)位置是地圖目標(biāo)位置,導(dǎo)航開始時(shí)會(huì)出現(xiàn)對話框,確定是否導(dǎo)航。其他的地圖目標(biāo)移除,只顯示起點(diǎn)和終點(diǎn),顯示細(xì)節(jié)見圖5所示。
圖5 路徑導(dǎo)航效果圖
在路徑導(dǎo)航過程中,如果用戶位置偏移導(dǎo)航路線較多,系統(tǒng)會(huì)出現(xiàn)如圖6所示的提示,用戶可以選擇重新導(dǎo)航和不再提醒。
圖6 路徑變化對話框
考慮ROPES更適合嵌入式軟件設(shè)計(jì)的過程,將其引入到Android系統(tǒng)的室內(nèi)地圖服務(wù)系統(tǒng)設(shè)計(jì)中。本文描述ROPES的設(shè)計(jì)過程后,分析了室內(nèi)地圖的需求分析、對象分析、機(jī)械設(shè)計(jì)和數(shù)據(jù)設(shè)計(jì),并以廣州白云機(jī)場室內(nèi)地圖設(shè)計(jì)為例,詳細(xì)講解了瓦片地圖、地圖概括和路徑導(dǎo)航的優(yōu)化過程,滿足實(shí)驗(yàn)場地用戶人員的需求。得到如下結(jié)論:
(1)對于室內(nèi)地圖,使用線性變換分辨率函數(shù)不會(huì)使得原始圖像在放大的過程中經(jīng)常出現(xiàn)模糊斷點(diǎn)的現(xiàn)象,引入緩存機(jī)制能夠很好的減少圖片顯示時(shí)間,滿足系統(tǒng)設(shè)計(jì)的需求;
(2)將地圖概括分為網(wǎng)格內(nèi)概括和網(wǎng)格間概括,減少了計(jì)算次數(shù),在不加并行計(jì)算的前提下,提高了計(jì)算效率;
(3)刪除路徑上的冗余點(diǎn),能夠加快路徑導(dǎo)航的計(jì)算效率;
(4)基于ROPES的室內(nèi)地圖服務(wù)系統(tǒng)彌補(bǔ)了PC機(jī)上設(shè)計(jì)嵌入式系統(tǒng)的不足,能夠很好的滿足用戶的需求。
[1] 楊帆.基于GSM和Google Map的定位與地圖標(biāo)注關(guān)鍵技術(shù)研究[J].陜西科技大學(xué)學(xué)報(bào):自然科學(xué)版,2011,29(2):122-125+129.
[2] 李垠,左德霖,侯建明,等.基于Google Map的地震綜合信息服務(wù)系統(tǒng)構(gòu)建研究[J].大地測量與地球動(dòng)力學(xué),2011,31(S1):118-121+131.
[3] 許虎,聶云峰,舒堅(jiān).基于中間件的瓦片地圖服務(wù)設(shè)計(jì)與實(shí)現(xiàn)[J].地球信息科學(xué)學(xué)報(bào),2010,12(4):562-567.
[4] 聶云峰,劉海玲,許虎.Geo Web Cache 瓦片地圖服務(wù)中間件研究[J].測繪科學(xué),2011,36(6):207-209.
[5] 歐陽峰,楊春成,謝鵬,等.通用瓦片生成引擎設(shè)計(jì)與性能優(yōu)化[J].測繪科學(xué)技術(shù)學(xué)報(bào),2014,31(2):177-180+184.
[6] 李德仁,肖志峰,朱欣焰,等.空間信息多級網(wǎng)格的劃分方法及編碼研究[J].測繪學(xué)報(bào),2006,35(1):52-56+70.
[7] 鄧敏,樊子德,劉慧敏.層次信息量的線要素化簡算法評價(jià)研究[J].測繪學(xué)報(bào),2013,42(5):767-773+781.
[8] 鄧敏,徐震,趙彬彬,等.地圖概括中空間目標(biāo)幾何信息傳遞模型研究[J].地球信息科學(xué)學(xué)報(bào),2010,12(5):655-661.
[9] 李霖,毛凱,譚永濱.地標(biāo)分層多粒度路徑導(dǎo)引描述方法[J].測繪學(xué)報(bào),2014,43(1):105-110.
[10] 鄭年波,陸鋒,李清泉.面向?qū)Ш降膭?dòng)態(tài)多尺度路網(wǎng)數(shù)據(jù)模型[J].測繪學(xué)報(bào),2010,39(4):428-434.
[11] DOUGLASS B P.Doing Hard Time:Developing Real-time Systems with UML,Objects,F(xiàn)rameworks,and Patterns[M].New York:Addison-Wesley Professional,1999.