陳 軍, 王廣杰, 呂朝陽
(1. 成都信息工程大學 資源環境學院, 四川 成都 610225;2. 四川師范大學 西南土地資源評價與監測重點實驗室, 四川 成都 610066)
近年來,網絡地圖作為新的地圖網絡表達逐漸走進人們的視線,它通過分層緩存靜態瓦片地圖,隨客戶顯示窗口大小提供顯示范圍適當分辨率的瓦片數據,從而為用戶提供流暢、便捷、數據豐富的地圖資源[1].然而,隨著在線地圖應用的不斷普及,用戶已經不滿足通過瀏覽器進行在線瓦片地圖的簡單訪問[2].在許多專業領域,迫切需要利用瓦片地圖顯示流暢、數據資源豐富等優點,將其直接集成到現有的GIS桌面應用程序上,實現瓦片地圖與GIS數據的無縫疊加和整合分析.
在國外,美國環境系統研究所公司及很多開源社區都有類似的項目.開源社區Codeplex的BruTile基于C#的開源庫訪問各種瓦片服務,如TMS、ArcGIS Tile Server、OpenStreetMap和Bing;GMap.NET作為一款功能強大、免費的NET控件,也支持在C/S模式下訪問Google、雅虎、必應、OpenStreetMap等地圖服務[3].在國內,巫細波等[4]采用C#設計了一個基于Google Maps的應用程序,通過這個程序可以獲取免費的地圖或者衛星影像數據;韋勝[5]闡述了在Arc Engine環境下實現瓦片地圖的訪問與拼接方法,并基于開源項目ArcBruTile將瓦片地圖集成到ArcEngine,拓展了瓦片地圖應用范圍;張業舟等[6]闡述了GoogleMaps瓦片組織,分析了Google地圖的原理,并對Google瓦片進行了應用;戴侃等[7]通過對異構GIS平臺瓦片地圖數據和瓦片數據國際標準的研究,提出了適用于不同平臺的瓦片數據轉換共享方法.
從技術實現上來看,這些研究和項目都提供了訪問瓦片數據、數據緩存及瓦片拼接的解決方法.由于未考慮在線地圖投影顯示問題,要求客戶端其他空間數據只能投影到在線地圖上顯示,而客戶端系統往往需要定義不同的顯示坐標系統.為解決該問題,韋勝[8]申請了《一種動態地圖投影下的網絡地圖配準及繪制方法》的專利,該專利采用多個“特征點”獲取到的瓦片地圖誤差偏移值對每個瓦片的地理范圍值進行誤差校正.“特征點”不僅獲取算法復雜,而且僅用少量“特征點”投影轉換,容易導致較大誤差[9].為此,本文提出一種客戶端在線地圖點對點的實時動態投影方法,在保證一定的投影精度的同時,能提高動態投影的實時性.
在線地圖是一種基于金字塔模型的靜態瓦片地圖,將全球按不同層次劃分為大小相同的數據分片,以瓦片文件形式存儲在服務器上.每一個分片代表地球表面上特定區域,并按一定的主題來表現區域的地理信息.隨著層級的增加,數據分片代表的地面區域越小,對地理信息的表征越為詳盡.用戶在瀏覽地圖時,根據當前比例尺,自動計算出最佳顯示層級,并從服務器上下載分片數據.由于用戶只能在一定大小的屏幕上瀏覽在線地圖,并且使用了數據緩存技術,從而實現在線地圖的低帶寬、快速展示[10-12].
設地圖上某點的坐標為(x,y),將其轉換為該點的經緯度(lon,lat),利用(1)式可求取在顯示層次為L時該點的像素坐標(Px,Py)為
(1)
根據像素坐標(Px,Py),利用(2)式可求取該點在給定層次L的瓦片行列位置(Tx,Ty):
(2)
其中Int為取整函數.
在線地圖以瓦片組合的方法完成顯示區域內地圖的顯示[13-15].如果客戶端顯示坐標系統采用在線地圖的存儲坐標系統,瓦片在客戶端顯示時仍保持為矩形,此時,將客戶端左上角(x1,y1)和右下角(x2,y2)地圖坐標依據(1)和(2)式分別求得瓦片行列位置(Tx1,Ty1)和(Tx2,Ty2),則待顯示的瓦片序列為
Ts={(Tx,Ty)|x1≤x≤x2,y1≤y≤y2}.
(3)
由于不考慮投影轉換,將瓦片序列的所有瓦片按空間位置直接在客戶端顯示設備對應矩形區域繪制,就能實現在線地圖的無縫顯示.
GIS空間數據顯示有2個重要的坐標系統,即圖層坐標系統和顯示坐標系統.圖層坐標系統是指空間數據層在存儲時所采用的坐標系統,如在線地圖一般采用Web Mercator坐標系統存儲瓦片數據.地圖以圖層方式組織,一幅地圖一般包含多個圖層,但不同的圖層可能具有不同的圖層坐標系統.為使同一個區域不同坐標系的圖層能在地圖上正確疊放,必須采用統一的地圖坐標系統,即顯示坐標系統.當圖層的坐標系統和地圖的顯示坐標系統不一致時,需要在顯示時實時轉換圖層的坐標系,這個過程為GIS的動態投影顯示過程.
當在線地圖坐標系統和地圖顯示坐標系統不一致時,需要對在線地圖進行動態投影轉換.在線地圖動態投影轉換分為2步,首先獲取動態投影的瓦片序列,然后對瓦片序列各瓦片投影轉換顯示.
2.1在線地圖動態投影的瓦片序列獲取在無投影轉換條件下,直接依據顯示范圍左上角和右下角坐標按照(3)式求取瓦片序列.在投影轉換過程中,由于源坐標系統與目標坐標系統一般不是線性關系,左上角和右下角坐標轉換后得到的矩形范圍可能小于目標矩形范圍.為相對精確地獲取轉換后的目標矩形,在源矩形4個邊上按一定間隔重樣,獲取一定數量的采樣點,將所有采樣點轉換為在線地圖坐標系統,獲取轉換后采樣點的外接矩形,該外接矩形作為請求瓦片地圖范圍,如圖1.

