任學申 張月香
(山東正元地球物理信息技術(shù)有限公司,山東濟南 250101)
基于ArcEngine的CAD數(shù)據(jù)與ArcGIS數(shù)據(jù)互轉(zhuǎn)
任學申 張月香
(山東正元地球物理信息技術(shù)有限公司,山東濟南 250101)
AutoCAD和ArcGIS兩種軟件在數(shù)據(jù)處理上各有其優(yōu)點,為了充分利用這兩種軟件的數(shù)據(jù),降低數(shù)據(jù)采集的費用,實現(xiàn)數(shù)據(jù)共享,以標準CASS的基礎(chǔ)地形圖為例,對AutoCAD數(shù)據(jù)與ArcGIS數(shù)據(jù)的無缺失相互轉(zhuǎn)換進行探討。
ArcEngine CASS ArcGIS 相互轉(zhuǎn)換
ArcGIS有強大的數(shù)據(jù)分析、數(shù)據(jù)管理等功能,在建立空間數(shù)據(jù)庫方面有其得天獨厚的優(yōu)勢,但ArcGIS也具有圖層疊加不便、屏幕刷新緩慢、繪圖功能不足等缺點。AutoCAD具有強大的繪圖功能和處理矢量圖形的能力,大部分地形圖采用了AutoCAD為制圖平臺,不過,其處理數(shù)據(jù)間的拓撲關(guān)系較為簡單,處理對象屬性方面及空間分析功能欠缺。因此,為了使ArcGIS和AutoCAD軟件平臺發(fā)揮其最大的優(yōu)點,進行CAD數(shù)據(jù)與GIS數(shù)據(jù)相互轉(zhuǎn)換方法的研究具有重要現(xiàn)實意義。
AutoCAD數(shù)據(jù)和ArcGIS數(shù)據(jù)在數(shù)據(jù)模型方面存在很大差異,兩種軟件描述數(shù)據(jù)的方式不同。傳統(tǒng)的數(shù)據(jù)轉(zhuǎn)換方法只考慮如何把AutoCAD數(shù)據(jù)轉(zhuǎn)換為ArcGIS數(shù)據(jù),而沒有考慮在轉(zhuǎn)換之后的ArcGIS數(shù)據(jù)如何再轉(zhuǎn)為CAD數(shù)據(jù),使轉(zhuǎn)換之后的CAD數(shù)據(jù)與原始CAD數(shù)據(jù)圖形屬性無丟失。本文探討標準CASS的基礎(chǔ)地形圖與 GIS數(shù)據(jù)相互轉(zhuǎn)換的邏輯組織及解決方案。
1.1 CAD數(shù)據(jù)格式
在AutoCAD數(shù)據(jù)中,包含了多種類型的圖形對象,包括:點、線段、折線、文字等,其中點、線為基本元素,其他的是由基本元素組合形成的復雜元素,這些元素都是矢量形式的,即由一組或多組X、Y、Z坐標確定圖形元素的幾何位置和形狀。在CAD的一個圖層上可以存放多種類型的圖形對象,而且每個圖形對象都可以設(shè)置獨有的顏色、線形、樣式等。
DXF 是Autodesk公司開發(fā)的用于AutoCAD與其他軟件之間進行CAD數(shù)據(jù)交換的CAD數(shù)據(jù)文件格式。DXF是一種開放的矢量數(shù)據(jù)格式,可以分為兩類:ASCII格式和二進制格式;ASCII可讀性好,但占有空間較大;二進制格式占有空間小、讀取速度快。DXF在表現(xiàn)圖形的大小方面十分精確,包含了AutoCAD圖形文件的所有信息。
1.2 ArcGIS數(shù)據(jù)格式
Geodatabase是一種采用標準關(guān)系數(shù)據(jù)庫技術(shù)來表現(xiàn)地理信息的數(shù)據(jù)模型。目前有兩種Geodatabase結(jié)構(gòu):Personal Geodatabase和Multiuser Geodatabase。Personal Geodatabase更像基于文件的工作空間,使用微軟的Access數(shù)據(jù)庫同時存儲空間數(shù)據(jù)和屬性數(shù)據(jù),數(shù)據(jù)庫存儲量大小可伸縮,最大為2GB。Personal Geodatabase支持單用戶編輯,不支持版本管理。
2.1 圖層對應關(guān)系
在CAD中,不同的地理要素放在不同的圖層,比如水系、居民地、植被等,相同地理要素的注記、點、線、塊都是放在同一圖層,即一個圖層里可以放置擁有相同性質(zhì)的若干元素,如一幅地形圖中的水系可以放在同一層中,居民地又可以放在另一層中。ArcGIS圖層由點、線、面、注記四種類型的數(shù)據(jù)組成,且每一個圖層里面只能存放一種類型的數(shù)據(jù),如點圖層只能存放點數(shù)據(jù),線圖層只能存放線數(shù)據(jù)。
根據(jù)CASS標準圖層及基礎(chǔ)地理信息要素分類及代碼(GB/T 13923-2006)對數(shù)據(jù)進行分類,共分為8大類,然后根據(jù)點、線、面、注記每類數(shù)據(jù)的要求,分為若干個不同類型的層,如表1所示。
表1 CASS圖層與ArcGIS圖層對應
2.2 要素對應關(guān)系
AutoCAD數(shù)據(jù)與ArcGIS數(shù)據(jù)在要素結(jié)構(gòu)上有所不同,但兩個系統(tǒng)對要素的表達方式基本相同,即都是點、線、注記及其組合。
AutoCAD 和 ArcGIS之間的數(shù)據(jù)轉(zhuǎn)換可以轉(zhuǎn)化為要素之間的對應轉(zhuǎn)換,其轉(zhuǎn)換關(guān)系如表2所示。
表2 AutoCAD要素與ArcGIS要素對應關(guān)系
2.3 結(jié)構(gòu)對應關(guān)系
表3 GIS數(shù)據(jù)結(jié)構(gòu)
在標準CASS數(shù)據(jù)轉(zhuǎn)換為ArcGIS數(shù)據(jù)時,需要記錄標準CASS數(shù)據(jù)的屬性信息,以便在ArcGIS轉(zhuǎn)換為標準CASS數(shù)據(jù)時使用,其ArcGIS數(shù)據(jù)結(jié)構(gòu)如表3所示。
2.4 編碼對應關(guān)系
GIS要素的分類編碼結(jié)構(gòu),在大類、中類、小類和子類的基礎(chǔ)上添加幾何特征碼及圖形特征碼,用以描述要素對象的幾何特征和圖形特征。
GIS要素大類、中類、小類的分類代碼采用基礎(chǔ)地理信息要素分類及代碼(GB/T 13923—2006)中規(guī)定的分類代碼;要素子類的分類代碼統(tǒng)一采用9位十進制數(shù)字碼,分別為按數(shù)字順序排列的大類碼、中類碼、小類碼、子類碼、幾何特征碼和圖形特征碼,具體代碼結(jié)構(gòu)見圖1。
圖1 要素代碼結(jié)構(gòu)
根據(jù)標準CASS數(shù)據(jù)的圖形、代碼描述和國家基本比例尺地圖圖式,建立兩系統(tǒng)的對照,如表4所示。
表4 標準CASS編碼與GIS編碼對應關(guān)系
建立編碼對應關(guān)系是為了在對ArcGIS符號化時,與AutoCAD數(shù)據(jù)保持一致,也是為了符合基礎(chǔ)地理信息要素的建庫標準。
3.1 AutoCAD轉(zhuǎn)ArcGIS
(1)轉(zhuǎn)換之前預處理
當轉(zhuǎn)換后的DXF中存在注記時,系統(tǒng)很有可能讀取到的內(nèi)容是亂碼,因此需要轉(zhuǎn)換前把DXF文件使用記事本打開,然后使用UTF-8編碼另存為一份DXF文件,另存的DXF文件,可能使用AutoCAD打不開,因為記事本把DXF的文件頭破壞掉了,但不影響轉(zhuǎn)換,轉(zhuǎn)換之前標準CASS數(shù)據(jù)如圖2所示。
圖2 標準CASS數(shù)據(jù)
(2)轉(zhuǎn)換方法及實現(xiàn)
目前國內(nèi)外實現(xiàn)數(shù)據(jù)轉(zhuǎn)換的方式大致有四種:外部數(shù)據(jù)交換模式、直接數(shù)據(jù)訪問模式、空間數(shù)據(jù)互操作模式、數(shù)據(jù)轉(zhuǎn)換平臺,本文采用第一種方法,即外部數(shù)據(jù)交換模式。首先把CASS的CAD數(shù)據(jù)轉(zhuǎn)換為DXF格式的數(shù)據(jù),使用程序讀取DXF文件中的明碼,逐個分析,然后使用基于ArcEngine中的接口創(chuàng)建數(shù)據(jù)庫、圖層、要素等,逐個把實體記錄下來。關(guān)鍵代碼如下:
#region按類型讀取
switch (sValue)
{
case "MTEXT":
sFtType="注記";
VbContinue=ReadDXFMText(i, iEdSec, ref tPntInfoArr, ref sFldVal, ref Anno, ref Height, ref Angle, ref iFAliType);
bContinue=CreateMText(sLyrName, tPntInfoArr, sFldVal, Anno, Height, Angle, iFAliType);
break;
case "TEXT":
sFtType="注記";
bContinue=ReadDXFText(i, iEdSec, ref tPntInfoArr, ref sFldVal, ref Anno, ref Height, ref Angle, ref iHAliType, ref iVAliType);
bContinue=CreateText(sLyrName, tPntInfoArr, sFldVal, Anno, Height, Angle, iHAliType, iVAliType);
break;
case "POINT":
case "INSERT":
sFtType="點";
bContinue=ReadDXFPoint(i, iEdSec, ref tPntInfoArr, ref sFldVal);
bContinue=CreateGeoFeature(sLyrName, sFtType, i, iClose, tPntInfoArr, sFldVal);
break;
……
}
#endregion
轉(zhuǎn)換之后的ArcGIS數(shù)據(jù)如圖3所示。
圖3 轉(zhuǎn)換后的ArcGIS數(shù)據(jù)
3.2 ArcGIS轉(zhuǎn)AutoCAD
ArcGIS數(shù)據(jù)轉(zhuǎn)換為AutoCAD數(shù)據(jù),需要注意的是轉(zhuǎn)換后的AutoCAD文件中,數(shù)據(jù)的位置、顏色、樣式、屬性等信息,需同原始CAD中數(shù)據(jù)相一致。
while (pFeature !=null)
{
string EntityType=GetFiledValue(clsFieldSysName.EntityType);
switch (EntityType)
{
case "MTEXT":
case "TEXT":
WriteTextEnt(pFeature.ShapeCopy as IPoint, sCADLayer, GetFiledValue(clsFieldSysName.FontText), GetFiledValue(clsFieldSysName.FontX), GetFiledValue(clsFieldSysName.FontY), GetFiledValue(clsFieldSysName.FontZ), GetFiledValue(clsFieldSysName.H), GetFiledValue(clsFieldSysName.FontName), GetFiledValue(clsFieldSysName.FontCenter), GetFiledValue(clsFieldSysName.FontHor), GetFiledValue(clsFieldSysName.FontVer), GetFiledValue(clsFieldSysName.FontHight), GetFiledValue(clsFieldSysName.FontWidth), GetFiledValue(clsFieldSysName.EntityColor), GetFiledValue(clsFieldSysName.CADAngle));
break;
case "POINT":
case "INSERT":
WritePointEnt(pFeature.ShapeCopy as IPoint, sCADLayer, GetFiledValue(clsFieldSysName.BlockName), GetFiledValue(clsFieldSysName.CASSCode), GetFiledValue(clsFieldSysName.PointXScale), GetFiledValue(clsFieldSysName.PointYScale), GetFiledValue(clsFieldSysName.PointZScale), GetFiledValue(clsFieldSysName.CADAngle), GetFiledValue(clsFieldSysName.H), GetFiledValue(clsFieldSysName.EntityColor), GetFiledValue(clsFieldSysName.AttHave));
break;
……
}
pFeature=pCursor.NextFeature();
}
轉(zhuǎn)換后的AutoCAD數(shù)據(jù)如圖4所示。
圖4 轉(zhuǎn)換后的AutoCAD數(shù)據(jù)
(1)標準CASS的基礎(chǔ)地形圖與 GIS數(shù)據(jù)相互轉(zhuǎn)換,前提是GIS數(shù)據(jù)來源于CAD數(shù)據(jù),或者具有CAD數(shù)據(jù)的一些圖形信息。
(2)標準CASS的基礎(chǔ)地形圖轉(zhuǎn)換為GIS數(shù)據(jù),需要使用CAD的中間格式DXF,且DXF文件的編碼格式要明確。
(3)標準CASS數(shù)據(jù)的編碼需要與基礎(chǔ)地理信息要素代碼對應,以便對GIS數(shù)據(jù)符號化。
(4)GIS數(shù)據(jù)轉(zhuǎn)換為標準CASS數(shù)據(jù)需要DXF模板中存在較全的塊名、線形及字體。
(5)實現(xiàn)標準CASS數(shù)據(jù)到GIS數(shù)據(jù),再到標準CASS數(shù)據(jù)無信息丟失的轉(zhuǎn)換,不但實現(xiàn)了兩種數(shù)據(jù)的共享,也降低了數(shù)據(jù)采集的費用,加大了數(shù)據(jù)的利用率。
[1] 郭敏,劉長星.AutoCAD向GIS數(shù)據(jù)轉(zhuǎn)換方法的研究[D].西安:西安科技大學測繪學院,2009
[2] 黨安榮,賈海峰,易善楨,等.ArcGIS8 Desktop地理信息系統(tǒng)應用指南[M].北京:清華大學出版社,2005
[3] 杜輝.基于FME的ARCGIS與AUTOCAD空間數(shù)據(jù)交換[J].鐵道勘察,2012(3)
[4] 劉永強.AutoCAD與ArcGIS數(shù)據(jù)轉(zhuǎn)換方法研究[J].測繪科學,2009(S2)
[5] 鄂潔,陳婕.AutoCAD和ArcGIS間的數(shù)據(jù)轉(zhuǎn)換研究[J].軟件導刊,2007(17)
[6] 林曉清,楊素鳳.COVERAGE格式數(shù)據(jù)和AOTUCAD格式數(shù)據(jù)間的轉(zhuǎn)換[J].鐵道勘察,2011(3)
[7] 陳樂書,劉連勝,王長委.CAD到GIS數(shù)據(jù)格式轉(zhuǎn)換的探討[J].安徽農(nóng)業(yè)科學,2009(18)
[8] 曹國云,張偉.AutoCAD數(shù)據(jù)到GIS空間數(shù)據(jù)轉(zhuǎn)換技術(shù)和方法的研究[J].安徽農(nóng)業(yè)科學,2006(22)
[9] 肖鳴.CAD數(shù)據(jù)向GIS空間數(shù)據(jù)庫轉(zhuǎn)換方法的實現(xiàn)[J].測繪信息與工程,2007(3)
InterconversionofCADdataandGISdatabasedonArcEngine
REN Xue-shen ZHANG Yue-xiang
2014-07-10
任學申(1983—),男,2010年畢業(yè)于江西理工大學地理信息系統(tǒng)專業(yè),碩士,工程師。
1672-7479(2014)05-0008-04
P208
: A