基于ComGIS的从Shape文件到Dxf文件格式转换

打印本文 - 下载本文〗〖0条评论 - 150推荐〗〖字数:2800字〗

随着软件组件式开发技术的逐渐成熟,gis组件(如esri的mapobject和mapinfo的mapx)在专业型地理信息系统开发中扮演了重要的角色[3],然而gis二次开发组件都具有其天生的局限性,即不同系统之间的数据转换功能非常弱,特别是基本不具备从gis数据到autocad制图系统的数据格式转换功能,影响gis的数据共享。因此为了实现数据的共享,必须进行数据格式的转换,目前,通用的数据格式转换方式有以下几种:

一、数据格式转换方法

1、常规的gis数据格式转化方法

就是采用某种编程语言首先读取源数据文件,提取源文件中的图形信息和属性信息,然后再写入目标文件中去。这种方法需要同时非常熟悉两种数据文件的格式,因此给数据转换带来了不小的难度。

2、利用数据格式转换工具

这种方法简单方便,但是通用数据格式转换器难以避免的会丢失一些图形信息,转换出来的图形一般还需要一些特别的处理,如图形颜色设置,符号设置,区域填充设置。

3、利用第三方数据文件访问工具进行数据格式转换

这种方法灵活简单,也具有很强的灵活性,开发难度小,代价就是需要第三方的数据访问组件。随着gis组件式开发技术的逐渐成熟,各种gis组件都具有访问其本身的gis数据的功能,如mapobject可以访问esrishapefiles、arcinfocoverage和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文件中占两行。第一行是组码(groupcode),它是一个整数;第二行是组值(groupvalue),它的数据类型取决于组码的数值。例如x坐标的组码为10,y坐标的组码为20,z坐标的组码为30。一个dxf文件分为多个节(section),每个节均由多个组(group)组成。每个节均由一个组值为字符串“section”的0组开始,后跟组值为表示段名的字符串的2组,其后为组成该节的各个组,最后以组值为字符串“endsec”的0组表示该节结束。所有节都结束后,在dxf文件的最后是组值为字符串eof(endoffile)的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制图功能和访问esrishapefiles的数据访问接口[1]。利用mapobject对shape文件的数据访问功能来提取shape的图形信息,具有不丢失图形信息、数据访问简单等优点。

版权声明: 请尊重本站原创内容,如需转载本范文,请注明原文出处:中国范文模板网
原文地址:http://www.fanwenmuban.com/lw/jsjyy/220061.html

    按字数查找计算机应用研究

    相关评论

    评论列表(网友评论仅供网友表达个人看法,并不表明本站同意其观点或证实其描述)