基于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;

                        }
                    }
                }
            }

        }

    }
}

  

原文地址:https://www.cnblogs.com/liweis/p/6285376.html