游蘭,彭慶喜
(1.湖北大學 數(shù)學與計算機科學學院,湖北 武漢 430062;2.武漢大學東湖分校 軟件研究所,湖北 武漢 430212)
近年來,Web地理信息技術(shù)得到了很大的發(fā)展.特別是Google公司推出的Google Maps,在世界范圍內(nèi)得到廣泛的應(yīng)用.Google還推出了Google地圖的應(yīng)用程序接口Google Maps API供用戶進行整合應(yīng)用.目前已經(jīng)有很多web應(yīng)用開發(fā)者使用Google Maps API來擴展地圖服務(wù),極大地方便了人們的生活.然而,如果每次都調(diào)用Google Maps進行地圖解析,效率并不高,而且Web應(yīng)用可能會要求保存解析的結(jié)果.本文通過對Google Maps的地圖運行機制進行研究,重點探討基于Google Maps API的地圖解析技術(shù),提出了地圖解析的持久化方案并進行設(shè)計實現(xiàn).
圖1 四叉樹編碼示意圖
Google向用戶提供地圖數(shù)據(jù)和衛(wèi)星影像數(shù)據(jù),在用戶端顯示的是常見的柵格圖像.Google Maps采用墨卡托(Mercator)投影,也就是等角圓柱投影[1-3].根據(jù)縮放的詳細程度不同,Google Maps提供0~17一共18個縮放等級,其中0級縮放最詳細.不管是地圖數(shù)據(jù)還是衛(wèi)星影像數(shù)據(jù)都采用了圖像切片技術(shù),將各個縮放等級的全球數(shù)據(jù)分割成大小為256×256像素,格式為PNG的圖片保存起來.為了能夠有效的檢索這些切片數(shù)據(jù),如圖1按照四叉樹的方式對每塊小切片進行編碼索引.Google Maps采用“QRTS”4個字母進行索引編碼.
如Google使用http://kh0.google.com/kh?n=404&v=8&t=sq對衛(wèi)星地圖編碼,其中參數(shù)t對影像的位置進行編碼.參數(shù)t的長度表示縮放級別.由于切片的位置參數(shù)t的值為“sq”,其長度為2,則表示當前的縮放等級為17=19-2,此時全球的影像數(shù)據(jù)的分片數(shù)目為22=4.
Ajax是Asynchronous JavaScript and XML的縮寫,即“異步的JavaScript和XML處理技術(shù)”.Ajax顛覆了傳統(tǒng)Web開發(fā)在用戶交互方面的模式.傳統(tǒng)的Web技術(shù),在用戶發(fā)出請求后,需要長時間等待服務(wù)器的響應(yīng).而使用Ajax技術(shù)的Web開發(fā),則可以無需重新裝載整個頁面就能對服務(wù)器發(fā)送請求和對XML文檔的解析和處理.用戶不用再面對空白的頁面和刷屏.
圖2 Ajax技術(shù)與傳統(tǒng)B/S方式比較
Ajax技術(shù)并不是全新的技術(shù),它是將已有的幾種技術(shù)綜合起來形成的.這些技術(shù)如下:
(1)用XHTML和CSS處理網(wǎng)頁內(nèi)容、表現(xiàn)形式;
(2)用DOM顯示和控制網(wǎng)頁;
(3)用XML和XSLT來進行數(shù)據(jù)交換和處理;
(4)用XMLHttpRequest來異步獲取數(shù)據(jù);
(5)用JavaScript整合以上的技術(shù).
Ajax工作模式在瀏覽器和服務(wù)器之間多了一個AjaxEngine(Ajax引擎).它使用Request/Server模式形成一個發(fā)送和接收XMLHttpRequest請求的框架,這個框架的基本流程是:對象初始化,發(fā)送請求,服務(wù)器接收,服務(wù)器返回,客戶端接收,修改客戶端頁面內(nèi)容.圖2是Ajax技術(shù)和傳統(tǒng)B/S方式的比較.
Google Maps采用Ajax技術(shù).與傳統(tǒng)Web相比,Google Maps不再需要點擊特定的鏈接來下載新的地圖數(shù)據(jù),用戶的操作(如在地圖上拖拽)隨時觸發(fā)瀏覽器與服務(wù)器之間的通信.另外瀏覽器和服務(wù)器之間的交互是異步進行的,用戶的工作流程不再被頻繁的刷新過程打斷.
Google向用戶免費發(fā)布全球地圖和衛(wèi)星影像的同時,開發(fā)了其應(yīng)用程序接口.開發(fā)人員可以根據(jù)自己的需求開發(fā)基于Google Maps API的地圖服務(wù),將Google Maps嵌入自己的Web應(yīng)用.使用過程如下:
(1)注冊Google Maps API 密鑰.想使用Google Maps API,首先要在Google申請一個相應(yīng)的API密鑰.不同的域必須申請單獨的密鑰.注冊時需要提供網(wǎng)站的URL,申請到之后將這個密鑰包含在Google Maps API的JavaScript 休宁县| 岳西县| 册亨县| 昌平区| 酒泉市| 三门峡市| 多伦县| 太保市| 景德镇市| 昌江| 信丰县| 新竹市| 门头沟区| 兴国县| 嘉兴市| 郴州市| 东兰县| 班戈县| 乡城县| 茶陵县| 吉安市| 黑龙江省| 嵊泗县| 彰武县| 龙里县| 云阳县| 广丰县| 高碑店市| 久治县| 武穴市| 五寨县| 大邑县| 静安区| 邵阳县| 顺义区| 长兴县| 宝鸡市| 正安县| 蒲江县| 临颍县| 浠水县|