謝年,呂楠
(重慶數(shù)字城市科技有限公司,重慶 400020)
目前的WebGIS通常會(huì)使用現(xiàn)時(shí)比較流行的地圖緩存技術(shù)以提高地圖的訪問(wèn)速度,如流行的GoogleMap和MapABC正是使用該技術(shù)。ArcGIS Server 9.2引入地圖服務(wù)緩存機(jī)制,基于地圖服務(wù)生成多比例尺分塊的地圖影像圖片,從而顯著提高地圖服務(wù)的執(zhí)行效率。這種機(jī)制允許用戶直接從緩存影像中快速取出地圖圖片,而不是和以往傳統(tǒng)模式一樣,向服務(wù)器發(fā)出請(qǐng)求,然后再動(dòng)態(tài)生成地圖影像。ArcGIS Server的緩存圖片構(gòu)建好之后,進(jìn)行部署的時(shí)候,如果只需要某個(gè)區(qū)域內(nèi)的緩存圖片,通常需要單獨(dú)針對(duì)該區(qū)域重新構(gòu)建緩存圖片,需要花費(fèi)大量的時(shí)間,因此需要一種可以從已經(jīng)建立好的緩存圖片中提取目標(biāo)范圍內(nèi)緩存圖片的方法。本文基于ArcGIS Server構(gòu)建緩存機(jī)制的原理,利用VB和ArcObject開(kāi)發(fā)一個(gè)自動(dòng)化工具,達(dá)到提取目標(biāo)范圍內(nèi)緩存圖片的目的。
在ArcGIS Server創(chuàng)建緩存后,相關(guān)參數(shù)會(huì)儲(chǔ)存在緩存圖片目錄下的conf.xml配置文件中。例如:
(1)比例尺
其中包含比例尺大小,比例尺等級(jí),當(dāng)前比例尺圖片像素精度。比例尺等級(jí)指的是創(chuàng)建緩存時(shí)分了多少個(gè)等級(jí),在配置文件中以LevelID進(jìn)行表示,第一級(jí)表示為0,后面的等級(jí)依次遞增。比例尺大小則表示的是ArcGIS Server分級(jí)創(chuàng)建緩存時(shí)所對(duì)應(yīng)的地圖顯示比例尺大小,在配置文件中以Scale進(jìn)行表示。像素精度表示的是在當(dāng)前等級(jí)構(gòu)建的緩存圖片一個(gè)像素所代表的實(shí)際距離,在配置文件中以Resolution表示。
(2)原點(diǎn)
指的是緩存圖片結(jié)構(gòu)格網(wǎng)的左上角坐標(biāo),在配置文件中以TileOrigin中的X,Y表示。
(3)圖片高度和寬度
指的是緩存圖片的高度和寬度,在配置文件中分別以TileRows和TileCols表示。
(4)圖片格式
指的是緩存圖片的存儲(chǔ)格式,有png和jpeg兩種,在配置文件中以CacheTileFormat進(jìn)行表示。
ArcGIS Server緩存由目錄和配置文件組成,并根據(jù)一定的規(guī)則命名。設(shè)定一個(gè)原點(diǎn)作為地圖切片的起始點(diǎn),以一定的規(guī)格把地圖切割成若干的小圖片,并以科學(xué)命名的方式存儲(chǔ)到計(jì)算機(jī)磁盤(pán),如圖1所示。命名的規(guī)則是各比例尺的圖片放在名為L(zhǎng)XX的文件夾里面,第一個(gè)比例尺的文件夾名為L(zhǎng)00,第二個(gè)比例尺的問(wèn)L01,如此類推。比例尺文件夾目錄下還會(huì)有R開(kāi)頭的文件夾,當(dāng)前比例尺的緩存圖片每一行對(duì)應(yīng)一個(gè)文件夾。R文件夾的命名方式是把行序列轉(zhuǎn)為8位16進(jìn)制,不足的在左邊補(bǔ)0。R文件夾里面保存的就是緩存圖片,緩存圖片的命名方式跟R文件夾的命名方式相似,以字母C開(kāi)頭,后面則是緩存圖片在該行的列序號(hào),將列序列轉(zhuǎn)為8位16進(jìn)制,不足的在左邊補(bǔ)0。
圖1 緩存結(jié)構(gòu)
通過(guò)獲取配置文件conf.xml中相關(guān)參數(shù),根據(jù)緩存切片規(guī)則,可以計(jì)算出緩存范圍內(nèi)任意一點(diǎn)所在的行和列。例如需計(jì)算某比例尺下坐標(biāo)(x,y)所在的行數(shù)和行數(shù),公式如下:
行數(shù)=Int((原點(diǎn)y-y)/(圖片高度*像素精度))+1
列數(shù)=Int((x-原點(diǎn)x)/(圖片寬度*像素精度))+1
然后將行數(shù)和列數(shù)轉(zhuǎn)化為文件的存儲(chǔ)路徑,從而可以獲得該點(diǎn)所對(duì)應(yīng)的緩存圖片。
本文的思路是通過(guò)在VB中使用xml解釋器來(lái)獲取conf.xml中相關(guān)參數(shù),xml解釋器是封裝在msxml.dll的動(dòng)態(tài)鏈接庫(kù)中。需讀取的參數(shù)包括原點(diǎn)坐標(biāo)、圖片格式、圖片大小以及各個(gè)比例尺下的圖片像素精度。然后根據(jù)ArcGIS Server緩存圖片的切片規(guī)則和命名原理,結(jié)合ArcObject中的各種接口函數(shù),可以計(jì)算出各個(gè)比例尺下每張緩存圖片的坐標(biāo)范圍,然后與目標(biāo)區(qū)域進(jìn)行空間運(yùn)算,如果相交,則滿足條件,將緩存圖片提取出來(lái)。
通過(guò)圖層對(duì)象MapControl中ActiveView屬性支持的Extent接口可以獲取目標(biāo)區(qū)域的范圍;通過(guò)IPoint-Collection接口可以添加緩存圖片的四個(gè)角點(diǎn)坐標(biāo),然后轉(zhuǎn)換成一個(gè)Polygon對(duì)象;通過(guò)構(gòu)建空間查詢ISpatialFilter對(duì)象,可以計(jì)算緩存圖片范圍與目標(biāo)區(qū)域的空間關(guān)系。部分代碼如下:
本實(shí)例以從構(gòu)建好的重慶市主城區(qū)緩存圖片中提取渝北區(qū)范圍內(nèi)的緩存圖片為例,并結(jié)合上述方面進(jìn)行程序設(shè)計(jì),界面如圖2所示。輸入緩存圖片的存放路徑以及相應(yīng)的配置文件,輸入提取緩存圖片的范圍,提取緩存圖片的輸出路徑以及提取比例尺。然后提取緩存圖片。在ArcMap中調(diào)用ArcGIS Server服務(wù),分別加載提取前后的緩存圖片,并進(jìn)行對(duì)比顯示,如圖3所示,提取成果合格。
圖2 設(shè)計(jì)界面
圖3 提取前后對(duì)比
本文通過(guò)對(duì)ArcGIS Server緩存切片原理的分析,利用VB和ArcObject設(shè)計(jì)開(kāi)發(fā)了可以提取目標(biāo)區(qū)域內(nèi)的緩存圖片的自動(dòng)化工具。在實(shí)際應(yīng)用中對(duì)于緩存數(shù)據(jù)分發(fā)、局部更新等工作具有積極的意義,提高了已有緩存圖片數(shù)據(jù)的利用率。
[1]王艷麗,尹柯,張連堂.基于ArcGIS Server的地圖緩存技術(shù)研究[J].河南大學(xué)學(xué)報(bào)(自然科學(xué)版),2009(6):637~640
[2]李學(xué)俊,王尊亮,李曉歡等.基于地圖切片預(yù)取的WEBGIS系統(tǒng)[J].計(jì)算機(jī)應(yīng)用研究,2009(10):3849~3851
[3]李本新,易增林,萬(wàn)敏.網(wǎng)絡(luò)地理信息系統(tǒng)(WebGIS)的研究與應(yīng)用[J].測(cè)繪與空間地理信息,2008(2):113~115
[4]楊宏鵬,王阿川,王妍瑋.GIS二次開(kāi)發(fā)方法與實(shí)現(xiàn)[J].信息技術(shù),2008(8):65~67
[5]張涌逸.基于XML的VB數(shù)據(jù)交換技術(shù)及其應(yīng)用[J].電腦知識(shí)與技術(shù)(學(xué)術(shù)交流),2006(4):108