魅优论文范文网

 找回密码
 立即注册
查看: 12208|回复: 0
打印 上一主题 下一主题

[计算机理论] 基于ComGIS的从Shape文件到Dxf文件格式转换的方法

[复制链接]

8005

主题

8005

帖子

2万

积分

论坛元老

Rank: 8Rank: 8

积分
24099
跳转到指定楼层
楼主
发表于 2014-4-10 09:43:30 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
[摘  要]:本文详细分析了DXF和Shape文件结构,并介绍了一种从Shape文件到DXF文件转换的简单方法,解决了GIS系统软件与AutoCAD制图软件之间的数据共享的问题。并经过作者实践证明,该方法简单有效。
[关键词]:DXF文件,Shape文件,MapObject
A Way of Format Translation
from Shape File to Dxf File on Base of ComGIS
Abstract:This article analyzes the form of DXF file and Shape file in detail, and introduces a simple method of translating Shape file into DXF file to solve the problem of the data sharing between AutoCAD system and GIS system. Through the author’s practice, it has been confirmed that the means is efficient.
Key words:Dxf File   Shape File   MapObject

随着软件组件式开发技术的逐渐成熟,GIS组件(如ESRI 的MapObject和MapInfo的MapX)在专业型地理信息系统开发中扮演了重要的角色[3],然而GIS二次开发组件都具有其天生的局限性,即不同系统之间的数据转换功能非常弱,特别是基本不具备从GIS数据到AutoCAD制图系统的数据格式转换功能,影响GIS的数据共享。因此为了实现数据的共享,必须进行数据格式的转换,目前,通用的数据格式转换方式有以下几种:
一、数据格式转换方法
1、常规的GIS数据格式转化方法
就是采用某种编程语言首先读取源数据文件,提取源文件中的图形信息和属性信息,然后再写入目标文件中去。这种方法需要同时非常熟悉两种数据文件的格式,因此给数据转换带来了不小的难度。
2、利用数据格式转换工具
这种方法简单方便,但是通用数据格式转换器难以避免的会丢失一些图形信息,转换出来的图形一般还需要一些特别的处理,如图形颜色设置,符号设置,区域填充设置。
3、利用第三方数据文件访问工具进行数据格式转换
这种方法灵活简单,也具有很强的灵活性,开发难度小,代价就是需要第三方的数据访问组件。随着GIS组件式开发技术的逐渐成熟,各种GIS组件都具有访问其本身的GIS数据的功能,如MapObject可以访问ESRI Shape Files、ArcInfo Coverage 和VPF等矢量数据格式。利用GIS组件的这种特点可以灵活的自己编写与其他数据格式转换的程序,或者在GIS系统的二次开发中集成数据格式转换的功能,实现 GIS数据共享。本文研究的内容就是利用GIS组件(MapObject)进行由Shape到Dxf的格式转换。
二、基于ComGIS的从Shape文件到Dxf文件格式转换的方法
1、 Shape文件结构
ESRI的Shape文件是二进制文件,能够同时存储空间图形数据和属性数据。一个Shape文件包括三个文件:一个主文件(*.shp),一个索引文件(*.shx),和一个dBASE(*.dbf)表。主文件是一个直接存取变量记录长度文件,其中每个记录描述一个有它自己的vertices列表的shape。在索引文件中,每个记录包含对应主文件记录离主文件头开始的偏移,dBASE表包含了实体的属性数据。图形数据和属性数据通过索引号建立一一对应的关系。
Shape文件是按照地物类型来组织的。地物类型可以分为简单的分为点(Point)、线(Line)、面(Polygon)三种类型,一个Shape文件中只能包括一种类型的地物,即只能包括点、线或者面状地物中的一种。点状地物存储的是一组坐标(X,Y),线包括简单线和多段线,存储的是一系列的坐标串(X1,Y1,X2,Y2…),面状地物存储的是一系列封闭的坐标串(X1,Y1,X2,Y2, …, X1,Y1)。
2、DXF文件结构   
DXF文件有两种格式:ASC码文本格式和二进制格式。前者可以用记事本打开,简单易读,后者存储效率高[2]。DXF文件最小组成单位是组(GROUP),一个DXF文件由多个组组成。每个组在DXF文件中占两行。第一行是组码(GROUP CODE),它是一个整数;第二行是组值(GROUP VALUE),它的数据类型取决于组码的数值。例如X坐标的组码为10,Y坐标的组码为20,Z坐标的组码为30。一个DXF文件分为多个节(SECTION),每个节均由多个组(GROUP)组成。每个节均由一个组值为字符串“SECTION”的0组开始,后跟组值为表示段名的字符串的2组,其后为组成该节的各个组,最后以组值为字符串“ENDSEC”的0组表示该节结束。所有节都结束后,在DXF文件的最后是组值为字符串EOF(END OF FILE)的0组作为文件的结束标志。一个完整的DXF文件由以下七个节(SECTION)组成:
A.        标题(HEADER)节:包括与图形相关联的变量的设置,例如图形节最大、最小X坐标和最大、最小Y坐标($LIMMIN,$LIMMAX),点显示模式($PDMODE),点尺寸($PDSIZE)等。其中的每一个变量都通过组码 9 给出变量名,并由其后的组码提供变量值。
B.        类(CLASSES)节:类节保存由应用程序定义的类,而该类的实例则出现在块节(BLOCKS)、实体节(ENTITIES)和对象节(OBJECTS)中。
C.        表(TABLE)节:包含命名项的定义,存放一系列表。包括线型(LTYPE)表、层(LAYER)表、文本字样(STYLE)表、视(VIEW)表、用户坐标系统(USC)表、视窗配制(VPORT)表、尺寸标注式样(DIMSTYLE)表、应用标识(APPID)表。
D.       块(BLOCK)节:存放块定义的实体。对图形中每个块引用,在块节中都必需有一个条目与之对应。
E.        实体(ENTITIES)节:存放图形实体,其中包括块插入实体。DXF图形文件中的所有图元(包括点、线、面、插入块,注记文字等实体)都将在ENTITIES节定义。
F.        实体(OBJECTS)节:存储非图形对象。
G.       预览图像(THUMBNAILIMAGE)节:只有当预览图像被保存在DXF文件中时该节才存在。
编写一个构造完备的DXF文件的程序是比较困难且烦琐的,因为必须保持图形的一致性,以使AutoCAD能够接受它,同时还必须保持信息的完整性。值得庆幸是一个DXF文件可以只包含以上七个节中的若干个节,而不是全部节。以上七个节中,最重要的是实体(ENTITIES)节,实体节存储了DXF文件所有的图形对象。一个最简单的DXF文件可以只包含实体(ENTITIES)节,而不需要包含其他任何节。这样就大大降低了DXF文件编写的难度。
3、 Shape文件到DXF文件转化的实现
由于Shape文件是二进制文件,且文件格式复杂,直接使用编程语言读取Shape文件具有一定的困难,由此作者使用第三方开发组件MapObject提供的对Shape文件的数据访问接口来读取Shape文件内容,大大降低了Shape文件到DXF文件格式转化的编程工作量。
MapObject是目前最优秀的GIS二次开发组件之一,他提供了一系列的GIS制图功能和访问ESRI Shape Files的数据访问接口[1]。利用MapObject对Shape文件的数据访问功能来提取Shape的图形信息,具有不丢失图形信息、数据访问简单等优点。下面是Shape文件类型与DXF图元类型对照表:
地物类型
SHAPE文件地物类型
DXF图元类型

