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