徐 亮
(1. 福建省基礎(chǔ)地理信息中心,福建 福州350001)
基于多源地圖服務(wù)的專題地圖生成算法
徐 亮1
(1. 福建省基礎(chǔ)地理信息中心,福建 福州350001)
在B/S體系結(jié)構(gòu)下,實現(xiàn)基于地圖切片和ArcGIS Server地圖服務(wù)的專題地圖動態(tài)生成算法。分析了地圖切片的組織特點及其像素與坐標(biāo)的轉(zhuǎn)換方法,運用標(biāo)準(zhǔn)的REST訪問接口和GDI+技術(shù),設(shè)計并實現(xiàn)了多尺度、多源數(shù)據(jù)的裁剪、拼接以及在特定位置渲染地圖要素的算法。并以山東省測量標(biāo)志動態(tài)監(jiān)管信息系統(tǒng)為例,證明了該方法的可行性。
地圖切片;專題地圖;多源;REST接口;GDI+
數(shù)據(jù)是GIS研究的基石,分布式地圖服務(wù)是人們?yōu)榱藢崿F(xiàn)數(shù)據(jù)成果共享而采用的一種技術(shù)手段,當(dāng)前在線電子地圖幾乎都使用分布式切片技術(shù)來提供一種低成本、流暢的、數(shù)據(jù)豐富的在線服務(wù),并且將服務(wù)免費共享給其他用戶使用。隨著各種OGC地圖服務(wù)標(biāo)準(zhǔn)的制定,網(wǎng)絡(luò)上呈現(xiàn)出很多標(biāo)準(zhǔn)化的地圖服務(wù),這些不同來源的地圖數(shù)據(jù),使人們有了更多的選擇。然而,有時對地圖切片的簡單瀏覽并不能滿足用戶的特定需求,他們希望利用網(wǎng)絡(luò)地圖作為自己的基礎(chǔ)數(shù)據(jù),并結(jié)合自己的專題業(yè)務(wù)數(shù)據(jù),制作一幅專題地圖,以滿足特定的應(yīng)用需求。但是,這些服務(wù)是基于網(wǎng)絡(luò)形式發(fā)布的,即便提供了方便的訪問接口,也很難滿足用戶的特殊需求。對此問題,國內(nèi)的研究絕大多數(shù)局限于抓取切片和單數(shù)據(jù)源切片拼接[1-3]。
專題圖在服務(wù)器端生成,客戶端向服務(wù)器發(fā)送請求,并附帶多源數(shù)據(jù)相關(guān)參數(shù)和輸出的專題圖參數(shù),服務(wù)器端程序?qū)φ埱筮M(jìn)行處理,根據(jù)參數(shù)進(jìn)行相關(guān)計算,并從遠(yuǎn)程地圖服務(wù)器提取地圖數(shù)據(jù),然后按一定的規(guī)則進(jìn)行拼接、異源數(shù)據(jù)疊加、裁剪等數(shù)據(jù)處理,最后繪制專題地圖輔助要素,并將處理好的結(jié)果輸出到客戶端(圖1)。
圖1 專題數(shù)據(jù)處理流程
1.1 GDI+技術(shù)
GDI是Window操作系統(tǒng)的圖形設(shè)備接口,它的主要任務(wù)是負(fù)責(zé)系統(tǒng)與繪圖程序之間的信息交換,處理所有Windows程序的圖形輸出。GDI+是GDI的改進(jìn)版本,是面向?qū)ο缶幊痰膱D形框架,相對于GDI具有更高的編程效率、更快的繪圖速度、更穩(wěn)定的內(nèi)存資源管理。
GDI處理圖像是在Window坐標(biāo)空間進(jìn)行的,Window有3種坐標(biāo)空間,分別為邏輯坐標(biāo)、設(shè)備坐標(biāo)、物理坐標(biāo)。GDI+繪圖時,是在邏輯坐標(biāo)系下進(jìn)行的,它與地理坐標(biāo)系不同,它的位置可以由用戶自己設(shè)定,和具體的硬件設(shè)備無關(guān)[4]。它以像素點作為坐標(biāo)單位,坐標(biāo)原點可以用戶自行設(shè)定,一般在一個圖形畫布的左上角,X軸水平向右為正,Y軸豎直向下為正,與地理坐標(biāo)系的Y軸方向相反。
目前電子地圖的開發(fā)多是基于MapObjects、Mapx等GIS控件或是直接利用高級語言從底層開發(fā),其本質(zhì)還是利用Windows提供的圖形繪制接口(GDI)編程實現(xiàn)圖形顯示[5]。
1.2 地圖瓦片
地圖瓦片(map tile,又稱“地圖緩存”)是按照一定的數(shù)學(xué)規(guī)則,在預(yù)先設(shè)定的不同比例尺下,把整個地圖切割成一定規(guī)格大小的圖片,并保存圖片副本拷貝到地圖服務(wù)器中。當(dāng)服務(wù)器收到客戶端對地圖服務(wù)的請求時,就會根據(jù)切割和存儲規(guī)則,找到圖片并發(fā)送到客戶端,從而有效地減輕GIS服務(wù)器的負(fù)荷,提升地圖瀏覽速度。
瓦片的切割是基于金字塔模型進(jìn)行的,該模型是一種多分辨率層次模型,從金字塔的底層到頂層,地理范圍不變,但分辨率越來越低。如圖2所示,在切割金字塔瓦片的同時建立線性四叉樹編碼[6],然后發(fā)布成符合標(biāo)準(zhǔn)OGC WMTS服務(wù)規(guī)范的地圖服務(wù)。根據(jù)這個規(guī)范定義的標(biāo)準(zhǔn)接口,可以獲取任意位置的地圖瓦片。
圖2 瓦片金字塔模型[6]
1.3 瓦片索引轉(zhuǎn)換
瓦片在空間上的組織方式表示為行列號,以左上角為編號原點,定義為(0,0),即行號為0,列號為0,然后行列坐標(biāo)軸分別向右和向下延伸。在標(biāo)準(zhǔn)OGC的WMTS服務(wù)規(guī)范中,提供了獲取瓦片的GetTile接口,它需要2個基本參數(shù),即行號和列號,可以根據(jù)地圖分辨率和瓦片像素大小計算特定地理范圍所對應(yīng)的瓦片行列號。首先,根據(jù)瓦片地圖服務(wù)元數(shù)據(jù)提供的當(dāng)前輸出比例尺的地圖分辨率,可以計算出一個切片像素大小 (切片像素大小一般為256×256) 所代表的地理范圍,然后通過地圖范圍和用戶選取的地理范圍,計算出對應(yīng)的切片坐標(biāo)范圍。計算公式如下:
picHWDegree = Resolution * picHW
左下點列號=(ExtentXMIN + FullExtentXMAX)/ picHWDegree-1
右上點列號=(ExtentXMAX + FullExtentXMAX)/picHWDegree-1
左下點行號=(FullExtentYMAX - ExtentYMIN)/ picHWDegree-1
右上點行號=(FullExtentYMAX - ExtentYMAX)/picHWDegree-1
其中,Resolution為地圖分辨率;picHW為切片像素長寬;picHWDegree為切片像素大小對應(yīng)的地理坐標(biāo) 范 圍;ExtentXMIN、ExtentXMAX、ExtentYMIN、ExtentYMAX為用戶選取范圍的最小x坐標(biāo)、最大x坐標(biāo)、最小y坐標(biāo)、最大y坐標(biāo);FullExtentXMAX、FullExtentXMAX、FullExtentYMAX、FullExtentYMAX為地圖范圍的最小x坐標(biāo)、最大x坐標(biāo)、最小y坐標(biāo)、最大y坐標(biāo)。
1.4 疊加偏移
考慮到算法的一般性原則,采取所有疊加圖和要素添加到專題圖后再進(jìn)行裁剪的方法。在將非底圖地圖服務(wù)數(shù)據(jù)添加到底圖上時,需要計算X和Y軸的偏移量。如果疊加的是WMS服務(wù)或MapServer服務(wù),那么可以輸出一張與用戶選取范圍相同的圖片,這樣只需要考慮左上角的偏移量。WMS或MapServer在ArcGIS Server中,默認(rèn)輸出最大像素大小為2 048×2 048的圖片,當(dāng)輸出范圍超過這個像素范圍時,這種情況與輸出的瓦片形式的疊加圖類似,需要先拼接選擇范圍內(nèi)的所有圖片再進(jìn)行疊加。左上角偏移像素的計算公式如下:
offsetX =(ExtentXMIN/picHWDegree%1)*picHW
offsetY =(1-( ExtentYMAX/picHWDegree%1))* picHW
1.5 輔助要素的繪制
圖例是地圖上表示地理事物的符號,它有助于用戶更方便地使用地圖、理解地圖內(nèi)容。圖例包含標(biāo)題、圖層名、地圖符號及其所代表的值、值范圍或意義,一般放置在一側(cè)或一角。圖例的布局按左對齊的方式進(jìn)行排版,放置在右下角,圖例繪制流程如下:
1)根據(jù)圖例內(nèi)容、間距以及排列方式計算適應(yīng)的圖例畫布的高度和寬度。
2)通過專題地圖的總長寬和圖例畫布,計算畫布距離左邊界和上邊界的間距,在地圖右下角繪制圖例的矩形畫布。
3)圖例名稱水平居中繪制,因此需要根據(jù)名稱字體樣式和字符長度計算圖例名所占空間的高度和寬度,然后根據(jù)上一步計算的畫布寬度,得到水平居中的繪制起點。
4) 按一定的行間距換行,左對齊繪制圖層名稱。
5)按一定的行間距換行,繪制圖層符號以及符號注釋文本。
6)按3)和4)的步驟循環(huán)繪制出所有圖層的圖例。
PmGSTd1 cDNA全長為977 bp,ORF為720 bp,5′端非編碼區(qū) 166 bp,3′端非編碼區(qū) 78 bp(圖 1)。該基因編碼 240個氨基酸,N端 1-18號氨基酸(MKHSLALLAIAFLQTAIA)為信號肽(圖1雙劃線部分),可以推測其為 1個分泌蛋白;另外,3′端存在一個可能的AATAAA加尾信號(圖1下劃線部分)。PmGSTd1編碼氨基酸的理化性質(zhì)如表 1所示,PmGSTd1編碼240個氨基酸,分子質(zhì)量為27.28 kD;該蛋白呈弱疏水性,結(jié)構(gòu)穩(wěn)定;等電點為8.41,說明此蛋白在pH=8.41的溶液中最不穩(wěn)定,溶解度最小。
1.6 拼接、裁剪、疊加的實現(xiàn)
切片或矢量圖片的拼接、疊加、裁剪關(guān)鍵在于計算偏移像素,拼接的偏移是根據(jù)繪制的切片行列號計算得到的,疊加計算按§1.4中所述思路,裁剪的偏移是要計算左上角和右下角的偏移像素,并根據(jù)選取范圍和§1.4中的計算思路計算得到。本研究采用GDI+進(jìn)行實現(xiàn),使用到的關(guān)鍵類包括System.Drawing.Bitmap、System.Drawing.Image和 System.Drawing.Graphics,前者封裝了一個位圖,Image類保存切片或矢量圖片;后者封裝了一個繪圖圖面,它提供了繪圖的主要方法。以下是實現(xiàn)拼接的示例代碼:
//創(chuàng)建位圖
Bitmap bitmap = new Bitmap(width, height);
//在位圖中創(chuàng)建繪圖圖面
Graphics g = Graphics.FromImage(bitmap);
//設(shè)置繪圖參數(shù)
g.CompositingQuality = CompositingQuality. HighQuality;
g.InterpolationMode= InterpolationMode. HighQualityBicubic;
g.SmoothingMode = SmoothingMode.HighQuality;
g.Clear(Color.White);
//獲取一個切片,并根據(jù),偏移量和切片長度和寬度,繪制到位圖上
//url服務(wù)地址,row,col,是請求的行列號
Image tile = getImage(string.Format(url, row, col))
g.DrawImage(tile,new Rectangle(tileOffsetX,tileOffse tY,picWidth, picWidth));
其中,tileOffsetX=tileOffsetY=當(dāng)前拼接的切片所在畫布中的行列數(shù)×picWidth。Width和Height為畫布的長和寬,是將選取的地理范圍轉(zhuǎn)換成像素得到的,為一個切片像素大小的整數(shù)倍。
本示例調(diào)用了天地圖山東的WMTS服務(wù)和系統(tǒng)在ArcGIS Server中發(fā)布的Map Services服務(wù),通過多源數(shù)據(jù)疊加融合生成一幅標(biāo)志點專題地圖,各種數(shù)據(jù)源的資源訪問均使用Rest訪問接口實現(xiàn),它暴露的所有資源和操作都可以通過每個GIS服務(wù)的端點獲得[7]。WMTS的REST接口如下:
string url =”http://www.sdmap.gov.cn/tileservice/{0}?
SERVICE=WMTS&VERSION=1.0&username=test 123&password=test123&REQUEST=GetTile&LAYER=0 &STYLE=default&FORMAT=mage/png&TILEMATRIX SET=sss&TILEMATRIX={1}&TILEROW={2}&TILEC OL={3}";
其中,{0}為地圖類型變量;{1}為比例尺;{2}和{3}分別為行列號變量。調(diào)用以下代碼獲取切片數(shù)據(jù):
HttpWebRequest req=(HttpWebRequest)WebRequest. Create(url);
HttpWebResponse resp = (HttpWebResponse)req. GetResponse();
Stream stream = resp.GetResponseStream();
return System.Drawing.Image.FromStream(stream);
Map Services服務(wù)的REST接口與之類似,但是需要調(diào)用服務(wù)的Export操作接口,并調(diào)用以上代碼獲取圖片數(shù)據(jù)。圖3為本項目效果圖,可控制是否輸出圖例。
圖3 生成的專題圖
以天地圖山東地圖服務(wù)為背景底圖,以項目的業(yè)務(wù)數(shù)據(jù)為專題數(shù)據(jù)進(jìn)行處理,可根據(jù)用戶需要,依據(jù)標(biāo)準(zhǔn)OGC服務(wù)接口,生成特定范圍和比例尺、用于特定使用場合的標(biāo)準(zhǔn)專題地圖。結(jié)果表明,本方法可以較合理地生成標(biāo)準(zhǔn)專題地圖。
[1] 王曉東,劉慧平,喬瑜.利用Bing Maps地圖切片實現(xiàn)網(wǎng)絡(luò)地圖服務(wù)[J].國土資源遙感, 2010(2):122-127
[2] 劉亞東,李青元,譚海,等.開源庫GDAL及其在影像拼接中的應(yīng)用[J].數(shù)字技術(shù)與應(yīng)用,2010(2):88-89
[3] 韋勝.ArcEngine環(huán)境下實現(xiàn)瓦片地圖的訪問與拼接[J].武漢大學(xué)學(xué)報:信息科學(xué)版,2012(6):737-740
[4] 王社偉,朱如鵬.Windows操作系統(tǒng)中的GDI坐標(biāo)系統(tǒng)[J].計算機與現(xiàn)代化,2003(4):13-15
[5] 車森,劉海硯,劉輝,等.GDI+在電子地圖可視化中的應(yīng)用[J].測繪科學(xué),2008(1):226-228
[6] 蘇旭明,譚建成. WebGIS中瓦片地圖關(guān)鍵技術(shù)研究[J].北京測繪,2012(2):9-12
[7] 許卓明,栗明,董逸生.基于RPC和基于REST的Web服務(wù)交互模型比較分析[J].計算機工程,2003,29(20):6-8
P208
B
1672-4623(2015)04-0168-03
10.3969/j.issn.1672-4623.2015.04.060
徐亮,碩士,工程師,研究方向為數(shù)據(jù)庫技術(shù)和GIS應(yīng)用。
2015-01-22。
項目來源:福建省測繪地理信息科技創(chuàng)新基金資助項目(201309)。