2023年11月23日发(作者:)
C#实现CAD数据转shape或mdb(转)
本⽂所指的CAD数据为不带空间参考和扩展数据的数据。如果CAD带了空间参考或是扩展属性数据的话,就要采⽤图形和属性分离的⽅法转CAD数据,即图
形转完后需要挂接属性数据库。这⾥就不详细说明了.
ArcGIS和CAD对空间数据的归纳有所不同,在AutoCad中,点线⾯可以在同⼀个图层中,但是在ArcGIS中,点线⾯被严格的区分为了point、polyline和
polygon三种类型的图层,所以直接⽤ArcCatalog查看CAD数据时会看到五个图层(点线⾯、注记和Multipatch)
话不多说了,进⼊主题吧
下⾯的⽅法实现了点线⾯图层转成Shape⽂件
代码
public bool CadDataToShape(string _cadFilePath)
{
//⼯作空间
IWorkspaceFactory pWorkspaceFactory;
IFeatureWorkspace pFeatureWorkspace;
IFeatureLayer pFeatureLayer;
IFeatureDataset pFeatureDataset;//图层对应数据集
eClassToFeatureClass feaTofea = new FeatureClassToFeatureClass();
cessor pGeoPro = new cessor();
try
{
string strFullPath = _cadFilePath;
int index = dexOf("");
string filePath = ing(0, index);
string fileName = ing(index + 1);
string DataSaveFilePath=@"D:CADToShape";
cadGISInfo = new stMdbInfo();
turesName = new List<string>();
e = fileName;
//打开cad数据集
pWorkspaceFactory = new CadWorkspaceFactoryClass();
pFeatureWorkspace = (IFeatureWorkspace)omFile(filePath, 0);
if ((DataSaveFilePath + @"" + fileName))
{
DirectoryInfo dirInfo = new DirectoryInfo(DataSaveFilePath + @"" + fileName);
foreach (FileInfo file in es())
{
();
}
(DataSaveFilePath + @"" + fileName);
}
Directory(DataSaveFilePath + @"" + fileName);
epath = DataSaveFilePath + @"" + fileName;
//打开⼀个要素集
pFeatureDataset = atureDataset(fileName);
IFeatureClassContainer pFeatureClassContainer = (IFeatureClassContainer)pFeatureDataset;
//对CAD⽂件中的要素进⾏遍历处理
int count = ount;
for (int j = 0; j < ount; j++)
{
IFeatureClass pFeatClass = _Class(j);
(ame+".shp");
if (eType == CoverageAnnotation || eType == Annotation)
{
}
else
{
_features = strFullPath + @"" + ame;
_path = DataSaveFilePath + @"" + fileName;
_feature_class = ame;
_name = ame;
e(feaTofea, null);
}
}
return true;
}
catch
{
return false;
}
finally
{
pWorkspaceFactory = null;
pFeatureDataset = null;
pFeatureWorkspace = null;
t();
}
}
下⾯的⽅法实现CAD数据转成本地的Personal Geodatbase,同时实现了注记图层的转换
代码
public bool CadDataToGeodatabase(string _cadFilePath)
{
//⼯作空间
IWorkspaceFactory pWorkspaceFactory;
IFeatureWorkspace pFeatureWorkspace;
IFeatureLayer pFeatureLayer;
IFeatureDataset pFeatureDataset;//图层对应数据集
//创建MDB⼯作空间
IWorkspaceFactory pAccessWorkSpaceFactory;
//这个conversionTools不包含注记图层的转换
eClassToFeatureClass feaTofea = new FeatureClassToFeatureClass();
cessor pGeoPro = new cessor();
//ImportCADAnnotation功能,实现导⼊注记图层
CADAnnotation importCADAnno = new ImportCADAnnotation();
try
{
string strFullPath = _cadFilePath;
int index = dexOf("");
string filePath = ing(0, index);
string fileName = ing(index + 1);
string DataSaveFilePath=@"D:CADToMDB";
cadGISInfo= new stMdbInfo();
turesName = new List<string>();
e = fileName;
//打开cad数据集
pWorkspaceFactory = new CadWorkspaceFactoryClass();
pFeatureWorkspace = (IFeatureWorkspace)omFile(filePath, 0);
//创建mdb(personal geodatabase)
pAccessWorkSpaceFactory = new AccessWorkspaceFactoryClass();
if ((DataSaveFilePath + @"" + fileName + ".mdb"))
{
(DataSaveFilePath + @"" + fileName + ".mdb");
}
epath = DataSaveFilePath + @"" + fileName + ".mdb";
//(DataSaveFilePath + @"" + fileName + ".mdb");
(DataSaveFilePath, fileName + ".mdb", null, 0);
//打开⼀个要素集
pFeatureDataset = atureDataset(fileName);
IFeatureClassContainer pFeatureClassContainer = (IFeatureClassContainer)pFeatureDataset;
//对CAD⽂件中的要素进⾏遍历处理
int count = ount;
for (int j = 0; j < ount; j++)
{
IFeatureClass pFeatClass = _Class(j);
(ame);
if (eType == CoverageAnnotation || eType == Annotation)
{
pFeatureLayer = new CadAnnotationLayerClass();//注记图层
_features = strFullPath + @"" + ame;
_featureclass = DataSaveFilePath + @"" + fileName + ".mdb" + @"" + ame;
nce_scale = 1000;
e(importCADAnno, null);
}
else
{
_features = strFullPath + @"" + ame;
_path = DataSaveFilePath + @"" + fileName + ".mdb";
_feature_class = ame;
_name = ame;
e(feaTofea, null);
}
}
return true;
}
catch(Exception ex)
{
return false;
}
finally
{
t();
}
}
从上⾯的代码可以看出,实际C#调⽤了Geoprocessor 执⾏了eClass to FeatureClass⼯具,这是不是有点像⽤arctoolbox中的功能!这⾥就可以
扩展⽤Geoprocessor 实现其他arctoolbox中能够先实现的功能!
这⾥也可以将上⾯的⽅法⾥的参数改为多个cad数据路径,实现批量转数据!
发布评论