徐紅波,郝立貞
(1. 浙江省地理信息中心,浙江 杭州 310012; 2. 浙江省測(cè)繪大隊(duì),浙江 杭州 310030)
目前,為提高服務(wù)器響應(yīng)速度和改善用戶體驗(yàn),人們?cè)赪ebGIS應(yīng)用中普遍采用地圖瓦片技術(shù),即按照一定的數(shù)學(xué)規(guī)則,把地圖切成一定規(guī)格的小圖片集保存到服務(wù)器上。當(dāng)用戶通過客戶端瀏覽器訪問地圖服務(wù)時(shí),不是由服務(wù)器實(shí)時(shí)創(chuàng)建一幅圖片來送到客戶端,而是服務(wù)器直接返回當(dāng)前地圖坐標(biāo)區(qū)域所對(duì)應(yīng)的小瓦片后在客戶端拼接成地圖,這樣就可以通過降低服務(wù)器負(fù)擔(dān)來極大提升地圖瀏覽的速度[1-4]。由于地圖瓦片為靜態(tài)圖片數(shù)據(jù),一般不能修改其中的地圖顯示樣式,因此在生成地圖瓦片前,需要將地圖數(shù)據(jù)進(jìn)行合適的符號(hào)化設(shè)置,同時(shí)要根據(jù)地圖數(shù)據(jù)的特征,考慮在不同的顯示比例尺下顯示一定數(shù)目的要素,做到?jīng)]有嚴(yán)重的要素壓蓋、重疊現(xiàn)象。為了減少要素壓蓋、重疊現(xiàn)象,通常根據(jù)圖層中要素的分類代碼、等級(jí)、類型、級(jí)別、年份等屬性分層過濾要素,使得在不同的顯示比例尺下顯示不同數(shù)目要素,顯示比例尺小時(shí)顯示要素?cái)?shù)目少,隨著顯示比例尺的增大,顯示要素?cái)?shù)目逐漸增多。但是通過屬性進(jìn)行分層過濾在圖層要素?cái)?shù)目很大、要素空間分布不均勻等情況下常存在不同顯示比例尺間過渡不自然、要素存在局部聚集等現(xiàn)象,據(jù)此符號(hào)化設(shè)置生成的地圖瓦片數(shù)據(jù)在地圖縮放過程中有要素突然變多、要素疏密不均之感。
為提高針對(duì)要素?cái)?shù)目多、空間分布不均的地圖數(shù)據(jù)的瓦片效果,本文提出基于四叉樹編碼的要素分級(jí)顯示過濾技術(shù),即通過對(duì)地圖數(shù)據(jù)要素根據(jù)其空間坐標(biāo)生成不同長(zhǎng)度的四叉樹編碼,在不同的顯示比例尺下顯示不同長(zhǎng)度的四叉樹編碼的對(duì)應(yīng)要素,從而實(shí)現(xiàn)地圖數(shù)據(jù)的縮放效果自然流暢、顯示要素分布均勻。
空間數(shù)據(jù)的四叉樹編碼是將二維區(qū)域按照4個(gè)象限進(jìn)行分割,并為分布于每個(gè)象限中的空間要素賦編碼的過程。每個(gè)象限區(qū)域可以繼續(xù)分割為4個(gè)子象限,依次類推,直至象限內(nèi)只有一個(gè)空間要素為止。其編碼方式如圖1所示。
圖1 四叉樹編碼原理
根據(jù)該原理可以將空間數(shù)據(jù)賦指定級(jí)別的四叉樹編碼,編碼的長(zhǎng)度代表編碼的級(jí)別,如“3241”代表四級(jí)四叉樹編碼。
基于四叉樹編碼的要素分級(jí)顯示過濾通過對(duì)不同要素賦不同長(zhǎng)度的四叉樹編碼,在不同的顯示比例尺下顯示不同長(zhǎng)度四叉樹編碼的要素。
根據(jù)分級(jí)顯示的需要,確定四叉樹編碼的級(jí)別L,這里的級(jí)別L可能比實(shí)際要素最長(zhǎng)的四叉樹編碼級(jí)別少。級(jí)別L根據(jù)需要設(shè)置。一般的,四叉樹編碼到第10級(jí)即可較好地實(shí)現(xiàn)分級(jí)過濾顯示。確定編碼級(jí)別L后,為每個(gè)要素計(jì)算其對(duì)應(yīng)的L級(jí)別的四叉樹編碼。
(1) 計(jì)算L級(jí)四叉樹編碼
依次判斷每個(gè)空間要素對(duì)應(yīng)L級(jí)四叉樹編碼,并將其記錄在要素四叉樹編碼字段SCSCODE中。L級(jí)四叉樹編碼由L個(gè)數(shù)字組成,10級(jí)四叉樹編碼形如“2412314223”。
(2) 四叉樹編碼過濾
每個(gè)要素生成四叉樹編碼后需對(duì)其進(jìn)行過濾,即在一個(gè)級(jí)別的四叉樹編碼中,均保留其中編碼不重復(fù)的要素,重復(fù)編碼要素保留其一。由于四叉樹在空間上將區(qū)域平均分布為4L個(gè)子區(qū)域,每個(gè)子區(qū)域最多保留一個(gè)要素,實(shí)現(xiàn)空間上過濾出的要素平均分布。四叉樹編碼過濾時(shí)自下而上進(jìn)行,即從最長(zhǎng)一級(jí)(L級(jí))四叉樹編碼開始過濾,直到第1級(jí),從而使圖層具有不同層次要素,實(shí)現(xiàn)要素在空間分布上的分級(jí)。建立L個(gè)四叉樹編碼字段SCSCODE1、SCSCODE2、…、SCSCODEL,用于存儲(chǔ)經(jīng)過過濾后的四叉樹編碼。由于級(jí)別L可能比實(shí)際要素最長(zhǎng)的四叉樹編碼級(jí)別要少,對(duì)于L級(jí)的四叉樹編碼,可能存在多個(gè)要素對(duì)應(yīng)同一個(gè)四叉樹編碼的情況,此時(shí),需要從相同的四叉樹編碼要素中保留一個(gè)要素編碼,保存于SCSCODEL字段中;對(duì)于不重復(fù)的L級(jí)四叉樹編碼,均保存于SCSCODEL字段中,因此具有L級(jí)四叉樹編碼的要素個(gè)數(shù)最多為4L。對(duì)于L-1級(jí)四叉樹編碼,過濾方法與L級(jí)類似,如果SCSCODEL字段中保存的L級(jí)編碼中有重復(fù)的L-1級(jí)編碼,則保留其中一個(gè)要素的L-1級(jí)編碼,保存于相應(yīng)要素的SCSCODEL-1字段中;對(duì)于不重復(fù)的L-1級(jí)四叉樹編碼,均保存于SCSCODEL-1字段中,因此具有L-1級(jí)四叉樹編碼的要素個(gè)數(shù)最多為4L-1。如2個(gè)要素的5級(jí)四叉樹編碼是“32412”和“32414”,進(jìn)行第4級(jí)四叉樹編碼過濾時(shí),這2個(gè)要素的四叉樹編碼重復(fù),均為“3214”,過濾是選擇其一即可。每一級(jí)四叉樹編碼過濾方法依次類推,直到最小一級(jí)。一般的,對(duì)于省級(jí)范圍的數(shù)據(jù),最小一級(jí)編碼到第3級(jí)即可滿足要求,不必過濾到第1級(jí)。
基于過濾后的要素四叉樹編碼,可在ArcMap中設(shè)置分層顯示效果。設(shè)四叉樹編碼過濾的最小一級(jí)為S級(jí),則將圖層在ArcMap中加載L-M+2次,如最小一級(jí)為3級(jí),則加載圖層L-1次。為每個(gè)圖層設(shè)置相同的符號(hào)和標(biāo)注樣式;為前L-2個(gè)圖層設(shè)置過濾條件,只顯示對(duì)應(yīng)級(jí)別四叉樹編碼過濾出的要素,即對(duì)應(yīng)四叉樹編碼過濾字段中有值的要素,如 “Not SCSCODEL IS Null And SCSCODEL〈〉”。根據(jù)每個(gè)圖層要素顯示的疏密程度,為其設(shè)置合適的顯示比例尺范圍。在設(shè)置圖層的顯示最小比例尺時(shí),要確保在該顯示比例尺下當(dāng)前圖層要素較充分地分布于顯示區(qū)域,同時(shí)要素符號(hào)和標(biāo)注不重疊。圖層的顯示最大比例尺由下一級(jí)圖層的顯示最小比例尺決定。設(shè)置顯示比例尺時(shí)要保證兩個(gè)相鄰顯示比例尺間要連續(xù)且無重疊,如前一級(jí)圖層的顯示比例尺范圍為1∶100 000~1∶500 000,則后一級(jí)圖層的顯示比例尺應(yīng)從1∶99 999開始。若從1∶100 000開始,會(huì)造成在1∶100 000顯示比例尺下兩個(gè)圖層同時(shí)顯示,即要素會(huì)重復(fù)、重疊顯示的問題。最小一級(jí)四叉樹編碼的圖層可不設(shè)置顯示最小比例尺,只設(shè)置顯示最大比例尺,以保證在所有顯示比例尺下均有要素顯示。最后一個(gè)圖層不設(shè)置過濾條件,而顯示所有要素。此時(shí)即可實(shí)現(xiàn)從較小顯示比例尺開始,隨著顯示比例尺的增大,逐漸顯示更多的要素,但每個(gè)顯示比例尺下要素符號(hào)和標(biāo)注均不重疊、疏密有致、過渡自然。由于四叉樹編碼過濾自下而上進(jìn)行,即在下一級(jí)過濾出的要素中繼續(xù)過濾上一級(jí)的要素,從而保證了在較小顯示比例尺下顯示的要素在其后較大顯示比例尺下均顯示。
本文提出的方法在浙江省交換平臺(tái)專題數(shù)據(jù)庫(kù)中的專題數(shù)據(jù)生成地圖瓦片時(shí)得到了充分應(yīng)用。在浙江省交換平臺(tái)中建有用于30多個(gè)省級(jí)廳局單位共建共享的專題數(shù)據(jù)庫(kù)[6],該數(shù)據(jù)庫(kù)中存在許多要素?cái)?shù)目多、空間分布不均勻的專題圖層,如郵政局的郵政營(yíng)業(yè)網(wǎng)點(diǎn)、民政廳的避災(zāi)安置場(chǎng)所、通信管理局的移動(dòng)營(yíng)業(yè)網(wǎng)點(diǎn)、文化廳的網(wǎng)吧場(chǎng)所等圖層。在為這些專題圖層制作地圖瓦片過程中均采用本文介紹的方法實(shí)現(xiàn)要素的分級(jí)顯示過濾,達(dá)到了較好的要素過濾效果。圖2—圖4為郵政營(yíng)業(yè)網(wǎng)點(diǎn)專題圖層要素分級(jí)顯示過濾后的效果。
圖2 要素分級(jí)顯示效果:全省范圍
圖3 要素分級(jí)顯示效果:地市范圍
圖4 要素分級(jí)顯示效果:區(qū)縣范圍
地圖瓦片技術(shù)大大提高了WebGIS的速度和效率,但其傳統(tǒng)的基于屬性的分層過濾方法不能較好地解決要素?cái)?shù)目多、分布不均的情況,本文提出的基于四叉樹編碼的要素分級(jí)顯示過濾技術(shù)可較好地實(shí)現(xiàn)要素的分層分級(jí)顯示,并在浙江省交換平臺(tái)專題數(shù)據(jù)庫(kù)的地圖瓦片生成實(shí)際應(yīng)用中驗(yàn)證了該方法的有效性。該方法對(duì)于點(diǎn)類型要素,可同時(shí)對(duì)圖形符號(hào)和標(biāo)注進(jìn)行過濾;對(duì)于線或面類型要素,由于其單個(gè)要素空間分布不規(guī)則,不適合對(duì)圖形符號(hào)進(jìn)行過濾,但若其要素?cái)?shù)目多,標(biāo)注重疊,可利用本文方法只針對(duì)其標(biāo)注進(jìn)行分層顯示過濾,也可實(shí)現(xiàn)較好的瓦片效果。在實(shí)際要素分層過濾過程中,可根據(jù)數(shù)據(jù)特征,在基于四叉樹編碼進(jìn)行要素分級(jí)顯示過濾基礎(chǔ)上,可結(jié)合要素的類別、等級(jí)等屬性過濾方法,實(shí)現(xiàn)能反映數(shù)據(jù)特征的分層顯示效果。
參考文獻(xiàn):
[1] 馬維峰,王曉蕊,高松峰,等.基于服務(wù)器動(dòng)態(tài)緩存和Ajax技術(shù)的WebGIS開發(fā)[J].測(cè)繪科學(xué),2008,33(5):204-205.
[2] 王強(qiáng).分布式WebGIS地圖緩存策略的應(yīng)用研究[J].軟件導(dǎo)刊,2008,7(5):16-18.
[3] 周沛. 智能交通系統(tǒng)中的瓦片地圖技術(shù)研究與應(yīng)用[D].上海: 同濟(jì)大學(xué),2008:7-49.
[4] 黃夢(mèng)龍.瓦片地圖技術(shù)在桌面端GIS中的應(yīng)用[J]. 地理空間信息,2011,9(4):149-151.
[5] 李德仁,肖志峰,朱欣焰,等.空間信息多級(jí)網(wǎng)格的劃分方法及編碼研究[J].測(cè)繪學(xué)報(bào),2006,35(1):52-70.
[6] 徐紅波. 談專題共享數(shù)據(jù)的整合與集成處理[J].浙江測(cè)繪,2012,111(2): 65-67.