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