洪 濤,譚仁春,李 寧
(昆明市測繪研究院,云南 昆明 650051)
Study on the Creating Tile Caches of ArcGIS Based on the Geo-spatial
Data from AutoCAD
HONG Tao,TAN Renchun,LI Ning
?
AutoCAD數(shù)據(jù)自動創(chuàng)建ArcGIS“地圖瓦片”服務的方法研究
洪濤,譚仁春,李寧
(昆明市測繪研究院,云南 昆明 650051)
Study on the Creating Tile Caches of ArcGIS Based on the Geo-spatial
Data from AutoCAD
HONG Tao,TAN Renchun,LI Ning
摘要:隨著AutoCAD在各行各業(yè)應用的普及及WebGIS應用需求的不斷擴大,將DWG等格式的地理空間數(shù)據(jù)處理成WebGIS常用的ArcGIS“地圖瓦片”服務已成為GIS開發(fā)及數(shù)據(jù)處理人員經(jīng)常遇到的一項任務。傳統(tǒng)的處理方式不僅過程復雜,需要花費大量的人力和物力,而且常常存在符號丟失等問題。本文根據(jù)ArcGIS“地圖瓦片”創(chuàng)建與文件存儲組織規(guī)則,通過AutoCAD二次開發(fā)語言ObjectARX進行了二次開發(fā),直接在AutoCAD下實現(xiàn)了“地圖瓦片”的創(chuàng)建,極大提高了AutoCAD格式的地理空間數(shù)據(jù)創(chuàng)建“地圖瓦片”服務的效率,節(jié)省了人力和物力。應用實踐表明,本文中的方法具有很高的應用價值。
關鍵詞:地圖瓦片;地圖緩存;ArcGIS;DWG數(shù)據(jù)
一、引言
隨著計算機網(wǎng)絡技術、GIS技術的快速發(fā)展,WebGIS已經(jīng)成為目前GIS系統(tǒng)的主要形式。傳統(tǒng)的WebGIS對于客戶端提交的請求,通常利用實時計算模式向客戶端反饋數(shù)據(jù),如在ArcIMS地圖發(fā)布平臺下,由客戶端提交地圖請求,通過ArcXML與服務器端通信,服務器端接收客戶端提交的各項參數(shù),實時計算生成客戶端用戶請求的圖形,再通過ArcXML反饋給客戶端[1]。但由于GIS中需要訪問或處理的地理空間數(shù)據(jù)通常是海量的,即使是采用目前的高速寬帶網(wǎng)絡,上述數(shù)據(jù)處理與傳輸方式也常常需要客戶每次對自己的“地圖平移”“地圖縮放”等操作請求等待較長甚至難以忍受的響應時間。數(shù)據(jù)傳輸與瀏覽速度較慢曾一度成了WebGIS推廣應用的重要瓶頸。
為了解決網(wǎng)絡環(huán)境下WebGIS訪問海量地理空間數(shù)據(jù)速度十分緩慢的問題,地圖緩存技術應運而生。地圖緩存技術(通俗的說法為“瓦片”技術),就是按照一定的數(shù)學規(guī)則,把地圖切成一定規(guī)格的小圖片集保存到服務器上。當用戶通過客戶端瀏覽器訪問地圖服務時,不是由服務器實時創(chuàng)建一幅圖片來送到客戶端,而是服務器直接返回當前地圖坐標區(qū)域所對應的小“瓦片”后在客戶端拼接成地圖,這樣就可以通過降低服務器負擔來極大提升地圖瀏覽的速度[2-3]。目前,越來越多的地圖服務網(wǎng)站(如Google Maps、Microsoft Live Map、Mapbar、SogouMap、MapABC 等)都采用了這種技術來提高地圖訪問的速度。ArcGIS“地圖瓦片”服務就是采用地圖緩存技術的一種空間數(shù)據(jù)服務方式,其支持的服務標準有WMS、WCS等。目前,它已成為WebGIS中最為常用的一種地圖服務形式。
AutoCAD以其功能強大、操作簡便等特點,早已成為國內(nèi)外各設計領域采用最為廣泛的一種圖形設計軟件。這也使得目前大量需要在WebGIS下發(fā)布共享的地理空間數(shù)據(jù)(如城市總規(guī)、控規(guī)、詳規(guī)、專項規(guī)劃等數(shù)據(jù))是以AutoCAD的DWG文件的形式存在。由于數(shù)據(jù)格式與符號化的差異,為了保證信息不丟失,目前,由DWG數(shù)據(jù)創(chuàng)建地圖服務需要進行復雜的數(shù)據(jù)格式轉換與符號化處理等工作,即需要先將DWG數(shù)據(jù)按圖層進行數(shù)據(jù)格式轉換,轉換成ArcGIS的標準數(shù)據(jù)格式,然后再對各個數(shù)據(jù)圖層進行符號化。當DWG數(shù)據(jù)量較大時,這種處理方式效率極低,而且還有可能存在信息丟失的可能。
為了解決AutoCAD形式的地理空間數(shù)據(jù)生成ArcGIS“地圖瓦片”服務所面臨的轉換處理較復雜的問題,本文基于AutoCAD二次開發(fā)語言ObjectARX進行二次開發(fā),實現(xiàn)AutoCAD下由地理空間數(shù)據(jù)自動創(chuàng)建ArcGIS“地圖瓦片”服務。實踐表明,本文中的方法無須進行數(shù)據(jù)格式轉換、數(shù)據(jù)規(guī)范化處理與復雜的符號化過程,可以由AutoCAD數(shù)據(jù)一步自動完成ArcGIS“地圖瓦片”服務的創(chuàng)建。
二、ArcGIS“地圖瓦片”創(chuàng)建與文件存儲組織規(guī)則
ArcGIS地圖“瓦片”創(chuàng)建與文件存儲組織規(guī)則為:無論哪一級ArcGIS地圖“瓦片”切片,每張小圖片都是長寬相同,且大小為2N像素的正方形網(wǎng)格;每一級切片都有一個相同的切片起始點(該起始點被簡稱TSO,即為圖1中的A點);由于每一級切圖比例尺不同,因此不同級別的瓦片對應的實地大小范圍不同;每一級切片都以TSO為起點,按照該級圖片對應的實地長寬進行行列編號,但地圖實際切片范圍為空間數(shù)據(jù)的最大范圍(切片原理如圖1所示);所有的切片文件都以文件的方式存儲,一個切片服務對應一個文件夾(簡稱“服務總文件夾”),文件夾以地圖服務名命名;“服務總文件夾”下存放一個子文件夾(簡稱“地圖文檔框架文件夾”),該文件夾命名與地圖服務對應的地圖文檔框架名一致;“地圖文檔框架文件夾”下存放一個命名為“_allayers” 的子文件夾和一個名為conf.xml的配置文件;conf.xml文件記錄該切片服務的切片信息,主要包括:切圖的起始點坐標、各級切片的比例尺、瓦片的圖片格式、瓦片大像素大小、地圖數(shù)據(jù)的空間參考系,如地圖投影、坐標系等[4-5]。

