• CAD转化为Shp


    基于VBA的SCS数据分类转换为Shape文件

    作者:ffff  来源:博客园  发布时间:2008-08-25 13:31  阅读:170 次  原文链接   [收藏]  
    基于VBA 的SCS 数据分类转换为Shape 文件
    高宏兵,李凤斌,王 进,刘 域
    (大连九成测绘企业集团,辽宁大连116400)
    摘 要 数据是GIS 发展及各类专题地理信息系统建立的基础,而目前提供基础数据的来源,主要是各部门由
    AutoCAD 二次开发软件编辑的DWG数据,并有编码规则,用以区分不同的地物,所以有必要研究DWG数据的各
    种转换方法。在学习其他的数据转换方法中,本文提出一种基于ArcMap 内置VBA ,利用自定义转换文件,对
    DWG进行分类转换的方法,并在大连某地区的地籍测量的数据转换中得到较好的应用。
    关键词 编码 GIS  DWG VBA  Geodatabase  数据转换
    中图分类号: P208    文献标识码:B    文章编号:1672 - 4097 (2007) 04 - 0037 - 03
      本文是以大连某地区开思绘制的DWG 数据
    为例,为满足辽宁省城镇地籍数据建库标准,将其
    分类转为Shape 数据格式为例,分析DWG、Shape
    数据格式,介绍目前的转换方法,根据笔者工作,
    谈谈利用ArcMap 内置VBA ,将DWG数据分类转
    换为Shape 数据的原理和转换流程,并赋有关键
    代码。
    1  一般的数据转换方法
    111  Arc Toolbox 转换方法
    ESRI 的Arc Toolbox 软件,提供用户强大的地
    理信息处理功能,为不同类型的任务提供解决的途
    径。主要工具有:数据管理工具、分析工具、转换工
    具和定制工具(My Tool s) 。在Arc Toolbox 中,先
    将DWG 转为Geodatabase 数据格式, 选择“Con2
    version Tools (转换工具) - > Import to Geodata2
    base - > CAD to Geodatabase”;再把Geodatabase
    转为Shape 格式,选择“Conversion Tool s (转换工
    具) - > Import to Shapefile - > Geodatabase to
    Shapefile”。这种转换只是把DWG 数据简单的转
    为:点、线、面,不能实现分类提取的目的,达不到用
    户需要的结果。
    112  利用其他软件转换
    目前许多的GIS 软件也可以转换数据,例如
    SuperMap Deskpro 。还有专门对数据进行转换的
    FME 软件,它可以实现100 多种GIS 及CAD 空
    间数据格式, 如DWG、DXF 、DGN 、Shape File 、
    ArcSDE 等的相互转换。但是对于专业的数据处
    理软件,价格一般比较昂贵,要定制复杂的数据
    转换任务,需要使用人员参加培训学习,这些对
    于工程的投入大量资金, 所以这种转换也不
    可取。
    2  利用ArcMap 内置VBA 编写分类转换
    程序
      下面说明如何利用VBA 程序,将广州开思软
    件编辑生成的DWG 格式数据分类转为Shape
    格式。
    211  程序设计思想
    21111  了解开思编码体系
    开思是采用对地物分类编码的规则,先将地
    物按层划分,主要包括10 类(见表1) ,其它层还
    有:Bound(框架线) 、Axes (轴线) 、Value (骨架线)
    等。再将各层下不同地物进行分类编码,编码统
    一用7 位数字描述,结构为:主编码( 4 位+ 1 位)
    + 附编码(2 位) ,前四位是按《国标》要求,后面是
    细分类的码, 7 位编码存储在Thickness 属性中。
    对于以块表示的地物,采用块名的不同进行7 位
    数字编码。
    21112  建立转换文件
    根据开思软件的编码体系,建立DWG 数据与
    Shape 的转换文件( ZHWJ . t xt ) 。格式为:类型,属
    性字段,属性值,Shape 文件名。如图1 ,文件说明:
    ①将点数据中Text 属性值为GC113 和GC200 转
    到CL KZD. shp (测量控制点) ②将线数据中Thick2
    ness 属性值为3231000 和3232000 转到XZDW.
    shp (线状地物) ③将面数据中Thickness 属性值为
    2110100 和2110200 转到MZFW. shp (面状房屋)
    ④将注记点数据中Layer 属性值为002 转到TK.
    shp (图廓注记) ⑤将注记点数据中Layer 属性值为
    ZJ 转到ZZJ . shp (注记) 。
    212  程序流程及代码说明
    21211  程序流程
    启动ArcMap ,运行宏,读入DWG 文件,根据
    转换文件构造选择条件,从DWG 数据中提取地物
    转换到指定的Shape 文件中,详细流程(见图1) 。
    图1  程序流程
    31211  程序主要代码说明
    程序主要有三部分组成:读入DWG文件,读入
    转换文件,根据转换文件分类选取并保持到Shape
    文件。受篇幅限制,下面给出部分主要代码。
    (1) 读入DWG文件。
    Set pWorkspace = pCadWKSFact . OpenFromFile
    (DWG- Path , 0) ‘/ 设置DWG文件路径/
    Set p FeatureDataset = pWorkspace. OpenFeatureDataset
    (DWG- name) ‘/ 打开DWG特征数据/
    Set p FeatureClassContainer = p FeatureDataset
     For Count = 0 To p FeatureClassContainer. ClassCount
    —1‘/ 分类特征数据/
      ⋯‘/ 代码略,读入DWG 数据,生成点D、点Z、线
    X、面M FeatureLayer/
     Next Count
     pMxDoc. UpdateContent s ’/ 刷新显示/
    (2) 读入转换文件。
    Open " ZHWJ . TXT" For Input As # 1‘/ 打开转换
    文件/
     Do While Not EOF (1) ‘/ 循环读取转换文件读到数
    组ZH 中/
      Input # 1 , ZH (Number , 1) , ZH (Number , 2) ,
    ZH(Number , 3) , ZH(Number , 4)
      Number = Number + 1‘/ 循环到数组的下一行/
     Loop
    Close # 1‘/ 关闭转换文件/
    (3) 根据转换文件分类选取,并存储为Shape
    文件,并按辽宁省城镇地籍数据建库标准添加属性
    字段。
    Set pMxDoc = Application. Document‘/ 取得焦点Map
    对象/
    Set pMap = pMxDoc. FocusMap‘/ 设置当前活动视图/
    ‘/ 创建一个新的空间书签对象,并设置它定位到焦点地
    图的当前可视范围/
    Set pActiveView = pMap
    For I = 1 To Number —1‘/ 按行循环存放转化文件的
    数组/
     Select Case ZH( I , 1) ‘/ 根据数组第一列/
       Case“Z”‘/ 如果ZH( I , 1) = ”Z”,为注记点层/
       Set p FeatureLayer = pMap . Layer (0)
       Set p FeatureSelection = p FeatureLayer‘/ 指定查
    询的图层为注记点层/
      Case“M”‘/ 如果ZH( I , 1) = ”M”, 查询的图层为
    面层(代码略) /
      Case“X”‘/ 如果ZH( I , 1) = ”X”, 查询的图层为
    线层(代码略) /
      Case“D”‘/ 如果ZH ( I , 1) = ”D”, 查询的图层为
    点层(代码略) /
    End Select‘/ 语句结束
    Set pQueryFilter = New QueryFilter‘/ 查询过滤器/
    pQueryFilter. WhereClause = " " + ZH( I ,2) + " = " + ZH
    ( I ,3) + " "‘/ 创建查询过滤器/
    ‘/ 以下Shape 文件存在,不存在创建,并添加地籍需要
    的字段,插入选择结果/
    If Check - for - shapefile ( Path , ZH( I ,4) ) = False Then
      ‘/ 自己定义函数,按指定路径创建Shape 文件,添
    加地籍需要的字段/
      Fun - Create - AddField ( Path)
    End If
    Set pNewFeatureClass = p TargetWorkspace. OpenFea2
    tureClass (ZH( I ,4) ) ‘/ 打开shape/
    Set pCursor = p FeatureClass. Search ( pQueryFilter ,
    False) ‘/ 执行选择,获取选择指针/
    Set p Feature = pCursor. Next Feature‘/ 游标指针指向
    第一个位置的上面/
    Do Until ( (p Feature Is Nothing) Or (bAbort) )‘/ 选择
    不为空,根据指针遍历要素/
      Set p Geom = p Feature. ShapeCopy
      Set pBuffer. Shape = p Geom‘/ 获取要素的空间
    范围/
      For i = 0 To p Feature. Fields. FieldCount —1‘/ 返
    回所有字段的数目/
       ‘/ 代码略,循环选择要素的属性及其值/
      Next
      p Insert . Insert Feature pBuffer ‘/ 插入到shape
    文件/
      Set p Feature = pCursor. Next Feature‘/ 游标指针
    移动到下个位置/
     Loop‘/ 返回到Do 语句/
    Next‘/ 移动到数组下一行位置/
    213  程序运行结果
    转换文件是根据辽宁省城镇地籍数据建库
    分类标准编写的,利用转换程序对图形进行分类
    转换,并利用程序添加了属性字段,经验证达到
    38 现 代 测 绘     第30 卷
    了辽宁省城镇地籍数据建库标准。
    3  结 论
    这种转换方法,利用ArcMap 内置的VBA 程
    序,对DWG 数据根据转换文件,直接进行分类转
    换,用户可以按需要,按图层(Layer) 、颜色(color) 、
    线形(Linetype) 、厚度( Thickness) 、块名( Text ) 等
    分类转换,也可以要求提取部分感兴趣的数据,用
    户不必了解DWG 数据的存储格式,只需编辑转换
    文件,程序就可以根据转换文件,提取不同的数据
    并转为Shape 格式。本程序已经过实际的验证,结
    果较好。因此,对于DWG 转为Shape 数据有一定
    的意义。
    参考文献
    1  薛伟. MapObject 地理信息系统程序设计[M] . 北京:国
    防工业出版社,2004
    2  田鹏波,刘清. AutoCAD 到Map Info 的地形图转换[J ] .
    城市勘测, 2003 (1) : 32 - 34
    3  刘光,刘小东. 地理信息系统二次开发教程- VB. net 和
    Mapobject 实现[M] . 北京:清华大学出版社,2004
    4  王钰. 用VBA 开发AutoCAD 应用程序[M] . 北京:人
    民邮电出版社,1999 : 97 - 145
  • 相关阅读:
    Java多线程之“同步”
    50 道 Java 线程面试题(转载自牛客网)
    Ubuntu14.04搭建Caffe(仅CPU)
    【译】OkHttp3 拦截器(Interceptor)
    OkHttp3 使用详解
    JSP ---- 声明、表达式、脚本、注释
    dom解析和sax解析的区别及优缺点
    一个java源文件中为什么只能有一个public类。
    js传入参数为字符串问题
    java project中 xml文件路径问题
  • 原文地址:https://www.cnblogs.com/zhangjun1130/p/1756933.html
Copyright © 2020-2023  润新知