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; } } } } } } }