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