本站小編為你精心準(zhǔn)備了電子地圖API的設(shè)計(jì)和實(shí)現(xiàn)參考范文,愿這些范文能點(diǎn)燃您思維的火花,激發(fā)您的寫(xiě)作靈感。歡迎深入閱讀并收藏。
電子地圖是利用地理信息系統(tǒng)、計(jì)算機(jī)網(wǎng)絡(luò)技術(shù)和計(jì)算機(jī)存儲(chǔ)技術(shù)等相結(jié)合而實(shí)現(xiàn)的一種新的地圖展現(xiàn)方式,已廣泛的應(yīng)用于各行各業(yè)。當(dāng)前的大部分電子地圖應(yīng)用都是采用瓦片地圖技術(shù),也有一小部分企業(yè)應(yīng)用仍然基于矢量地圖,兩種技術(shù)各有優(yōu)勢(shì)和缺點(diǎn)。但在當(dāng)下,前者的應(yīng)用應(yīng)該是略勝一籌,通過(guò)特定的地圖投影模型,把通過(guò)遙測(cè)技術(shù)而生成的矢量地圖,按固定的縮放比例和固定尺寸進(jìn)行切分,生成一張張幾KB至幾十KB大小的圖片,就容納大量的地理信息,無(wú)論是使用客戶(hù)端或者瀏覽器程序,地圖都能在短短幾秒內(nèi)顯示在用戶(hù)面前,如此性能優(yōu)越的用戶(hù)體驗(yàn),是動(dòng)則需要讀取幾百兆的矢量地圖客戶(hù)端技術(shù)所望塵莫及的。在國(guó)內(nèi)企業(yè)中,地理信息系統(tǒng)多為使用ArcGis等企業(yè)級(jí)GIS平臺(tái)或開(kāi)源的GeoServer平臺(tái),其矢量圖客戶(hù)端對(duì)終端計(jì)算機(jī)的硬件性能要求高,嚴(yán)重制約了GIS在國(guó)內(nèi)企業(yè)的應(yīng)用推廣,所以基于瓦片地圖技術(shù)的電子地圖api的設(shè)計(jì),有著廣闊的應(yīng)用場(chǎng)景。
1電子瓦片地圖技術(shù)的基本概念
由于地球是球體,而我們?nèi)粘K褂玫牡貓D為方形,所以地圖就涉及到一個(gè)從經(jīng)緯度到平面的轉(zhuǎn)換過(guò)程,俗稱(chēng)地圖投影方法。而在不同的場(chǎng)合和用途下使用不同的地圖投影,不同的投影方法有不同的經(jīng)緯度到方形坐標(biāo)系的轉(zhuǎn)換公式,大多數(shù)互聯(lián)網(wǎng)地圖服務(wù)基本使用墨卡托投影。地面分辨率概念:地面分辨率類(lèi)似地圖中的比例尺,是像素與地面距離(米)的比例。以谷歌地圖為例,其地圖瓦片每個(gè)均為256×256像素,當(dāng)縮放級(jí)別為1時(shí),全球地圖大小為512×512像素,即有4個(gè)地圖瓦片,赤道的分辨率=赤道周長(zhǎng)距離(米)/512(像素)。當(dāng)縮放級(jí)別為2時(shí),赤道的分辨率為赤道周長(zhǎng)距離/1024,即地圖長(zhǎng)度=地圖寬度=256×2縮放等級(jí)像素。由此可見(jiàn),地面分辨率取決于兩方面,地圖縮放級(jí)別和緯度,縮放級(jí)別決定像素即地圖瓦片的數(shù)量,緯度決定該地圖等級(jí)下的地表距離。地面分辨率(米/像素)=(cos(緯度×pi/180)×2×pi×赤道半徑/米)/(256×2×縮放級(jí)別像素)。根據(jù)墨卡托投影,因?yàn)樵诿總€(gè)縮放級(jí)別下,地圖所含的像素都不同,因此地圖瓦片的數(shù)量也不同。每個(gè)瓦片都有一個(gè)坐標(biāo)值,從左上角的(0,0)到右下角的(2縮放等級(jí)–1,2縮放等級(jí)–1)。對(duì)一個(gè)已知像素的XY坐標(biāo)值,其所在的瓦片坐標(biāo)值為,tileX=floor(pixelX/256),tileY=floor(pixelY/256)。
2電子地圖API的總體設(shè)計(jì)
2.1電子地圖API基本功能電子地圖API是一套由編程語(yǔ)言編寫(xiě)的應(yīng)用程序接口,能夠構(gòu)建功能豐富、交互性強(qiáng)的地圖應(yīng)用,包含了電子地圖各項(xiàng)基本功能的接口。基本地圖功能:展示平面地圖、衛(wèi)星地圖等,拖拽、移動(dòng)、縮放地圖等。地圖圖層功能:支持重設(shè)地圖底圖、地圖上疊加實(shí)時(shí)交通圖層或自定義圖層功能。覆蓋物功能:支持在電子地圖上顯示點(diǎn)、線、面、熱區(qū)、行政區(qū)劃、用戶(hù)自定義覆蓋物等;地圖控件展示功能:支持地圖縮放控件、工具條、比例尺等。
2.2電子地圖API邏輯架構(gòu)地圖API界面容器是用戶(hù)所看到的界面,是其他所有層的容器。地圖層容器負(fù)責(zé)存放各種類(lèi)型的地圖,如衛(wèi)星圖、2D平面圖等,這些圖可以按上一節(jié)所說(shuō)的方法,把地圖按256×256像素預(yù)先切割好,并存放在文件服務(wù)器或者CDN上,以供電子地圖API讀取并顯示。該容器會(huì)隨鼠標(biāo)拖拽或者觸摸移動(dòng)事件而平移,地圖也跟隨容器而平移。覆蓋物層容器負(fù)責(zé)顯示點(diǎn)、線、多邊形、標(biāo)注等自定義圖形,如顯示導(dǎo)航路線、用戶(hù)自定義的矢量標(biāo)注物。動(dòng)作響應(yīng)層負(fù)責(zé)處理界面事件,如鼠標(biāo)點(diǎn)擊、鼠標(biāo)滾輪、鼠標(biāo)拖拽、手指觸摸移動(dòng)、雙手放大縮小等,地圖API根據(jù)該層響應(yīng)的事件來(lái)做相應(yīng)操作,如移動(dòng)地圖圖層、放大縮小地圖、顯示導(dǎo)航路線圖等。控件層容器負(fù)責(zé)顯示地圖的工具控件,如鷹眼、工具條、比例尺、地圖縮放控件。
2.3事件流程設(shè)計(jì)整個(gè)電子地圖API由地圖層容器、覆蓋物層容器、動(dòng)作響應(yīng)層、控件層容器組成,除動(dòng)作響應(yīng)層以外,其他層都能會(huì)包含多個(gè)對(duì)象,這些對(duì)象都可能會(huì)對(duì)鼠標(biāo)、觸摸事件做出響應(yīng),事件發(fā)生后,每層的該事件發(fā)生位置的對(duì)象都會(huì)被響應(yīng)該事件,處理完后會(huì)把事件傳給下一層。如用戶(hù)在地圖上點(diǎn)擊鼠標(biāo),控件層容器層先的相關(guān)對(duì)象先響應(yīng)該事件,處理完成后再把事件傳遞給覆蓋物層容器,最后是傳遞給地圖層容器,逐層傳遞。但有些對(duì)象會(huì)屏蔽下一層容器的對(duì)象對(duì)上述事件的響應(yīng)(如拖動(dòng)地圖縮放控件時(shí)候,地圖、地圖上的標(biāo)注不會(huì)跟隨移動(dòng)),使用觀察者模型作設(shè)計(jì)能有效解耦地圖API的各個(gè)模塊。觀察者模式定義了對(duì)象之間依賴(lài)關(guān)系,發(fā)生改變的對(duì)象稱(chēng)之為觀察目標(biāo),而被通知的對(duì)象稱(chēng)之為觀察者,當(dāng)一個(gè)對(duì)象改變其狀態(tài)時(shí),它的所有觀察者都會(huì)收到通知,并按既定的策略做出反映。一個(gè)觀察目標(biāo)可以對(duì)應(yīng)多個(gè)觀察者,而且這些觀察者之間沒(méi)有相互聯(lián)系,所以可以根據(jù)需要增加和刪除觀察者,使得系統(tǒng)更易于擴(kuò)展,觀察者模式又稱(chēng)為-訂閱模式。
3電子地圖API的實(shí)現(xiàn)
電子地圖API最關(guān)鍵是顯示服務(wù)器上的瓦片地圖,所以動(dòng)作響應(yīng)層和地圖層是整個(gè)API的重點(diǎn),而整個(gè)動(dòng)作響應(yīng)層的中心點(diǎn)和動(dòng)作響應(yīng)層的長(zhǎng)寬是決定加載哪些瓦片地圖的關(guān)鍵所在。由于地圖是經(jīng)緯度球面坐標(biāo)系統(tǒng)映射到墨卡托平面坐標(biāo)系統(tǒng)的結(jié)果,地圖層容器存放的正是墨卡托平面坐標(biāo)系統(tǒng)的瓦片地圖,通過(guò)地圖投影類(lèi)中的公式,能計(jì)算出某縮放等級(jí)下電子地圖中心點(diǎn)經(jīng)緯度對(duì)應(yīng)墨卡托平面坐標(biāo)系的坐標(biāo),然后把該坐標(biāo)作為地圖層和動(dòng)作響應(yīng)層的中心點(diǎn),地圖層容器根據(jù)動(dòng)作響應(yīng)層的中心點(diǎn)在墨卡托平面坐標(biāo)系統(tǒng)的位置和地圖窗口的長(zhǎng)度、寬度,計(jì)算出地圖層應(yīng)該加載哪些瓦片地圖并加載。當(dāng)?shù)貓D拖動(dòng)時(shí),地圖API根據(jù)動(dòng)作響應(yīng)層的XY軸平移量,根據(jù)上述辦法判斷出加載的瓦片地圖,哪些在地圖緩存隊(duì)列的圖片不再需要。地圖緩存隊(duì)列大小固定,有助控制內(nèi)存消耗量,當(dāng)需加載的瓦片地圖不在緩存隊(duì)列中,則按LRU策略刪除不在地圖窗口中的地圖瓦片,并加載新的。為改善用戶(hù)體驗(yàn),地圖層容器面積稍微比動(dòng)作響應(yīng)層大,地圖緩存隊(duì)列的大小也設(shè)成比地圖層容器稍大,以免用戶(hù)拖動(dòng)地圖時(shí)候出現(xiàn)白邊。
4結(jié)語(yǔ)
本文通過(guò)提出新的基于瓦片地圖技術(shù)的電子地圖API設(shè)計(jì),實(shí)現(xiàn)了高性能的瓦片地圖展示辦法。通過(guò)采用分層技術(shù)和觀察者模式的設(shè)計(jì)方法,地圖層容器、覆蓋物層容器、動(dòng)作響應(yīng)層、控件層容器能做到各司其責(zé),在其實(shí)現(xiàn)中均能及時(shí)響應(yīng)各種用戶(hù)動(dòng)作,根據(jù)此設(shè)計(jì),作者分別用Javascript和Actionscript3分別編寫(xiě)地圖API,由于采取了單線程設(shè)計(jì)并結(jié)合最新的JavascriptWEBGL技術(shù)和Flashstage3D技術(shù),性能較現(xiàn)有的商用、開(kāi)源地圖API有大幅度提高,在性能較差的設(shè)備也能表現(xiàn)良好,增強(qiáng)了地理信息系統(tǒng)在企業(yè)中的使用度。
作者:簡(jiǎn)瑋俠 單位:廣東電網(wǎng)有限責(zé)任公司中山供電局信息中心