圖 1 地圖范圍的投影轉換
2.2點對點的在線地圖動態投影方法在線地圖的每一個瓦片在自身坐標系統中代表地面的一個矩形范圍.從圖1可見,在投影轉換過程中,在線地圖坐標系統的瓦片在客戶端坐標系統中不再保持矩形邊緣,簡單的瓦片矩形拼接不能得到正確的地圖.有效的解決辦法是,將各瓦片分別投影轉換,先繪制到臨時的瓦片內存位圖上,再映射到客戶系統的顯示設備上.
1) 瓦片內存位圖的創建.瓦片內存位圖采用客戶坐標度量,單位為像素,瓦片內存位圖的大小與客戶顯示設備的分辨率密切相關.為避免數據顯示變形,要求客戶坐標與地圖坐標在水平和垂直方向均呈線性關系.客戶坐標和地圖坐標轉換公式為
X=ax*X′+bx,
(4)
Y=ay*Y′+by,
(5)
其中,X、Y為地圖上某點的坐標,X′、Y′為客戶像素坐標,ax、ay為轉換系數,bx、by為偏移常數.
利用(4)和(5)式,將瓦片投影到顯示坐標系統下的矩形范圍轉換為客戶區坐標范圍,得到瓦片顯示區域的水平和垂直方向的像素數,據此創建同樣大小的內存位圖用于存放投影后的瓦片地圖.瓦片地圖先繪制在內存位圖上,然后再顯示到屏幕上,從而實現在線地圖的動態投影顯示.
2) 瓦片的點對點動態投影轉換.將內存位圖每一個像元作為一個“特征點”,將像元中心的客戶坐標轉換為地圖坐標,再根據投影變換關系轉換為在線地圖坐標;最后,根據在線地圖坐標求取瓦片的像元位置,將其像素值賦給源內存位圖的像元.逐像元對內存位圖所有像元求取像素值后,瓦片就實現了投影轉換.點對點投影轉換如圖2.

圖 2 點對點投影轉換
3.1在線地圖實時動態投影基本思路為獲取高精度的投影地圖,點對點動態投影要求內存位圖所有像元均作為“特征點”,通過投影變換從瓦片對應位置上獲取像素值;但投影轉換算法復雜度高,大量“特征點”的批量轉換,會導致性能降低,并影響在線地圖顯示的實時性.本文嘗試使用簡單的規則減少“特征點”,即對內存位圖的行和列均按一定間隔采樣,將采樣后的“特征點”投影轉換后,對坐標進行雙線性內插,獲取內存位圖所有像元的坐標.
設待計算內存像元坐標為(x,y),其相鄰4個“特征點”坐標為(j,i)、(j+1,i)、(j+1,i)和(j+1,i+1).以求取該像元投影坐標X為例,設投影坐標的X分量分別為X(j,i)、X(j+1,i)、X(j+1,i)和X(j+1,i+1).首先利用(6)式在X方向線性內插:
(6)
然后利用(7)式在Y方向再做一次線性插值,得到最終的X坐標:
X=(Xb-Xt)×(y-i)+Xt,
(7)
對于像元投影坐標Y,替換(6)和(7)式投影坐標分量Y,得到最終的Y坐標.
3.2實時動態投影最佳間隔的確定為定量研究采樣間隔對投影精度和效率的影響,選擇相對Web Mercator投影變形較大的多個坐標系統,在同一個區域對相鄰的25塊瓦片反復進行投影拼接實驗.以間隔1像元采樣(即所有像元均投影轉換)的投影坐標序列為參照,采用STD(均方差)、SUMP(像元總誤差)、MAXP(最大像元誤差)和TIME(處理時間)4個指標評價不同采樣間隔的精度和效率.STD為內存位圖同位置上采樣內插的投影坐標與參照坐標的距離均方差,SUMP和MAXP分別表示由于坐標值差異導致推算的瓦片像元的距離誤差和與最大距離誤差,TIME表示25個瓦片動態投影總時間.前2個指標均以單個瓦片為統計對象,即各瓦片的指標平均值.實驗結果如表1所示.

