柳佳佳,栾晓岩
(1.信息工程大学地理空间信息学院,河南郑州450052;2.96669部队,北京100000)
ShapeFile格式文件写入方法研究
柳佳佳1,栾晓岩2
(1.信息工程大学地理空间信息学院,河南郑州450052;2.96669部队,北京100000)
针对写ShapeFile文件所涉及的数据类型、赋值方法较少的现状,详细分析坐标文件、属性文件及索引文件中所包含的内容,并在VC6.0中实现上述3种文件的写入。
ShapeFile;数据结构;地理信息系统
地理信息系统是近20年来新兴的一门集地理学、计算机技术、遥感技术和地图学于一体的交叉学科,已广泛应用在城市、资源、环境、交通、人口、土地、灾害和规划管理等领域。国外地理信息系统研究时间较长,已经形成了许多成熟的GIS软件,其中以ArcGIS最为典型,它是Esri公司集40余年GIS咨询和开发经验而研发出的一套完整的GIS平台产品,其具有强大的地图制作、空间数据管理、空间分析等功能,这些功能都是在数据的基础上进行的。而矢量数据是一种重要的数据格式,ShapeFile格式是Esri公司开发的用来描述空间数据的几何特征和属性特征的非拓扑实体矢量数据格式,是工业标准的矢量数据文件。目前,ArcGIS软件在我国得到了广泛的应用,但是不同的行业有不同的矢量数据格式,只有充分研究ShapeFile格式,才能将不同的矢量格式转换成ArcGIS能够接受的数据格式。ShapeFile文件主要包括坐标文件(SHP)、索引文件(SHX)和属性文件(DBF)。3个基本文件的数据说明很多文献中已经作了详细的叙述,读取方法也有详细介绍,虽然读写是一个相反的过程,但是在写入文件时,数据结构中的内容计算方法还比较模糊,本文主要针对格式中数据类型及需要计算的记录项进行详细的分析。
1.坐标文件(SHP)结构
坐标文件是ShapeFile文件中的主文件,用于记录空间坐标信息,是一个直接存取、变长记录的文件。其中,每个记录描述一个实体,它由头文件和实体信息两部分构成。
文件头由100字节的说明信息组成,包括9个int型和7个double型数据。
实体信息负责记录坐标信息,其记录结构基本相似,每条记录都由记录头和记录内容(空间坐标对)两部分组成。记录头的内容包括记录号(Record Number)和坐标记录长度(Content Length)两个记录项。需要注意的是,它们的位置都是big。对于big数据写入的时候须注意,因为通常数据的位序都是little,需要将little型转换成lig型才能进行写入操作。记录号和坐标记录长度都是int型,并且记录号都是从1开始;坐标记录长度则用16位字来衡量。记录内容包括目标的几何类型(ShapeType)和具体的坐标记录(X、Y),记录内容因要素几何类型的不同其具体的内容及格式都有所不同。地物类型可以分为点(Point)、线(PolyLine)和面(Polygon)3种类型。点状地物在ShapeFile中存储的是一组坐标(X、Y),坐标值为double型。线状地物在ShapeFile中存储的是一系列的点坐标串(X1,Y1,X2,Y2),一个线目标可能包括多个子线段,子线段之间可以是相离的,也可以相交。ShapeFile允许出现多个坐标完全相同的连续点,但是不允许出现某个退化的、长度为0的子线段。线数据结构主要包括:线目标的坐标范围(Double[4]型),通过比较每个坐标点的大小,分别求出X、Y坐标的最大值和最小值,从而得到范围;线目标所包含的子线段的个数(int型);线目标所包含的顶点个数(int型);每个子线段的第1个坐标点在Points的位置(int[顶点数]型);记录所有坐标点的数组(Point[顶点数]型)。面状地物在ShapeFile中存储的是一系列封闭的坐标串(X1,Y1,X2,Y2,…,X1,Y1),这些封闭的坐标串至少由4个顶点构成,并且是封闭的,无自相交现象。由于多边形经常会出现包含关系,则对于含有岛的多边形,构成它的环有内外环之分,可通过每个环的顶点的排列顺序或者方向来区分这个环到底是内环还是外环:内环的顶点按照逆时针顺序排列,而外环的顶点排列顺序是顺时针方向。如果一个多边形只由一个环构成,那么它的顶点排列顺序为顺时针方向,每条多边形记录的数据结构与线目标的数据结构完全相同。
2.属性文件(DBF)结构
属性文件用于记录属性信息,是一个标准的DBF文件,由头文件和实体信息两部分构成。文件头部分的长度是不定长的,其主要是对DBF文件作一些总体说明。其中,最主要的是对该BDF文件记录项的信息进行详细的描述,包括每个记录项的名称、数据类型、长度等信息。属性文件实体信息部分是一条条属性记录,每条记录都是由若干个记录项构成。因此,只要依次循环写入每条记录即可。
3.索引文件(SHX)结构
索引文件主要包含坐标文件的索引信息,文件中每个记录包含对应的坐标文件记录距离坐标文件文件头的偏移量。通过索引文件可以很方便地在坐标文件中定位到指定目标的坐标信息。
索引文件也是由头文件和实体信息两部分构成,其中文件头部分是一个长度固定为100字节的记录段,其内容与坐标文件的文件头基本一致;实体信息部分以记录为基本单位,每一条记录包括偏移量(offset)和记录段长度(Content Length)两个记录项,两个记录项数据类型是int型,位序为big。
根据数据结构在VC6.0中实现了写入3种文件,对其中的数据类型以及需要计算的内容进行了分析和实现。
1.数值位序转换
将little型转换成big型,实现方法如下:
2.FileLength的计算方法
文件长度值是用16位字表示的文件总长度,包括文件头100字节,即50个16位字。由于实体信息的长度随着要素类型的不同而不同,计算方法如下:
1)点要素 FileLength=14*记录数+50。其中,14为实体信息的16位字数,包含8字节的记录头和20字节的记录内容。
2)线要素的FileLength与点要素的区别主要在于实体信息中所包含的记录内容不同,线要素每条记录的contentlength=(4+32+4+4+4*子段数+16 *每条记录中的点数)/2。那么线要素的FileLength就是每条记录的contentlength与记录头的和的总和。
3)面要素的FileLength与线的相似,在计算contentlength时子段数为面的子环数。
3.属性文件变化的记录项及计算方法
1)文件头中的字节数。HeaderByteNum=32*属性子段数+32。
2)一条记录中的字节长度。RecordBytenum= 19* 属性中double型字段数+9* 属性中int型子段数+char型的子段长度和。从上述计算中可以看出,double型在ShapeFile文件中对应的字符数为19,int型为9,char型可根据实际需要动态设定。
4.索引文件偏移量的计算方法
在索引文件中,每个记录包含对应主文件记录距离主文件头起始位置的偏移量。
1)点要素位移量Offset=50+14* 序号。
2)面要素位移量随着坐标文件中的对应记录长度contentlength的变化而变化。部分实现代码如下:
本文首先介绍了地理信息最基本的矢量数据内容写入ShapeFile文件所涉及的3个基本文件的数据结构;然后介绍了实现过程中需要计算的内容的方法。按照上述方法既能完成地理信息中点、线、面要素的写入,同时也为其他格式转换为Shape-File格式奠定了基础。
[1] 肖强,赵国成.ShapeFile与军用交换格式数据转换的研究与实现[J].海洋测绘,2010,30(5):59-61.
[2] http:∥blog.163.com/adslxk@126/blog/static/1006106 7120105250560946.
[3] 陈文玲.空间数据转换研究与探讨[D].合肥:合肥工业大学,2009.
[4] 马英杰.基于3GS的核勘查数据采集及处理系统研究[D].成都:成都理工大学,2010.
[5] 郑翠玲.空间数据的格式转换研究与实现[J].现代计算机:下半月版,2010(9):171-174.
[6] 郝燕玲,唐文静,赵玉新,等.Shapefile格式电子海图数据集成存储研究[J].微计算机信息,2008,24(21):26-28.
[7] 涂圣文.CAD、GIS及VR集成技术在工程领域的应用研究[D].武汉:华中科技大学,2005.
Research of the Method to Write a ShapeFile-format File
LIU Jiajia,LUAN Xiaoyan
0494-0911(2012)09-0090-03
P208
B
2012-08-13
国家863计划(2009AA12Z228)
柳佳佳( 1981—) ,女,辽宁丹东人,博士生,主要研究方向为空间认知。