arcgis 10 如何用代码实现将cad导入到gis中

如题,c# 、java的都可以,或者高手指点一下用到哪些类库或接口。

    数据转换:CAD数据经常需要经过组织和处理后才能在GIS应用程序中可用,ESRI提供了不同的转换工具来帮助用户在GIS和CAD间更好地使用数据。

    移植CAD到ArcGIS

  关于从CAD移植到ArcGIS,通常包括两方面的内容:一是CAD到ArcGIS数据的转换,二是CAD到ArcGIS应用的转换。从CAD数据到ArcGI的转换,前面已经做了介绍。因为ArcGIS Geodatabase模型是建立在简单要素层基础之上的,所以CAD到Geodatabase数据的转换通常是先转为简单要素层,之后在按照Geodatabase模型的定义进行要素类组织合并,定义域,子类型,关系,几何网络等规则。从CAD到ArcGIS应用的转换目前主要集中在数据的原始表现上,因为要用到ArcGIS强大的功能必然要对CAD数据进行转换,但也因此以前在CAD环境下的看到数据在ArcGIS环境下“变了样子”,这主要由于各自系统对数据表现方式和相关符号库的不同,数据本身并没有丢失。此问题的解决目前主要集中在两个方法,一种是程序实现不同系统符号库的自动转换,在数据转换时完成相应符号库的转入。另一种是对数据进行前期处理,个人觉得这种方法更具有现实性和易操作性一些。这就是先对CAD数据进行编码处理工作,使CAD符号能够根据编码进行区分,然后利用ArcGIS强大的符号编辑器重新制作CAD相关的符号,之后在ArcGIS应用中书写程序根据编码规则匹配相关的ArcGIS符号文件进行显示和编辑等。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-01-17
我试了一下:C#添加CAD类型数据为图层如下
IWorkspaceFactory pWorkspaceFactory;
IFeatureWorkspace pFeatureWorkspace;
IFeatureLayer pFeatureLayer;
IFeatureDataset pFeatureDataset;
OpenFileDialog dlg = new OpenFileDialog();
dlg.Filter = "Layer File(*.lyr)|*.dwg";
dlg.InitialDirectory = @"D:\数据库\DWG";//这里自己该一下数据存储目录就好
dlg.ShowDialog();
string strFullPath = dlg.FileName;
if (strFullPath == "")
return;
int index = strFullPath.LastIndexOf("\\");
string filePath = strFullPath.Substring(0, index);
string fileName = strFullPath.Substring(index + 1);
//打开CAD数据
pWorkspaceFactory = new CadWorkspaceFactoryClass();
pFeatureWorkspace = IFeatureWorkspace)pWorkspaceFactory.OpenFromFile(filePath, 0);
//打开一个要素
pFeatureDataset = pFeatureWorkspace.OpenFeatureDataset(fileName);
IFeatureClassContainer pFeatureClassContainer = (IFeatureClassContainer)pFeatureDataset;
//对CAD文件中要素进行遍历处理
for (int i = 0; i < pFeatureClassContainer.ClassCount - 1; i++)
{
IFeatureClass pFeatureClass = pFeatureClassContainer.get_Class(i);
if (pFeatureClass.FeatureType == esriFeatureType.esriFTCoverageAnnotation)
pFeatureLayer = new CadAnnotationLayerClass();
else
pFeatureLayer = new FeatureLayerClass();
pFeatureLayer.Name = pFeatureClass.AliasName;
pFeatureLayer.FeatureClass = pFeatureClass;
axMapControl1.Map.AddLayer(pFeatureLayer);
axMapControl1.ActiveView.Refresh();
}追问

谢谢!开发人员现在还没搞完但分先给了。

本回答被提问者采纳
相似回答