CAD数据是GIS中常用的一种地理数据,GIS的数据很多都是从DWG文件获取的。Map对象可以载入很多种格式的数据,当然也包括DWG文件,这里介绍将CAD文件载入Map对象的方法。
在Map对象看来,DWG文件可以看成两种不同形式的混合体,一是看作要素图层,另外一种是看作栅格图像。对于前者,ArcObjects使用统一和普通Featurelayer一样的方法来管理,而对于后者则是采用cadLayer对象来管理。
当一个DWG文件被看作是要素图层的时候,它表现为四种类型的要素类,即点、线、多边形和标注图层。这种区分并不是按照DWG文件本身的图层号来做的,而是简单地考虑DWG文件中的几何对象的类型,因此,如果一个DWG文件中有多个图层都是线,那它们将会合并在一个线要素图层中。
CadDrawingLayer对象
下面的代码是将一个CAD文件添加到地图对象中去,这是作为一个栅格图形加入的,无法进行GIS分析等操作,仅仅是作为背景显示。
Dim pCadWorkspaceFactory As IWorkspaceFactory
pCadWorkspaceFactory = New CadWorkspaceFactory ‘使用专门的workspacefactory
Dim pWorkspace As IWorkspace
pWorkspace = pCadWorkspaceFactory.OpenFromFile("C:\ArcGIS\ArcTutor\Editor\ExerciseData ", 0)
Dim pCadDrawingWorkspace As ICadDrawingWorkspace
pCadDrawingWorkspace = pWorkspace
Dim pCadDataset As ICadDrawingDataset ‘定义CAD文件的数据集
pCadDataset = pCadDrawingWorkspace.OpenCadDrawingDataset("PARCELS.DWG") ‘获得CAD数据集
Dim pCadLayer As ICadLayer ‘定义一个CAD图层
pCadLayer = New CadLayer
pCadLayer.CadDrawingDataset = pCadDataset
AxMapControl1.AddLayer(pCadLayer) ‘加入到Map中
cad文件作为Feature对象
作为要素文件被读取的时候,使用的方法和iFeaturelayer是一样的,需要注意的是它是作为一个要素数据集的形式而存在的。一个DWG文件在Map看来是一个要素数据集,其中的类简单分为点,线,面和文字标注四种类型。
下面的方法是把CAD文件当作要素数据集来获取,然后加入Map对象中。
Dim pCadWorkspacefactory As IWorkspaceFactory
pCadWorkspacefactory = New CadWorkspaceFactory
Dim pWorkspace As IFeatureWorkspace
pWorkspace = pCadWorkspacefactory.OpenFromFile("C:\ArcGIS\ArcTutor\Editor\ExerciseData ", 0)
‘打开一个要素数据集
Dim pFeatDataset As IFeatureDataset
pFeatDataset = pWorkspace.OpenFeatureDataset("PARCELS.DWG")
Dim pFeatClassContainer As IFeatureClassContainer
pFeatClassContainer = pFeatDataset ‘pFeatClassContainer可以管理pFeatDataset中的每个要素集
Dim pFeatClass As IFeatureClass
Dim pFeatLayer As IFeatureLayer
Dim i As Integer
‘对其中的要素集进行逐个处理
For i = 0 To pFeatClassContainer.ClassCount - 1
pFeatClass = pFeatClassContainer.Class(i)
If pFeatClass.FeatureType = esriFeatureType.esriFTCoverageAnnotation Then
pFeatLayer = New CadAnnotationLayer ‘标注类型,必须设置为单位的标注图层
Else
pFeatLayer = New FeatureLayer ‘点线面类型
End If
pFeatLayer.Name = pFeatClass.AliasName
pFeatLayer.FeatureClass = pFeatClass
AxMapControl1.AddLayer(pFeatLayer)
Next

相关评论
