謝年,呂楠
(重慶數字城市科技有限公司,重慶 400020)
目前的WebGIS通常會使用現時比較流行的地圖緩存技術以提高地圖的訪問速度,如流行的GoogleMap和MapABC正是使用該技術。ArcGIS Server 9.2引入地圖服務緩存機制,基于地圖服務生成多比例尺分塊的地圖影像圖片,從而顯著提高地圖服務的執行效率。這種機制允許用戶直接從緩存影像中快速取出地圖圖片,而不是和以往傳統模式一樣,向服務器發出請求,然后再動態生成地圖影像。ArcGIS Server的緩存圖片構建好之后,進行部署的時候,如果只需要某個區域內的緩存圖片,通常需要單獨針對該區域重新構建緩存圖片,需要花費大量的時間,因此需要一種可以從已經建立好的緩存圖片中提取目標范圍內緩存圖片的方法。本文基于ArcGIS Server構建緩存機制的原理,利用VB和ArcObject開發一個自動化工具,達到提取目標范圍內緩存圖片的目的。
在ArcGIS Server創建緩存后,相關參數會儲存在緩存圖片目錄下的conf.xml配置文件中。例如:


(1)比例尺
其中包含比例尺大小,比例尺等級,當前比例尺圖片像素精度。比例尺等級指的是創建緩存時分了多少個等級,在配置文件中以LevelID進行表示,第一級表示為0,后面的等級依次遞增。比例尺大小則表示的是ArcGIS Server分級創建緩存時所對應的地圖顯示比例尺大小,在配置文件中以Scale進行表示。像素精度表示的是在當前等級構建的緩存圖片一個像素所代表的實際距離,在配置文件中以Resolution表示。
(2)原點
指的是緩存圖片結構格網的左上角坐標,在配置文件中以TileOrigin中的X,Y表示。
(3)圖片高度和寬度
指的是緩存圖片的高度和寬度,在配置文件中分別以TileRows和TileCols表示。
(4)圖片格式
指的是緩存圖片的存儲格式,有png和jpeg兩種,在配置文件中以CacheTileFormat進行表示。
ArcGIS Server緩存由目錄和配置文件組成,并根據一定的規則命名。設定一個原點作為地圖切片的起始點,以一定的規格把地圖切割成若干的小圖片,并以科學命名的方式存儲到計算機磁盤,如圖1所示。命名的規則是各比例尺的圖片放在名為LXX的文件夾里面,第一個比例尺的文件夾名為L00,第二個比例尺的問L01,如此類推。比例尺文件夾目錄下還會有R開頭的文件夾,當前比例尺的緩存圖片每一行對應一個文件夾。R文件夾的命名方式是把行序列轉為8位16進制,不足的在左邊補0。R文件夾里面保存的就是緩存圖片,緩存圖片的命名方式跟R文件夾的命名方式相似,以字母C開頭,后面則是緩存圖片在該行的列序號,將列序列轉為8位16進制,不足的在左邊補0。

圖1 緩存結構
通過獲取配置文件conf.xml中相關參數,根據緩存切片規則,可以計算出緩存范圍內任意一點所在的行和列。例如需計算某比例尺下坐標(x,y)所在的行數和行數,公式如下:
行數=Int((原點y-y)/(圖片高度*像素精度))+1
列數=Int((x-原點x)/(圖片寬度*像素精度))+1
然后將行數和列數轉化為文件的存儲路徑,從而可以獲得該點所對應的緩存圖片。
本文的思路是通過在VB中使用xml解釋器來獲取conf.xml中相關參數,xml解釋器是封裝在msxml.dll的動態鏈接庫中。需讀取的參數包括原點坐標、圖片格式、圖片大小以及各個比例尺下的圖片像素精度。然后根據ArcGIS Server緩存圖片的切片規則和命名原理,結合ArcObject中的各種接口函數,可以計算出各個比例尺下每張緩存圖片的坐標范圍,然后與目標區域進行空間運算,如果相交,則滿足條件,將緩存圖片提取出來。
通過圖層對象MapControl中ActiveView屬性支持的Extent接口可以獲取目標區域的范圍;通過IPoint-Collection接口可以添加緩存圖片的四個角點坐標,然后轉換成一個Polygon對象;通過構建空間查詢ISpatialFilter對象,可以計算緩存圖片范圍與目標區域的空間關系。部分代碼如下:



本實例以從構建好的重慶市主城區緩存圖片中提取渝北區范圍內的緩存圖片為例,并結合上述方面進行程序設計,界面如圖2所示。輸入緩存圖片的存放路徑以及相應的配置文件,輸入提取緩存圖片的范圍,提取緩存圖片的輸出路徑以及提取比例尺。然后提取緩存圖片。在ArcMap中調用ArcGIS Server服務,分別加載提取前后的緩存圖片,并進行對比顯示,如圖3所示,提取成果合格。

圖2 設計界面

圖3 提取前后對比
本文通過對ArcGIS Server緩存切片原理的分析,利用VB和ArcObject設計開發了可以提取目標區域內的緩存圖片的自動化工具。在實際應用中對于緩存數據分發、局部更新等工作具有積極的意義,提高了已有緩存圖片數據的利用率。
[1]王艷麗,尹柯,張連堂.基于ArcGIS Server的地圖緩存技術研究[J].河南大學學報(自然科學版),2009(6):637~640
[2]李學俊,王尊亮,李曉歡等.基于地圖切片預取的WEBGIS系統[J].計算機應用研究,2009(10):3849~3851
[3]李本新,易增林,萬敏.網絡地理信息系統(WebGIS)的研究與應用[J].測繪與空間地理信息,2008(2):113~115
[4]楊宏鵬,王阿川,王妍瑋.GIS二次開發方法與實現[J].信息技術,2008(8):65~67
[5]張涌逸.基于XML的VB數據交換技術及其應用[J].電腦知識與技術(學術交流),2006(4):108