表 1 不同采樣間隔的動態投影精度和效率對比
從表1可見,隨著采樣間隔增大,動態投影總時間不斷減少,投影誤差不斷增大.從變化趨勢上看,當采樣間隔增大時,動態投影效率提升幅度不斷下降,投影誤差則以近似指數曲線方式快速上升;因此,僅通過少量“特征點”進行在線地圖動態投影,不可避免產生較大誤差.當采樣間隔為2時,處理時間減少到可以實時處理的程度,并且誤差相對較小.在單個瓦片上,投影總誤差在4個像元左右,最大像元誤差為1個像元,相對于256×256的瓦片總像元個數而言,投影誤差肉眼很難察覺:因此,本文將采樣間隔為2作為實時動態投影的采樣間隔.
3.3瓦片數據的無縫拼接由于坐標系統之間并非簡單的線性關系,瓦片數據在瓦片地圖坐標系統中為矩形,投影后不一定保持矩形,導致經過點對點投影轉換后,有部分像元推算出來的瓦片行列位置在瓦片數據之外.將這些像元設置為透明,以實現相鄰瓦片單元地圖能無縫拼接.圖3展示了無縫拼接過程,左圖為瓦片數據拼接的中間截圖,由于顯示坐標系統和在線地圖坐標系統并非線性關系,拼接邊緣并非矩形;右圖為拼接完成的顯示效果圖,瓦片之間無拼接縫隙,相鄰瓦片過渡自然,證明了本文方法的有效性.

圖 3 瓦片數據的無縫投影拼接
為解決在線地圖在GIS客戶端實時投影顯示問題,提出了一種點對點的客戶端在線地圖動態投影方法.首先,將顯示范圍投影轉換到在線地圖坐標范圍內,計算顯示的瓦片序列.對于待顯示的每一個瓦片,先計算內存位圖大小,并每隔2個像素采集顯示坐標點,并轉換到在線地圖坐標系統,求取像素值.然后,利用雙線性內插方法完成瓦片內存位圖所有像素值的求取并繪制到屏幕上.實驗證明,本文算法計算精度和效率相對較高,能保證相鄰瓦片之間無縫拼接,滿足了在線地圖實時動態投影展示;同時,也驗證了“少量特征點”存在較大的投影誤差,影響動態投影精度.本文的研究思路和成果具有一定的理論意義和實踐價值.
[1] 姚真凱. 瓦片地圖技術在水利WebGIS系統中的開發研究與應用[J]. 浙江水利科技,2009(6):40-42.
[2] 黃夢龍. 瓦片地圖技術在桌面端GIS中的應用[J]. 地理空間信息,2011,9(4):149-151.
[3] REGUERAS L M, CASTRO J P D. A neural network based intelligent system for tile prefetching in web map services[J]. Expert Systems with Applications,2013,40(10):4096-4105.
[4] 巫細波,胡偉平. Google Maps運行機制以及應用研究[J]. 華南師范大學學報(自然科學版),2009,34(2):107-108.
[5] 韋勝. ArcEngine環境下實現瓦片地圖的訪問與拼接[J]. 華南師范大學學報(自然科學版),2012,37(6):737-740.
[6] 張業舟,黃興. Google Maps瓦片組織分析和應用研究[J]. 測繪時空,2012(2):22-25.
[7] 戴侃,李衛紅,初潤潤. 異構GIS瓦片地圖轉換共享模式研究[J]. 地理空間信息,2014(2):33-39.
[8] 韋勝. 一種動態地圖投影下的網絡地圖配準及繪制方法:CN 103065544A[P]. 2013-4-24.
[9] 韋勝. ArcEngine環境下實現瓦片地圖的訪問與拼接[J]. 武漢大學學報(信息科學版),2012,37(6):737-740.
[10] 宮凈敏,黃鈺,李成名. 基于NewMap在線專題地圖制作[J]. 地理信息世界,2016,23(3):9-12.
[11] 蘇旭明,譚建成. WebGIS中瓦片地圖關鍵技術研究[J]. 北京測繪,2012(2):9-12.
[12] 羅智勇,黎小東. 基于數據庫存儲方案的高性能瓦片地圖服務研究[J]. 地理與地理信息科學,2013,29(3):48-52.
[13] 劉冰,謝軻,陳小樂,等. 基于GIS的瓦片式地圖切圖算法的設計與實現[J]. 科技信息,2011(7):66-67.
[14] 郭明武,彭清山,李黎. ArcGIS Server中地圖瓦片實時在線局部更新方法研究[J]. 測繪通報,2012(2):35-38.
[15] 趙麗娟. 瓦片地圖在遙感影像專題圖中的應用研究[J]. 測繪,2014,37(1):17-19.