cad转shp 奥维_CAD转化为Shp
基于VBA的SCS數(shù)據(jù)分類轉(zhuǎn)換為Shape文件
作者:ffff??來源:博客園??發(fā)布時(shí)間:2008-08-25 13:31??閱讀:170 次??原文鏈接?? [收藏]
基于VBA 的SCS 數(shù)據(jù)分類轉(zhuǎn)換為Shape 文件
高宏兵,李鳳斌,王 進(jìn),劉 域
(大連九成測繪企業(yè)集團(tuán),遼寧大連116400)
摘 要 數(shù)據(jù)是GIS 發(fā)展及各類專題地理信息系統(tǒng)建立的基礎(chǔ),而目前提供基礎(chǔ)數(shù)據(jù)的來源,主要是各部門由
AutoCAD 二次開發(fā)軟件編輯的DWG數(shù)據(jù),并有編碼規(guī)則,用以區(qū)分不同的地物,所以有必要研究DWG數(shù)據(jù)的各
種轉(zhuǎn)換方法。在學(xué)習(xí)其他的數(shù)據(jù)轉(zhuǎn)換方法中,本文提出一種基于ArcMap 內(nèi)置VBA ,利用自定義轉(zhuǎn)換文件,對
DWG進(jìn)行分類轉(zhuǎn)換的方法,并在大連某地區(qū)的地籍測量的數(shù)據(jù)轉(zhuǎn)換中得到較好的應(yīng)用。
關(guān)鍵詞 編碼 GIS DWG VBA Geodatabase 數(shù)據(jù)轉(zhuǎn)換
中圖分類號(hào): P208 文獻(xiàn)標(biāo)識(shí)碼:B 文章編號(hào):1672 - 4097 (2007) 04 - 0037 - 03
本文是以大連某地區(qū)開思繪制的DWG 數(shù)據(jù)
為例,為滿足遼寧省城鎮(zhèn)地籍?dāng)?shù)據(jù)建庫標(biāo)準(zhǔn),將其
分類轉(zhuǎn)為Shape 數(shù)據(jù)格式為例,分析DWG、Shape
數(shù)據(jù)格式,介紹目前的轉(zhuǎn)換方法,根據(jù)筆者工作,
談?wù)劺肁rcMap 內(nèi)置VBA ,將DWG數(shù)據(jù)分類轉(zhuǎn)
換為Shape 數(shù)據(jù)的原理和轉(zhuǎn)換流程,并賦有關(guān)鍵
代碼。
1 一般的數(shù)據(jù)轉(zhuǎn)換方法
111 Arc Toolbox 轉(zhuǎn)換方法
ESRI 的Arc Toolbox 軟件,提供用戶強(qiáng)大的地
理信息處理功能,為不同類型的任務(wù)提供解決的途
徑。主要工具有:數(shù)據(jù)管理工具、分析工具、轉(zhuǎn)換工
具和定制工具(My Tool s) 。在Arc Toolbox 中,先
將DWG 轉(zhuǎn)為Geodatabase 數(shù)據(jù)格式, 選擇“Con2
version Tools (轉(zhuǎn)換工具) - > Import to Geodata2
base - > CAD to Geodatabase”;再把Geodatabase
轉(zhuǎn)為Shape 格式,選擇“Conversion Tool s (轉(zhuǎn)換工
具) - > Import to Shapefile - > Geodatabase to
Shapefile”。這種轉(zhuǎn)換只是把DWG 數(shù)據(jù)簡單的轉(zhuǎn)
為:點(diǎn)、線、面,不能實(shí)現(xiàn)分類提取的目的,達(dá)不到用
戶需要的結(jié)果。
112 利用其他軟件轉(zhuǎn)換
目前許多的GIS 軟件也可以轉(zhuǎn)換數(shù)據(jù),例如
SuperMap Deskpro 。還有專門對數(shù)據(jù)進(jìn)行轉(zhuǎn)換的
FME 軟件,它可以實(shí)現(xiàn)100 多種GIS 及CAD 空
間數(shù)據(jù)格式, 如DWG、DXF 、DGN 、Shape File 、
ArcSDE 等的相互轉(zhuǎn)換。但是對于專業(yè)的數(shù)據(jù)處
理軟件,價(jià)格一般比較昂貴,要定制復(fù)雜的數(shù)據(jù)
轉(zhuǎn)換任務(wù),需要使用人員參加培訓(xùn)學(xué)習(xí),這些對
于工程的投入大量資金, 所以這種轉(zhuǎn)換也不
可取。
2 利用ArcMap 內(nèi)置VBA 編寫分類轉(zhuǎn)換
程序
下面說明如何利用VBA 程序,將廣州開思軟
件編輯生成的DWG 格式數(shù)據(jù)分類轉(zhuǎn)為Shape
格式。
211 程序設(shè)計(jì)思想
21111 了解開思編碼體系
開思是采用對地物分類編碼的規(guī)則,先將地
物按層劃分,主要包括10 類(見表1) ,其它層還
有:Bound(框架線) 、Axes (軸線) 、Value (骨架線)
等。再將各層下不同地物進(jìn)行分類編碼,編碼統(tǒng)
一用7 位數(shù)字描述,結(jié)構(gòu)為:主編碼( 4 位+ 1 位)
+ 附編碼(2 位) ,前四位是按《國標(biāo)》要求,后面是
細(xì)分類的碼, 7 位編碼存儲(chǔ)在Thickness 屬性中。
對于以塊表示的地物,采用塊名的不同進(jìn)行7 位
數(shù)字編碼。
21112 建立轉(zhuǎn)換文件
根據(jù)開思軟件的編碼體系,建立DWG 數(shù)據(jù)與
Shape 的轉(zhuǎn)換文件( ZHWJ . t xt ) 。格式為:類型,屬
性字段,屬性值,Shape 文件名。如圖1 ,文件說明:
①將點(diǎn)數(shù)據(jù)中Text 屬性值為GC113 和GC200 轉(zhuǎn)
到CL KZD. shp (測量控制點(diǎn)) ②將線數(shù)據(jù)中Thick2
ness 屬性值為3231000 和3232000 轉(zhuǎn)到XZDW.
shp (線狀地物) ③將面數(shù)據(jù)中Thickness 屬性值為
2110100 和2110200 轉(zhuǎn)到MZFW. shp (面狀房屋)
④將注記點(diǎn)數(shù)據(jù)中Layer 屬性值為002 轉(zhuǎn)到TK.
shp (圖廓注記) ⑤將注記點(diǎn)數(shù)據(jù)中Layer 屬性值為
ZJ 轉(zhuǎn)到ZZJ . shp (注記) 。
212 程序流程及代碼說明
21211 程序流程
啟動(dòng)ArcMap ,運(yùn)行宏,讀入DWG 文件,根據(jù)
轉(zhuǎn)換文件構(gòu)造選擇條件,從DWG 數(shù)據(jù)中提取地物
轉(zhuǎn)換到指定的Shape 文件中,詳細(xì)流程(見圖1) 。
圖1 程序流程
31211 程序主要代碼說明
程序主要有三部分組成:讀入DWG文件,讀入
轉(zhuǎn)換文件,根據(jù)轉(zhuǎn)換文件分類選取并保持到Shape
文件。受篇幅限制,下面給出部分主要代碼。
(1) 讀入DWG文件。
Set pWorkspace = pCadWKSFact . OpenFromFile
(DWG- Path , 0) ‘/ 設(shè)置DWG文件路徑/
Set p FeatureDataset = pWorkspace. OpenFeatureDataset
(DWG- name) ‘/ 打開DWG特征數(shù)據(jù)/
Set p FeatureClassContainer = p FeatureDataset
For Count = 0 To p FeatureClassContainer. ClassCount
—1‘/ 分類特征數(shù)據(jù)/
?‘/ 代碼略,讀入DWG 數(shù)據(jù),生成點(diǎn)D、點(diǎn)Z、線
X、面M FeatureLayer/
Next Count
pMxDoc. UpdateContent s ’/ 刷新顯示/
(2) 讀入轉(zhuǎn)換文件。
Open " ZHWJ . TXT" For Input As # 1‘/ 打開轉(zhuǎn)換
文件/
Do While Not EOF (1) ‘/ 循環(huán)讀取轉(zhuǎn)換文件讀到數(shù)
組ZH 中/
Input # 1 , ZH (Number , 1) , ZH (Number , 2) ,
ZH(Number , 3) , ZH(Number , 4)
Number = Number + 1‘/ 循環(huán)到數(shù)組的下一行/
Loop
Close # 1‘/ 關(guān)閉轉(zhuǎn)換文件/
(3) 根據(jù)轉(zhuǎn)換文件分類選取,并存儲(chǔ)為Shape
文件,并按遼寧省城鎮(zhèn)地籍?dāng)?shù)據(jù)建庫標(biāo)準(zhǔn)添加屬性
字段。
Set pMxDoc = Application. Document‘/ 取得焦點(diǎn)Map
對象/
Set pMap = pMxDoc. FocusMap‘/ 設(shè)置當(dāng)前活動(dòng)視圖/
‘/ 創(chuàng)建一個(gè)新的空間書簽對象,并設(shè)置它定位到焦點(diǎn)地
圖的當(dāng)前可視范圍/
Set pActiveView = pMap
For I = 1 To Number —1‘/ 按行循環(huán)存放轉(zhuǎn)化文件的
數(shù)組/
Select Case ZH( I , 1) ‘/ 根據(jù)數(shù)組第一列/
Case“Z”‘/ 如果ZH( I , 1) = ”Z”,為注記點(diǎn)層/
Set p FeatureLayer = pMap . Layer (0)
Set p FeatureSelection = p FeatureLayer‘/ 指定查
詢的圖層為注記點(diǎn)層/
Case“M”‘/ 如果ZH( I , 1) = ”M”, 查詢的圖層為
面層(代碼略) /
Case“X”‘/ 如果ZH( I , 1) = ”X”, 查詢的圖層為
線層(代碼略) /
Case“D”‘/ 如果ZH ( I , 1) = ”D”, 查詢的圖層為
點(diǎn)層(代碼略) /
End Select‘/ 語句結(jié)束
Set pQueryFilter = New QueryFilter‘/ 查詢過濾器/
pQueryFilter. WhereClause = " " + ZH( I ,2) + " = " + ZH
( I ,3) + " "‘/ 創(chuàng)建查詢過濾器/
‘/ 以下Shape 文件存在,不存在創(chuàng)建,并添加地籍需要
的字段,插入選擇結(jié)果/
If Check - for - shapefile ( Path , ZH( I ,4) ) = False Then
‘/ 自己定義函數(shù),按指定路徑創(chuàng)建Shape 文件,添
加地籍需要的字段/
Fun - Create - AddField ( Path)
End If
Set pNewFeatureClass = p TargetWorkspace. OpenFea2
tureClass (ZH( I ,4) ) ‘/ 打開shape/
Set pCursor = p FeatureClass. Search ( pQueryFilter ,
False) ‘/ 執(zhí)行選擇,獲取選擇指針/
Set p Feature = pCursor. Next Feature‘/ 游標(biāo)指針指向
第一個(gè)位置的上面/
Do Until ( (p Feature Is Nothing) Or (bAbort) )‘/ 選擇
不為空,根據(jù)指針遍歷要素/
Set p Geom = p Feature. ShapeCopy
Set pBuffer. Shape = p Geom‘/ 獲取要素的空間
范圍/
For i = 0 To p Feature. Fields. FieldCount —1‘/ 返
回所有字段的數(shù)目/
‘/ 代碼略,循環(huán)選擇要素的屬性及其值/
Next
p Insert . Insert Feature pBuffer ‘/ 插入到shape
文件/
Set p Feature = pCursor. Next Feature‘/ 游標(biāo)指針
移動(dòng)到下個(gè)位置/
Loop‘/ 返回到Do 語句/
Next‘/ 移動(dòng)到數(shù)組下一行位置/
213 程序運(yùn)行結(jié)果
轉(zhuǎn)換文件是根據(jù)遼寧省城鎮(zhèn)地籍?dāng)?shù)據(jù)建庫
分類標(biāo)準(zhǔn)編寫的,利用轉(zhuǎn)換程序?qū)D形進(jìn)行分類
轉(zhuǎn)換,并利用程序添加了屬性字段,經(jīng)驗(yàn)證達(dá)到
38 現(xiàn) 代 測 繪 第30 卷
了遼寧省城鎮(zhèn)地籍?dāng)?shù)據(jù)建庫標(biāo)準(zhǔn)。
3 結(jié) 論
這種轉(zhuǎn)換方法,利用ArcMap 內(nèi)置的VBA 程
序,對DWG 數(shù)據(jù)根據(jù)轉(zhuǎn)換文件,直接進(jìn)行分類轉(zhuǎn)
換,用戶可以按需要,按圖層(Layer) 、顏色(color) 、
線形(Linetype) 、厚度( Thickness) 、塊名( Text ) 等
分類轉(zhuǎn)換,也可以要求提取部分感興趣的數(shù)據(jù),用
戶不必了解DWG 數(shù)據(jù)的存儲(chǔ)格式,只需編輯轉(zhuǎn)換
文件,程序就可以根據(jù)轉(zhuǎn)換文件,提取不同的數(shù)據(jù)
并轉(zhuǎn)為Shape 格式。本程序已經(jīng)過實(shí)際的驗(yàn)證,結(jié)
果較好。因此,對于DWG 轉(zhuǎn)為Shape 數(shù)據(jù)有一定
的意義。
參考文獻(xiàn)
1 薛偉. MapObject 地理信息系統(tǒng)程序設(shè)計(jì)[M] . 北京:國
防工業(yè)出版社,2004
2 田鵬波,劉清. AutoCAD 到Map Info 的地形圖轉(zhuǎn)換[J ] .
城市勘測, 2003 (1) : 32 - 34
3 劉光,劉小東. 地理信息系統(tǒng)二次開發(fā)教程- VB. net 和
Mapobject 實(shí)現(xiàn)[M] . 北京:清華大學(xué)出版社,2004
4 王鈺. 用VBA 開發(fā)AutoCAD 應(yīng)用程序[M] . 北京:人
民郵電出版社,1999 : 97 - 145
總結(jié)
以上是生活随笔為你收集整理的cad转shp 奥维_CAD转化为Shp的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: [笔记] GPGPU-SIM的使用说明(
- 下一篇: DNS欺骗攻击和防护