基于Teigha.Net实现CAD到SHP的转换方案
CAD在测绘领域运用广泛,所以,现在有很多成果都是CAD格式,但其自身存在很多局限性,需将其转为支持更加广泛,存储更加完善的 SHP文件。ArcGIS中直接提供相关转换工具,但不能转换Xdata,ArcObject似乎也没相关的操作接口。
通常,以前我的解决方法有两个:一是使用FME,FME是万能的空间数据转换器,支持的格式广泛,用它可以轻松将CAD扩展属性直接转到shp文件的属性表,以前,我通常用它来将南方CASS的扩展属性转换SHP属性;二是使用CAD.net二次开发组件,也可以实现读取和编辑。但这都有一个缺撼,就是不能脱离CAD或ArcGIS环境。
现在找到了一种解决方案,就是Teigha.Net,需要要的可以尝试一下。先用它将xdata读取出来,然后Shapelib等将其他写到shp文件的属性中。

using Teigha.DatabaseServices;
using Teigha.Runtime;
namespace CAD2Shp
{
public static class TeighaHelper
{
/// <summary>
/// 加载CAD文件
/// </summary>
/// <param name="filePath">路径</param>
/// <param name="passWord">密码</param>
/// <returns></returns>
public static Database LoadCad(string filePath,string passWord="")
{
using (Services svcs = new Services())
{
Database database = new Database(false, false);
database.ReadDwgFile(filePath, FileOpenMode.OpenForReadAndAllShare, false, passWord);
return database;
}
}
public static void ReadXdata(Database database)
{
using (Services svcs = new Services())
{
BlockTableRecord btab = (BlockTableRecord)database.CurrentSpaceId.GetObject(OpenMode.ForRead);
foreach (ObjectId btr in btab)
{
using (Transaction tr = database.TransactionManager.StartTransaction())
{
DBObject obj = tr.GetObject(btr, OpenMode.ForWrite);
switch (obj.GetType().Name)
{
case "Polyline":
Polyline dwgpl = (Polyline) obj;
break;
default:
break;
}
}
}
}
}
}
}
作者:我也是个傻瓜
出处:http://www.cnblogs.com/liweis/
签名:成熟是一种明亮而不刺眼的光辉。

浙公网安备 33010602011771号