zoukankan      html  css  js  c++  java
  • 基于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;
    
                            }
                        }
                    }
                }
    
            }
    
        }
    }
    

      

  • 相关阅读:
    数据结构:数组、链表、栈、队列的理解
    JVM学习记录-JVM的内存结构管理和运行时数据区理解
    线程池ThreadPoolExecutor的一种扩展办法
    四级地址插件升级改造(京东商城地址选择插件)city-picker
    java8在Collection中新增加的方法removeIf
    使用lambda编程之延迟执行
    JSP的内置对象以及作用域。
    Netty 异步的、事件驱动的网络应用程序框架和工具
    Zookeeper 服务注册和发现
    Jetty 发布web服务
  • 原文地址:https://www.cnblogs.com/liweis/p/6285376.html
Copyright © 2011-2022 走看看