郭啟倩,鄭 蕊,劉珠妹,任海軍
(1.中國地震局第二監(jiān)測中心,陜西 西安 710054; 2.湖北省地震局,湖北 武漢 430071)
地理信息系統(tǒng)(geographic information system或geo-information system,GIS)作為多源化防震減災信息平臺,提供各類電子地圖信息服務。GIS以其強大的制圖功能,結合不同類型的屬性數(shù)據(jù)和空間數(shù)據(jù),對防震減災事業(yè)中各類需求分布圖進行繪制,已廣泛應用于地震臺站分布圖、地質(zhì)構造圖、地震烈度圖等方面。
Web GIS是GIS技術的進一步延伸,實現(xiàn)了網(wǎng)絡環(huán)境下地理信息數(shù)據(jù)的訪問、存儲、分析。自從Google提出瓦片地圖方案思想以來,瓦片技術被廣泛應用于Web GIS開發(fā)中,實現(xiàn)了快捷電子地圖在線訪問。瓦片技術通過對電子地圖切片、渲染處理后,存放在服務器中供用戶直接訪問,瓦片地圖數(shù)據(jù)的緩存減少了空間數(shù)據(jù)和磁盤的訪問次數(shù),有效減輕了服務器壓力,減少了網(wǎng)絡負載,提高了響應速度。目前,瓦片地圖的服務都是基于Web在線的方式,對于地震行業(yè)內(nèi)涉密數(shù)據(jù),如何有效地在離線網(wǎng)絡環(huán)境下充分利用瓦片技術實現(xiàn)涉密數(shù)據(jù)可視化,結合瓦片專題地圖,提供更完善的行業(yè)地圖服務對于地震行業(yè)的發(fā)展有著極其重要的意義。
近年來,國內(nèi)外各大地圖公司都對相關的地圖服務進行了不斷研究與改進。如Google推出的谷歌地圖就提供了瓦片地圖服務,同時還為各類電子地圖服務愛好者提供了第三方編程接口。與之相對的強力對手就是微軟的MSN(Microsoft service network)虛擬地球服務,其中包括了3D影像、多維地圖服務等。國內(nèi)在地圖服務方面取得優(yōu)秀成果的公司有百度地圖、高德地圖、搜狗地圖等,在給用戶帶來不錯體驗效果的同時,推動著國內(nèi)外研究學者對于瓦片地圖技術的不間斷研究。主要有以下幾個主流方向:
(1)基于瓦片技術的地圖服務。
王偉等[1]從整合有效資源擴大應用需求的角度,提出了一種基于數(shù)據(jù)類型分級組織管理的數(shù)據(jù)庫一體化方法。茍麗美[2]等依據(jù)切片地圖Web服務(open GIS Web map tile service,WMTS)規(guī)范,利用Web技術實現(xiàn)了一種RESTful風格類型的瓦片地圖服務,從實現(xiàn)的角度給出了地圖瓦片服務的體系架構、整體流程和具體結構。殷福忠等[3]通過研究瓦片金字塔模型,從最底層進行了瓦片金字塔地圖服務發(fā)布技術的研究。
(2)服務器交互性能。
聶云峰等[4-5]從瓦片切圖、空間索引及系統(tǒng)部署方面對地圖交互訪問進行改進,進一步證明了改進后的中間件方法的效率要優(yōu)于傳統(tǒng)的倉庫管理系統(tǒng)(Web map service,WMS)。張凡等[6]提出了一種全新的地圖服務實現(xiàn)方法,從響應速度方面通過實驗驗證了方法的優(yōu)越性。
(3)地圖動態(tài)更新。
黃祥志等[7]運用動態(tài)緩存的方法對WMS緩存技術進行改進,取得了地圖更新的效果。杜清運等[8]在研究金字塔模型的基礎上,結合瓦片地圖服務,解決了瓦片地圖在多分辨率切換時地圖更新不連續(xù)的問題。
(4)瓦片切圖工具的開發(fā)。
韋勝[9]則利用AE進行了瓦片地圖繪制和投影。王小軍等[10]提出了一種基于AE開發(fā)的切圖工具對瓦片地圖進行獲取,并進行地圖拼接。
由于地震行業(yè)系統(tǒng)的數(shù)據(jù)涉密性,行業(yè)內(nèi)對于瓦片地圖的研究在涉密數(shù)據(jù)離線可視化方向并沒有進行深層次研究。針對該實際問題,文中將主流網(wǎng)絡電子地圖服務免費對外開放的應用程序接口API和部分基礎地圖數(shù)據(jù)遷移到本地,并通過坐標系轉(zhuǎn)換算法進行地理位置糾偏,利用地圖瓦片技術對離線網(wǎng)絡環(huán)境下使用現(xiàn)今的電子地圖服務進行研究,借鑒國內(nèi)外目前瓦片技術的研究成果,進一步基于主流GIS軟件開發(fā)地圖切片程序,研究基礎地圖、專題地圖和應用程序接口調(diào)用服務,有效解決業(yè)內(nèi)基于電子地圖的涉密數(shù)據(jù)可視化問題,并開發(fā)基于地震行業(yè)網(wǎng)絡的電子地圖示例系統(tǒng)。
在現(xiàn)如今分布式網(wǎng)絡環(huán)境下,實現(xiàn)空間數(shù)據(jù)高效訪問的關鍵是合理有效地利用存儲空間。傳統(tǒng)的Web GIS通過實時發(fā)送請求獲得地圖數(shù)據(jù)信息,由于實時性特征,導致網(wǎng)絡傳輸壓力大,與服務器交互效率低。因此,按照區(qū)域請求空間數(shù)據(jù),以瓦片為單位組織空間數(shù)據(jù)滿足訪問請求,使得訪問更加直接、快捷,優(yōu)化策略多樣性明顯。
瓦片地圖技術是按照一定的數(shù)學規(guī)則,通過配置固定的多級顯示比例尺,把連續(xù)比例的地圖劃分為多級離散比例的地圖,在服務器端提前將地圖切割成為一定規(guī)格的瓦片矩陣(支持矢量格式GIS數(shù)據(jù)和柵格格式GIS數(shù)據(jù)),依據(jù)不同的縮放比例,將矩陣數(shù)據(jù)存儲到服務器不同的目錄中,進一步建立瓦片地圖名稱與地圖坐標的映射關系。根據(jù)用戶不同的請求范圍,根據(jù)范圍內(nèi)的地圖坐標找到對應的已生成大小固定的瓦片數(shù)據(jù),返回給用戶,在客戶端拼接顯示范圍內(nèi)的地圖。
瓦片地圖技術直接返回用戶請求坐標區(qū)域的瓦片地圖數(shù)據(jù),有效縮短了地圖生成和傳送時間,提高了系統(tǒng)響應速度,同時靜態(tài)圖片的處理進一步降低了服務器負擔,提升了地圖瀏覽的高效性。
假設瓦片地圖金字塔模型的最底層為第0層,最上層為第N層,每一層的瓦片單元為4N-n(n=0,1,…,N,N為地圖的縮放級別)。根據(jù)該規(guī)則,則第N層的瓦片個數(shù)為1,即一個瓦片單元就能看到整個地圖的范圍。在第N-1層就有4個瓦片單元,每一個單元顯示四分之一的地圖范圍,以此類推,瓦片單元顯示的地圖范圍逐漸變小,整張地圖范圍的分辨率逐漸增大,如圖1所示。
由圖1可以看出,隨著比例尺逐漸變大,地圖分辨率逐漸提高,唯一不變的是每一層所顯示的地圖范圍。金字塔模型總體的構建思想為:首先確定地圖的縮放級別N,將分辨率最高的地圖置于金字塔模型的最底層,通過切分方法將地圖切割成為相同分辨率的矩形瓦片,即第0層的瓦片集合;其次,第0層的每4個像素為一個單元合并成為1個像素,即形成了第1層的瓦片集合,以此類推,逐漸形成全部的瓦片集合。瓦片金字塔構建完成后供服務器進行不同級別的地圖服務調(diào)用。
圖1 瓦片地圖金字塔模型
(1) 投影坐標系。
谷歌地圖、百度地圖均使用Web Mercator投影方式,其與常規(guī)的Mercator投影的區(qū)別在于:Web Mercator投影方式是將地球模擬為球體,而Mercator投影參照的是橢球模型。投影坐標系以赤道為標準緯線,本初子午線為中央經(jīng)線,兩者交點為坐標原點,東、北為正方向。由于整個圖幅X軸、Y軸取值范圍應相等,已知地球半徑取值為6 378 137 m,赤道周長(2πR)為20 037 508.342 789 2,則X軸、Y軸的取值范圍均為[-20 037 508.342 789 2,200 375 08.342 789 2][11]。
(2) 瓦片坐標系。
瓦片金字塔的每一個層級對應一個相應級別的瓦片坐標系,用于組織地圖瓦片。谷歌地圖的瓦片坐標原點在西經(jīng)180°,北緯85.051 13°,即Web Mercator投影坐標系的左上角,坐標系橫向往東、縱向往南為正,1級谷歌地圖將全世界范圍劃分為4張瓦片,圖2(a)是地圖級別為2時的瓦片組織方式。百度地圖的瓦片坐標原點以經(jīng)緯度(0,0)點為基準作了偏移量為(-865,15 850)的偏移處理[12],即地圖瓦片坐標原點(0,0)對應Web Mercator投影坐標系的(-865,15 850),坐標系橫向往東、縱向往北遞增[13],圖2(b)是地圖級別為2時的瓦片組織方式。
構建基于行業(yè)網(wǎng)的電子地圖服務,首要實現(xiàn)的是地圖瓦片數(shù)據(jù)本地化,即在行業(yè)網(wǎng)服務器構建瓦片金字塔數(shù)據(jù)資源。擬提供的瓦片地圖資源包括基礎地理地圖和專業(yè)底圖,其中基礎地理地圖是通過Http請求實現(xiàn)瓦片本地化,專業(yè)底圖是通過地圖切片程序自定義生成本地瓦片資源。
0,01,02,03,00,11,12,13,10,21,22,23,20,31,32,33,3
(a)谷歌地圖
-2,1-1,10,11,1-2,0-1,00,01,0-2,-1-1,-10,-11,-1-2,-2-1,-20,-21,-2
(b)百度地圖
圖2 瓦片坐標系
2.3.1 Http請求實現(xiàn)瓦片本地化
Http請求獲取地圖瓦片主要是通過瓦片坐標值參數(shù)實現(xiàn)的。以百度電子地圖提供的基礎地理地圖為例,在瀏覽器開發(fā)者模式加載百度地圖過程中查看加載的網(wǎng)絡資源,以URL請求http://online2.map.bdimg.com/pvd/?qt=tile&x=752&y=249&z=12&styles=pl&p=0&cm=1&limit=80&v=088&udt=20170926返回的image資源則為百度地圖瓦片,其中參數(shù)x、y分別為瓦片X坐標和Y坐標,z為地圖級別Z。通過換算某一地理位置對應的瓦片坐標值,替換URL中對應的參數(shù):
URL url=new URL(http://online2.map.bdimg.com/pvd/?qt=tile&x={X}&y={Y}&z={Z}&styles=pl&p=0&cm=1&limit=80&v=088&udt=20170926);
若要獲取已知經(jīng)緯度(lon,lat)地點的百度地圖瓦片,首先結合墨卡托投影函數(shù)將經(jīng)度、緯度值轉(zhuǎn)換為瓦片X、Y坐標,轉(zhuǎn)換算法如下:
//經(jīng)度轉(zhuǎn)換瓦片X坐標
X=(int)((lon+180)/360)*Math.Pow(2,Z);
//緯度轉(zhuǎn)換瓦片Y坐標
doublesinLat=Math.sin(Math.PI*lat/180);
double y=0.5-Math.Log((1+sinLat)/(1-sinLat))/(4*Math.PI);
Y=(int)(y*Math.Pow(2,Z));
然后根據(jù)X、Y、Z得到獲取資源的URL,使用HttpURLConnection鏈接資源即可獲得對應瓦片:
HttpURLConnection conn=(HttpURLConnection)url.openConnection();
conn.setConnectTimeout(100);
conn.connect();
InputStream in=conn.getInputStream();
2.3.2 自定義地圖切片程序
地圖切片程序是在Visual Studio平臺利用C#語言開發(fā)的,基于ESRI公司發(fā)布的嵌入式GIS組件庫ArcGIS Engine 10.0,主要使用的程序接口為IExport、IActive View、IEnvelope等。數(shù)據(jù)源為Web Mercator投影方式的ArcGIS格式文檔(.mxd)。地圖切片流程為[14]:首先確定切片圖幅地理坐標范圍,有兩種方式:自定義和利用IEnvelope接口提供的QueryCoords方法計算地圖數(shù)據(jù)最小外包矩形范圍。然后以瓦片坐標系原點為起始點,由比例尺、瓦片尺寸及瓦片跨度循環(huán)計算每個瓦片的地理范圍并輸出。
切片程序?qū)Ω鱾€層級的地圖切割完成的瓦片按照瓦片地圖級別、相應級別下的列值、相應列下的行值進行分級組織存儲,即切圖完成后的結果存儲為:一級目錄下,文件夾以瓦片地圖級別Z命名;二級目錄下,文件夾以瓦片坐標系X值命名;三級目錄下存放瓦片,以瓦片坐標系Y值命名。
文中研究的瓦片異步加載主要是指離線狀態(tài)(互聯(lián)網(wǎng)脫機狀態(tài)和行業(yè)網(wǎng)狀態(tài))下的瓦片數(shù)據(jù)加載。需要的資源包括本地地圖瓦片和本地地圖API(應用程序結構),2.3節(jié)已經(jīng)介紹了地圖瓦片本地化方法,本節(jié)主要介紹地圖API本地化方法及本地瓦片地圖加載。
2.4.1 地圖API本地化
通過網(wǎng)絡資源分析的方式獲取主流電子地圖程序接口,即地圖API本地化。以百度地圖API為例,在瀏覽器開發(fā)者模式加載百度地圖過程中查看加載的網(wǎng)絡資源,將Http請求返回的依賴模塊API文件、圖標素材獲取至本地,主要包括基礎API JavaScript文件apiv1.3.min.js,基礎css樣式文件bmap.css,基本圖標素材images以及map、oppc、tile、control等基礎modules文件。
將地圖程序引用的網(wǎng)絡API JavaScript地址修改為本地文件路徑:
,即完成地圖API本地化
2.4.2 瓦片地圖加載
本地瓦片地圖加載就是按照異步加載方式,將按照金字塔模型組織的本地地圖瓦片加載至指定位置[15]。以百度地圖為例,自定義LocalMapType方法及BMap.TileLayer()對象LocalMapType,定義LocalMapType對象調(diào)用的地圖瓦片png文件和瓦片坐標系tileCoord的對應關系,實現(xiàn)本地瓦片地圖加載:
//本地瓦片加載函數(shù)
functionLocalMapType(){
LocalMapType=new BMap.TileLayer();
LocalMapType.getTilesUrl=function(tileCoord, zoom)
{
var x=tileCoord.x;
var y=tileCoord.y;
var strURL="maptile/baidumaps/";
strURL+=zoom+"/"+x+"/"+y+".png";
returnstrURL;
}
}
//定義地圖對象
var map=new BMap.Map("allmap");
//加載本地瓦片地圖
var localMapType=new LocalMapType();
map.addTileLayer(localMapType);
網(wǎng)絡電子地圖服務提供坐標糾偏的API接口,例如谷歌地圖,就是將正確的WGS-84坐標發(fā)送至地圖服務器,由地圖服務器上的算法將坐標糾偏為GCJ-02(火星坐標系)坐標,再返回客戶端,才能顯示到和偏移處理后的地圖對應的正確位置上。而這種在線方式的坐標糾偏必須在接入互聯(lián)網(wǎng)的狀態(tài)下才能進行。
文中對離線狀態(tài)下WGS-84坐標轉(zhuǎn)換為GCJ-02坐標的算法進行整理,對地理坐標值進行糾偏處理,解決了離線狀態(tài)下真實WGS-84坐標在離線地圖上顯示偏移的問題,轉(zhuǎn)換算法如下:
double dLat=transformLat(wgLon-105.0,wgLat-35.0);
double dLon=transformLon(wgLon-105.0,wgLat-35.0);
double magic=1-ee*Math.Sin(wgLat/180.0*pi)*Math.Sin(wgLat/180.0*pi);
dLat=(dLat*180.0)/((a*(1-ee))/(magic*Math.Sqrt(magic))*pi);
dLon=(dLon*180.0)/(a/Math.Sqrt(magic)*Math.Cos(wgLat/180.0*pi)*pi);
double mgLat=wgLat+dLat;
double mgLon=wgLon+dLon;
以上算法中,a為克拉索夫斯基橢球參數(shù)長半軸(637 824 5.0),ee為克拉索夫斯基橢球參數(shù)第一偏心率平方(0.006 693 421 622 965 943 23),經(jīng)度差值dLon計算函數(shù)transformLat(double x,double y)和緯度差值dLat計算函數(shù)transformLon(double x,double y)如下:
double transformLat(double x,double y) {
double ret=-100.0+2.0*x+3.0*y+0.2*y*y+0.1*x*y+0.2*Math.Sqrt(Math.Abs(x));
ret+=(20.0*Math.Sin(6.0*x*pi)+20.0*Math.Sin(2.0*x*pi))*2.0/3.0;
ret+=(20.0*Math.Sin(y*pi)+40.0*Math.Sin(y/3.0*pi))*2.0/3.0;
ret+=(160.0*Math.Sin(y/12.0*pi)+320*Math.Sin(y*pi/30.0))*2.0/3.0;
return ret;
}
double transformLon(double x,double y) {
double ret=300.0+x+2.0*y+0.1*x*x+0.1*x*y+0.1*Math.Sqrt(Math.Abs(x));
ret+=(20.0*Math.Sin(6.0*x*pi)+20.0*Math.Sin(2.0*x*pi))*2.0/3.0;
ret+=(20.0*Math.Sin(x*pi)+40.0*Math.Sin(x/3.0*pi))*2.0/3.0;
ret+=(150.0*Math.Sin(x/12.0*pi)+300.0*Math.Sin(x/30.0*pi))*2.0/3.0;
return ret;
}
目前,基于地震行業(yè)網(wǎng)的電子地圖服務已投入使用,為部署在行業(yè)網(wǎng)、涉密網(wǎng)的網(wǎng)站提供方便、安全的電子地圖服務,如圖3所示。
圖3 國家地震科學數(shù)據(jù)共享中心
國家地震科學數(shù)據(jù)共享中心對內(nèi)數(shù)據(jù)共享網(wǎng)站http://10.5.109.26:8080/csds/index.html匯集了地震行業(yè)歷史、實時和準實時數(shù)據(jù),包括測震波形、前兆數(shù)據(jù)、地震目錄、地震專題數(shù)據(jù)、空間觀測數(shù)據(jù)等,站內(nèi)數(shù)據(jù)總量約65 TB。網(wǎng)站部署在地震行業(yè)網(wǎng)內(nèi),為行業(yè)內(nèi)人士提供便利的數(shù)據(jù)共享服務?;诘卣鹦袠I(yè)網(wǎng)的電子地圖服務為該網(wǎng)站提供百度地圖應用接口,方便觀測數(shù)據(jù)的展示、搜索。
西部形變數(shù)據(jù)分中心建立的大地形變流動觀測數(shù)據(jù)庫管理系統(tǒng),部署于涉密網(wǎng)內(nèi)。大地形變流動觀測數(shù)據(jù)庫存儲了區(qū)域精密水準觀測數(shù)據(jù)、流動GNSS觀測數(shù)據(jù)、一二等水準點之記、GNSS點之記、重力點之記等涉密數(shù)據(jù),而這些地球物理場流動觀測數(shù)據(jù)需要地圖數(shù)據(jù)輔助其展示、應用?;诘卣鹦袠I(yè)網(wǎng)的電子地圖服務為該網(wǎng)站提供谷歌衛(wèi)星地圖應用接口,方便觀測數(shù)據(jù)的展示、搜索,如圖4所示。
圖4 區(qū)域精密水準觀測數(shù)據(jù)可視化
針對行業(yè)內(nèi)涉密數(shù)據(jù)離線可視化問題,利用地圖瓦片技術著手研究在離線網(wǎng)絡環(huán)境下使用現(xiàn)今的電子地圖服務,進一步基于主流GIS軟件開發(fā)了地圖切片程序,研究基礎地圖、專題地圖和應用程序接口調(diào)用服務,有效解決了業(yè)內(nèi)基于電子地圖的涉密數(shù)據(jù)可視化問題,并開發(fā)了相關的地震行業(yè)網(wǎng)絡電子地圖示例系統(tǒng)。下一步將對地圖的更新策略及信息訪問并發(fā)問題進行研究。