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