MoShapeTypePoint
Point,Block
线
MoShapeTypeLine
Line

MoShapeTypePolygon
Polygon
文字
注记(不属于Shape文件类型)
TEXT
  图1.  Shape文件地物类型与DXF文件图元类型对照表
作者以某市地下管线Shape文件为例,实现了将管线Shape文件转化为Auto CAD系统DXF文件,并将数据转化功能集成到某市地下管线管理信息系统中,很好的解决了地下管线管理系统与Auto CAD制图系统之间的数据格式共享问题。转化过程中没有丢失图形信息。下面以地下管点Shape文件为例,简单介绍如何将点图元写入DXF文件。点状地物对应DXF文件的点图元,但是由于Shape文件中点状地物通常表示地图上的一个独立地物,如电线杆等,他具有某些特殊的符号,因此往往需要把Shape文件的点状地物作为一个块(Block)插入到DXF文件中,这也是通用的文件格式转换工具所不能做到的。下面是一个插入图块的通用函数:
Public Sub InsertBlock(lyrName As String, blkName As String, X As Double, Y As Double)
      Print #fnum, 0
      Print #fnum, "INSERT"  ‘插入图块组码
      Print #fnum, 8
      Print #fnum, lyrName   ‘插入图块的图层名
      Print #fnum, 100
      Print #fnum, "AcDbBlockReference"
      Print #fnum, 2
      Print #fnum, blkName   ‘插入的图块名
      Print #fnum, 10
      Print #fnum, X         ‘插入图块点X坐标
      Print #fnum, 20
      Print #fnum, Y         ‘插入图块点Y坐标
End Sub


3、结束语
作者结合在系统开发过程中的实践经验,提出了一种新的数据格式转化方法,使用GIS二次开发组件MapObject进行Shape文件到DXF文件的数据格式转化,转化后的图形没有信息丢失,在GIS二次开发中得到了很好的应用。

参考文献
[1] http://www.esrichina-bj.cn/
[2] http://mjtd.com/
[3] 地理信息系统-原理、方法和应用,邬伦等,科学出版社,2002
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机访问本页请
扫描左边二维码
         本网站声明
本网站所有内容为网友上传,若存在版权问题或是相关责任请联系站长!
站长联系QQ:7123767   myubbs.com
         站长微信:7123767
请扫描右边二维码
www.myubbs.com

QQ|Archiver|手机版|小黑屋|魅优论文范文网 ( 琼ICP备10200388号-7 )

GMT+8, 2024-4-28 19:28 , Processed in 0.220485 second(s), 20 queries .

Powered by 高考信息网 X3.3

© 2001-2013 大学排名

快速回复 返回顶部 返回列表