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