zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    Saltstack module acl 详解
    Saltstack python client
    Saltstack简单使用
    P5488 差分与前缀和 NTT Lucas定理 多项式
    CF613D Kingdom and its Cities 虚树 树形dp 贪心
    7.1 NOI模拟赛 凸包套凸包 floyd 计算几何
    luogu P5633 最小度限制生成树 wqs二分
    7.1 NOI模拟赛 dp floyd
    springboot和springcloud
    springboot集成mybatis
  • 原文地址:https://www.cnblogs.com/zhangjun1130/p/1756933.html
Copyright © 2011-2022 走看看