[摘 要]:本文详细分析了dxf和shape文件结构,并介绍了一种从shape文件到dxf文件转换的简单方法,解决了gis系统软件与autocad制图软件之间的数据共享的问题。并经过作者实践证明,该方法简单有效。
[关键词]:dxf文件,shape文件,mapobject
a way of format translation<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
from shape file to dxf file on base of comgis
key words:dxf file shape file mapobject
随着软件组件式开发技术的逐渐成熟,gis组件(如esri 的mapobject和mapinfo的mapx)在专业型地理信息系统开发中扮演了重要的角色[3],然而gis二次开发组件都具有其天生的局限性,即不同系统之间的数据转换功能非常弱,特别是基本不具备从gis数据到autocad制图系统的数据格式转换功能,影响gis的数据共享。wWW.lunwen.net.cn因此为了实现数据的共享,必须进行数据格式的转换,目前,通用的数据格式转换方式有以下几种:
一、数据格式转换方法
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、结束语<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
作者结合在系统开发过程中的实践经验,提出了一种新的数据格式转化方法,使用gis二次开发组件mapobject进行shape文件到dxf文件的数据格式转化,转化后的图形没有信息丢失,在gis二次开发中得到了很好的应用。
参考文献
[1] /
[2]
[3] 地理信息系统-原理、方法和应用,邬伦等,科学出版社,2002
中国论文网(www.lunwen.net.cn)免费学术期刊论文发表,目录,论文查重入口,本科毕业论文怎么写,职称论文范文,论文摘要,论文文献资料,毕业论文格式,论文检测降重服务。