圖1 ArcGIS瓦片切片原理
“_allayers”文件夾下存放一系列子文件夾,每個子文件夾對應一級切片,每個子文件夾的命名為“LXX”,第1級切片對應的子文件夾為L00,第2級切片對應的子文件夾為L01,依次類推;每個LXX文件夾下還包含一系列子文件夾,每個子文件夾對應一行的切片,文件夾命名以“R”開頭,后面加上一個8位長度的數(shù)字字符串。該8位長的字符串是對應的瓦片行號的16進制數(shù)值。如果不足8位,左邊加0補齊,如第29行對應的子文件夾命名為R0000001d。每個R文件夾下存放該行切片的瓦片文件。每個瓦片文件以字母C開頭,后面加上一個8位長度的數(shù)字字符串。該8位長的字符串是對應的瓦片列號的16進制數(shù)值。如果不足8位,左邊加0補齊。如第26行第29列瓦片為“...R0000001aC0000001d.png”。地圖瓦片的數(shù)據(jù)組織與命名方式如圖2所示。

圖2 ArcGIS瓦片文件組織與命名方式
三、AutoCAD下自動創(chuàng)建ArcGIS“地圖瓦片”服務的方法
1. 主要實現(xiàn)原理與思路
本文提出的AutoCAD下地理空間數(shù)據(jù)自動創(chuàng)建ArcGIS“地圖瓦片”服務的方法主要基于AutoCAD二次開發(fā)語言ObjectARX進行二次開發(fā)來實現(xiàn)。其主要思路是:用戶首先指定創(chuàng)建地圖瓦片服務的坐標原點TSO(x0,y0)、切圖級數(shù)N及每一級的切圖比例尺(1∶M0)、圖片的大小L0×L0(單位為像素)、圖片的屏幕分辨率d0(單位DPI);然后基于ArcGIS“地圖瓦片”存儲組織規(guī)則,在AutoCAD下按照切圖比例尺從小到大的順序自動為每個級別建立一個瓦片文件夾,第1級文件夾命名L00,第2級文件夾命名L01,依次類推。計算每一個切圖級別下所有圖片的左下角坐標點Pl與右上角坐標點Pr,采用AutoCAD的圖片打印輸出功能,將(Pl,Pr)對應的矩形框范圍打印成小圖片,按照圖片所在的行列號及ArcGIS瓦片文件組織與命名方式進行命名。最后將生成的小圖片保存到其對應級別的緩存文件夾中即可。
如果切圖比例尺為1∶M0、每個圖片的大小L0×L0(單位為像素)、圖片的屏幕分辨率d0(單位DPI),則該切圖比例尺下,每個圖片對應的實地大小為L1×L1,L1(單位為m)為
L1=(0.025 4 M0·L0)/d0
則第i行第j(行列號從0開始編號)圖片的左下角點的坐標P1(X1,Y1)與右上角點的坐標P2(X2,Y2)分別為
式中,(x0,y0)為創(chuàng)建地圖瓦片服務的起始坐標原點TS0,如圖1的左上角點A。
2. 主要實現(xiàn)代碼
(1) 判斷當前待打印圖片范圍內(nèi)有無圖形要素
由于程序創(chuàng)建地圖瓦片是從點TS0開始的,為了提高地圖瓦片生成的效率,并減少空白圖片。當生成每個小瓦片時,需要判斷該瓦片范圍內(nèi)有無要素,如果沒有,就不生成,否則就生成。部分代碼如下:
ads_point pt1,pt2;
ads_name ssnamefilter;
long length;
pt1[X] = X1;pt1[Y] = Y1;
pt2[X] = X2;pt2[Y] = Y2;
acedSSGet(_T("C"),pt1,pt2,NULL,ssnamefilter);
acedSSLength(ssnamefilter,&length);
(2) 設置打印窗口
如果當前范圍內(nèi)有要素,則設置打印窗口,打印生成對應的小瓦片。
AcDbObjectId layoutId;
layoutId=pBTR->getLayoutId();
AcDbLayout*pLayout=NULL;
acdbOpenObject(pLayout,layoutId,AcDb::kForRead);
AcDbPlotSettingsValidator*pPSV;
pPSV=(AcDbPlotSettingsValidator*)acdbHostApplicationServices()->plotSettingsValidator();
AcDbPlotSettings *pPlotSettings;
pPlotSettings=newAcDbPlotSettings(pLayout->modelType());
pPlotSettings->copyFrom(pLayout);
……
pPSV->setPlotWindowArea(pPlotSettings,X1, Y1, X2, Y2);
pPSV->setPlotType(pPlotSettings,PlotType::kWindow);
pPSV->setPlotOrigin(pPlotSettings,X1, Y1);
(3) 驅動打印,生成小瓦片
AcPlPlotEngine*pEngine=NULL;
……
const TCHAR*szDocName=acDocManager->curDocument()->fileName();
pEngine->beginDocument(plotInfo, szDocName, NULL, 1, true, goalFile);
……
pEngine->beginPage(pageInfo, plotInfo, true);
pEngine->beginGenerateGraphics();
pEngine->endGenerateGraphics();
(4) 小瓦片命名保存
根據(jù)當前小瓦片所在的行列號,以及ArcGIS瓦片文件組織與命名方式對當前小瓦片進行命名。最后將生成的小瓦片保存到其對應級別的緩存文件夾中。
當所有級別的瓦片全部生成完畢后,就可以通過ArcGIS創(chuàng)建一個空的“地圖瓦片”服務,最后將AutoCAD下生成的地圖瓦片文件拷貝到ArcGIS Server緩存目錄下替換這個空的“地圖瓦片”緩存文件夾,這樣就實現(xiàn)了AutoCAD格式的地理空間數(shù)據(jù)自動創(chuàng)建ArcGIS“地圖瓦片”服務。
四、結束語
目前,在GIS開發(fā)及數(shù)據(jù)處理過程中,經(jīng)常需要將AutoCAD格式的地理空間數(shù)據(jù)處理成ArcGIS“地圖瓦片”服務。本文針對這一需求及傳統(tǒng)處理方式存在的問題,同時結合ArcGIS“地圖瓦片”創(chuàng)建與文件存儲組織規(guī)則,提出了在AutoCAD中直接由AutoCAD格式的地理空間數(shù)據(jù)創(chuàng)建“地圖瓦片”服務的方法。應用實踐表明,本文方法極大提高了AutoCAD格式的地理空間數(shù)據(jù)創(chuàng)建“地圖瓦片”服務的效率,節(jié)省了人力和物力,值得大力推廣。
參考文獻:
[1]李海亭,費立凡,彭清山,等.預生成思想在地理信息服務中的應用研究[J]. 測繪信息與工程,2009,34(1):31-32.
[2]王強.分布式WebGIS地圖緩存策略的應用研究[J].軟件導刊,2008(5):16-18.
[3]馬維峰,王曉蕊,高松峰,等.基于服務器動態(tài)緩存和Ajax技術的WebGIS開發(fā)[J].測繪科學,2008,33(5):204-205.
[4]郭明武,彭清山,李黎.ArcGIS Server中地圖瓦片實時在線局部更新方法研究[J]. 測繪通報,2012(2):35-38.
[5]ArcGIS Server大數(shù)據(jù)量地圖服務影像緩存建立方法初探[EB/OL].[2015-01-28].http:∥www.cnblogs.com/lovekitty/archive/2009/03/27/1423279.html.
[6]周婷婷.電子地圖局部更新方法研究[J]. 地理空間信息,2014,12(4):162-163.
[7]孫偉,李志慶,焦孟凱,等. 瓦片地圖動態(tài)緩存中間件的優(yōu)化設計及實現(xiàn)[J]. 測繪通報, 2014(1): 37-40.
[8]周沛.智能交通系統(tǒng)中的瓦片地圖技術研究與應用[D].上海:同濟大學, 2008.引文格式: 胡應龍,陳杰. NoSQL空間數(shù)據(jù)管理在省級水利數(shù)據(jù)共享服務平臺中的應用[J].測繪通報,2015(12):88-92.DOI:10.13474/j.cnki.11-2246.2015.387
作者簡介:洪濤(1971—),女,高級工程師,研究方向為地理信息系統(tǒng)。E-mail: 940857079@qq.com
收稿日期:2015-01-28
中圖分類號:P208
文獻標識碼:B
文章編號:0494-0911(2015)12-0085-03
引文格式: 洪濤,譚仁春,李寧. AutoCAD數(shù)據(jù)自動創(chuàng)建ArcGIS“地圖瓦片”服務的方法研究[J].測繪通報,2015(12):85-87.DOI:10.13474/j.cnki.11-2246.2015.386