shp文件格式说明_第1页
shp文件格式说明_第2页
shp文件格式说明_第3页
shp文件格式说明_第4页
shp文件格式说明_第5页
已阅读5页,还剩27页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、shp 文件格式说明SHAP或件格式SDE,ARC/INFO,PC ARC/INFO,Data Automation Kit(DAKArcCAD 软件提供了 shape至1 coverage的数据转换器,ARC/INFO同样提供了 coverage到shape的转换器。为了和其他数据格式交 换,shape文件的格式在本报告中被出版。其他数据流,比如来自全球定位系统(GP嗨收机的数据能同样被存为 shape文件或X,Y事件表。Shape文件技术描述计算机程序能通过使用本节的技术描述来产生,读,写 shape文件。一个ESRI的shape文件包括一个主文件,一个索引文件,和一个 dBASE表。主文

2、件是一个直接存取,变量记录长度文件,其中每个记录描述一个有它自己的 vertices列表的shape。在索引文件 中,每个记录包含对应主文件记录离主文件头开始的偏移,dBASEI包含一 feature一个记录的feature的特征。几何和属性间的一一对应关系是基于记录数目的。在dBASEt件中的属性记录必须和主文件中的记录是相同顺序 的。命名习惯所有文件名都符合8.3命名习惯。主文件,索引文件和 dBAS或件有相同的前缀。前缀必须是由字符或数字(a-Z,0-9)开始,后跟0到7个字符(a-Z,0-9, _,)主文件的后缀是.shp, 索引文件的后缀是.shx, dBASEBg的后缀是.dbf。

3、文件名中的所有字母在对文件名敏感的操作系统中都是小写的。例子主文件:counties.shpxx 文件:counties.shxdBASEil:ounties.dbf数字类型一个shape文件存储整数和双精度数,本文档的余数指以下类型:整数:有符号 32 位整数( 4 字节)双精度:有符号64位IEEEM精度浮点数(8字节)浮点数必须是数字的值。负无 穷,正无穷和非数字(NaN)值在shape文件不被允许。然而shape文件支持没有数据'的值这样的概念,但是目前只用于衡量。某些小于1038被shape文件读取程序用来代表没有数据的值。下面的第一节描述shape文件的总体结构和组织。第二

4、节描述shape文件支持的每种shape类型的记录内容。主文件的组织主文件(.shp)由固定长度的文件头和接着的变长度记录组成。每个变长度 记录是由固定长度的记录头和接着的变长度记录内容组成。图1 图解了主文件的结构。图 1 主文件的结构文件头记录头记录内容记录头记录内容记录头记录内容记录头记录内容记录头记录内容Shape文件中所有的内容可以被分为二类:与数据相关的:。主文件记录内容。主文件头的数据描述域(Shape类型,边界盒等)与文件管理相关的:。文件和记录xx。记录偏移等整数和双精度整数在文件头中组成数据描述域,在主文件的记录内容是小ndian (PC或Intel)字节顺序。组成文件的其

5、余部分和文件管理的整数和双精度浮点数是大endian (Sun或Motorola)字节顺序。主文件头主文件头100 字节长。表1 显示带有字节位置,值,类型和字节顺序的文件头中的域。在此表中,位置是相对于文件的开始。表 1 主文件头的描述位置域值类型字节顺序0字节文件代码9994整数大 4字节未被使用0整数大 8 字节未被使用0 整数大 12 字节未被使用0 整数大 16 字节未被使用0 整数大 20 字节未被使用0 整数大24 字节文件长度整数大28 字节版本1000 整数小32字节Shape类型整数小36字节边界盒Xmin双精度小44字节边界盒Ymin双 精度小52字节边界盒Xmax双精度

6、小60字节边界盒Ymax双精度小68字节*边 界盒Zmin双精度小76字节*边界盒Zmax双精度小84字节*边界盒Mmin双精 度小92字节*边界盒Mmax双精度小*未被使用,值为0.0,若没有被衡量或是Z轴。文件长度的值是在16 位字下文件的总长度(包括组成文件头的50 个 16 位字)。在shape文件中的所有非空shape被需要是同种shape类型。Shape类型的值如下:值shape类型0 空 shape1点3 多线5 多边形8 多点11点 Z13多线Z15多边形 Z18多点Z21 点 M23 多线M25 多边形 M28 多点M31 多斑块没有被定义的Shape类型值(2, 4, 6等

7、直到33)为将来可能的使用而保 留。目前shape文件被局限于包含以上定义的同种shape类型。在将来shape文件可以被允许包含多于一种 shape类 型。若混合shape类型被实现,文件头中的shape类型将标识该文件。主文件头的边界盒存储文件中shape的实际幅度。最小边界X和Y直交的 (潜在的M,Z)长方形包含了所有的shape。若shape文件是空的(没有记录),min,Ymin,Xmax,YmaxW值是未被定义 的。Mmin和Mmax能包含shape文件用来衡量不包含衡量的shape类型的没有数据'的值(参见2页的数字类型),记录 头每个记录的头存储了记录的数目和记录内容的

8、长度。记录头有一个固定长度字节。表2 显示文件记录头中域的字节位置,值,类型和字节顺序。在表中,位置是相对于记录的开始的。表 2 主文件记录头文件的描述位置域值类型字节顺序0 字节记录数目整数大4 字节内容长度整数大记录数目从 1 开始。一个记录的内容长度是按16 位字衡量的记录内容长度。每个记录因此为文件的总长度贡献(4内容长度)个16 位字,正如文件头是24 字节一样。主文件记录内容Shape文件记录内容包含一个shape类型和接着的该shape的几何数据。记 录内容的长度依赖于在一个shape中部分和vertices的数目。对每种shape类型,我们首先描述该shape然后是它在磁盘上的

9、存储镜像。在表3 到 16,位置是相对于记录内容的开始。空 shapeshape类型为0指代一种不带几何数据的空shape,每种要素类型(点, 线,多边形等)都支持空,在同一个 shape文件中有点和空的点是有效的。常常空shape是放东西的地方;在shape文件产生时被使用和在产生后更被广泛地使用。表3空shape记录内容位置域值类型数目字节顺序 0字节shape类型0整数1小在X,Y位置的 Shape类型点一个点包括一对以X,Y顺序排列的双精度的坐标PointDouble X /X 坐标DoubleY /Y坐标表4点记录内容位置域值类型数目字节顺序 0字节shape类型1整数1小4字节XX

10、 双精度 1 小 12 字节 YY 双精度 1 小多点一个多点代表一个点的集合:MultiPointDouble4Box/ 边界盒IntegerNumPoints/ 点的数目PointNumPointsPoints/在集合中的点边界盒以Xmin,Ymin,Xmax,Yma将储。表 5 多点记录内容位置域值类型数目字节顺序 0字节shape类型8整数1小4字节BoxBox双精度4小36字节NumPoints NumPoints整数1小40字节PointsPoints点NumPoints小PolyLine一条PolyLine是指一条包含一个或多个部分的有 序的vertices的集合。一个部分是指二

11、个或多个点彼此连接的顺序。部分间彼此相连或不连。部分间彼此可能相交或不相交。因为该定义没有禁止有确定坐标的连续点,shape文件的读程序必须掌握这样的情况。在另外,退化(degenerate)和可能导致零长度的结果是不被允许的。PolyLineDouble4IntegerIntegerBoxNumPartsNumPoints/ 边界盒/ 部分的数目/ 点的总数目IntegerNumParts Parts / 在部分中第一个点的索引PointNumPoints Points所有部分的点PolyLine的域在以下为更详细的描述:Box被存储的PolyLine的边界盒,以 Xmin,Ymin,Xma

12、x,Ymax勺顺序存储。NumParts 在 PolyLine 中部分的数目。NumPoints所有部分的点的总数目。Parts NumParts长度的数歹!J。为每条 PolyLine存储它在点数列中的 第一个点的索引。数列索引是从0 开始的。Points NumPoints长度的数列。在PolyLine中的每一部分的点被尾到尾存储。部分2 的点跟在部分1 的点之后,如此下去。部分数列对每一部分保持开始点的数列索引。在部分间点之间没有界限。表6 PolyLine记录内容位置域值类型数目字节顺序 0字节shape类型3整数1小4字节Box Box双精度 4 小 36 字节 NumParts N

13、umParts 整数 1 小 40 字节 NumPoints NumPoints 整数 1 小 44 字节 PartsParts整数 NumParts小 X字节PointsPoints 点 NumPoints 小注意:X=44+4*NumParts多边形一个多边形包含一个或多个环。一个环是四或多 个点彼此相连组成的一个闭合的彼此不相交的环。一个多边形可能包括多个外环,一个环的vertices的顺序和方向指示环的哪一边是多边形的内部。在多边形中的洞的环的vertices是逆时针方向的。一个环组成的多边形总 是顺时针方向的。一个多边形的环是被做为它的一部分的。因为该定义没有禁止有确定坐标的连续的点

14、,shape文件读程序必须解决这种情况。在另外,退化(degenerated口可能导致零长度的结果是不被允许的。多边形的结构被 定义为PolyLine结构,正如下文:PolygonDouble4Box / 边界盒IntegerNumParts/ 部分的数目IntegerNumPoints/点的总数目IntegerNumParts Parts / 在部分中第一个点的索引 PointNumPoints Points /所有部分的点多边形的域在以下为更详细的描述:Box被存储的多边形的边界盒,以 Xmin,Ymin,Xmax,YmaX勺顺序存储。NumParts在多边形中环的数目。NumPoints

15、所有环的点的总数目。PartsNumParts长度的数列。为每条环存储它在点数列中的第一个点的索引。数列索引是从0 开始的。Points NumPoints长度的数列。在多边形中的每一个环的点被尾到尾存储。环2 的点跟在环1 的点之后,如此下去。部分数列对每一环保持开始点的数列索引。在环间点之间没有界限。图 2 中的例子图演示了多边形的表现。该图中的多边形有一个洞,总共是8个 vertices。关于多边形shape有以下重要注意事项:环是闭合的(第一个和最后一个vetex 必须是一样的)在点数列中环的顺序是不重要的。存储在shape文件中的多边形必须是clean, 一个clean的多边形是指这

16、样的一个多边形:1 没有自交。这意味着属于一个环的一段可能不与另一个环的一段相交。一个多边形的环可能在vetices处彼此相交,但不是在沿段处。重合的段被认为是相交的。2在定义多边形的线的正确一边有多边形的内部。一个观察者以vertex 顺 序沿环走时,右边的邻居是多边形的内部。一个独环的多边形的vertices因此都是顺时针的。在这些多边形中的洞 有一个逆时针的方向。当定义在多边形中的洞同样是顺时针时,发生"Dirty" 多边形错误。这会导致内部的重叠。图 2 一个多边形的实例在此例中,NumParts等于2,NumPoints等于10。注意洞多边形的点的顺序 是逆序的。

17、05部分: 050123456789点:v1 v2 v3 v4 v1 v5 v8 v7 v6 v5表 7 多边形记录内容位置域值类型数目字节顺序 0字节shape类型5整数1小4字节Box Box双精度 4 小 36 字节 NumParts NumParts 整数 1 小 40 字节 NumPoints NumPoints 整数 1 小 44 字节 PartsParts整数 NumParts小 X字节PointsPoints 点 NumPoints 小注意:X=44+4* NumParts在X,Y空间中衡量的shape类型该种shape有一个额外的坐标 M,注意"没有数据"

18、的值可以被指定为M 的一个值。PointM 一个PointM包括一对以X,Y顺序排列的双精度的坐标,再加上衡量 M。PointMDouble X /X 坐标Double Y /Y 坐标Double M /M 衡量 表 8 PointM 记录内容位置域值类型数目字节顺序 0字节shape类型21整数1小4字节XX 双精度1 小 12 字节 YY 双精度1 小 20 字节 MM 双精度 1 小多 PointM 一个多 PointM 代表一个PointM 的集合:MultiPointDouble4IntegerPointNumPointsDouble2DoubleNumPoints 细的描述:Box

19、被存储的多PointM的边界盒,NumPoints点的总数目。BoxNumPointsPointsM RangeM Array/ 边界盒/ 点的数目/在集合中的点/ 衡量M 的上下界/ 衡量多 PointM 的域在以下为更详以 Xmin,Ymin,Xmax,Ymax勺顺序存储。Points NumPoints长的点的数列。M Range以Mmin,Mmax顺序存储的多 PointM的最小,最大值。M Array NumPoints 长的衡量的数组。表 9 多 PointM 记录内容位置域值类型数目字节顺序 0字节shape类型28整数1小4字节BoxBox双精度4小36字节NumPoints

20、NumPoints整数1小40字节PointsPoints点NumPoints小X*字节MminMmin双精度1小X+8*字节MmaxMmax双精度1小X+傕咛节MarryMarry双精度NumPoints 小注意:X= 40+ (16* NumPoints) *可选的多LineM一条shape文件的多LineM包含一个或多个部分。指一条包含一 个或多个部分的有序的vertices的集合。一个部分是指二个或多个点彼此连接的顺序。部分间彼此相连或不连。部 分间彼此可能相交或不相交。PolyLineMDouble4IntegerIntegerIntegerNumPartsPointNumPoint

21、sBox/ 边界盒NumParts/ 部分的数目NumPoints/ 点的总数目Parts/在部分中第一个点的索引Points /所有部分的点M Range/ 衡量M 的上下界DoubleNumPoints M Array 以下为更详细的描述:所有点的衡量PolyLineM的域在Double2Box被存储的PolyLineM的边界盒,以 Xmin,Ymin,Xmax,YmaX勺顺序存储。NumParts 在 PolyLineM 中部分的数目。NumPoints所有部分的点的总数目。PartsNumParts长度的数歹!J。为每条 PolyLineV存储它在点数歹!J中的第一个点的索引。数列索引

22、是从0 开始的。PointsNumPoints长度的数列。在 PolyLineM中的每一部分的点被尾到尾存储。部分2 的点跟在部分1 的点之后,如此下去。部分数列对每一部分保持开始点的数列索引。在部分间点之间没有界限。M Range以Mmin,Mmax顺序存储的多 PointM的最小,最大值MArray NumPoints长的衡量的数组,在多PointM每部分的衡量被被尾 到尾存储部分2 的点跟在部分1 的点之后,如此下去。部分数列对每一部分保持开始点的数列索引。在部分间点之间 没有界限。表10 PolyLineM记录内容位置域值类型数目字节顺序 0字节shape类型23整数1小4字节BoxB

23、ox双精度 4 小 36 字节 NumParts NumParts 整数 1 小 40 字节 NumPoints NumPoints 整数 1 小 44 字节 PartsParts整数 NumParts小 X字节PointsPoints 点 NumPoints 小 Y*字节 MminMmin 双精度1小丫+8*字节MmaxMmax双精度1小丫+16*字节MarryMarry 双精度 NumPoints 小注意:X=44+4* NumParts Y= 40+ (16* NumPoints) *可选的多边形 M 一个多边形M 包含一个或多个环。一个环是四或多个点彼此相连组成的一个闭合的彼此不相交的

24、环。注意相交是在X,Y空间计算,而不是在X,Y,M空间。一个多边形可能包括多个外 环,一个多边形的环是被做为它的一部分的。多边形 M 的结构被定义为PolyLineM 结构,正如下文:PolygonMDouble4Box / 边界盒IntegerNumParts / 部分的数目IntegerNumPoints / 点的总数目IntegerNumPartsPointNumPointsParts /在部分中第一个点的索引Points /所有部分的点32 / 31Double2M Range / 衡量 M 的上下界DoubleNumPoints M Array /所有点的衡量多边形M 的域在以下为更

25、详细的描述:Box被存储的多边形的边界盒,以 Xmin,Ymin,Xmax,YmaX勺顺序存储。 NumParts在多边形M中环的数目。NumPoints所有环的点的总数目。PartsNumParts长度的数列。为每条环存储它在点数列中的第一个点的索引。数列索引是从0 开始的。PointsNumPoints长度的数列。在多边形中的每一个环的点被尾到尾存储。环2 的点跟在环1 的点之后,如此下去。部分数列对每一环保持开始点的数列索引。在环间点之间没有界 限。M Range以Mmin,Mmax顺序存储的多 PointM的最小,最大值。MArray NumPoints长的衡量的数组,在多PointM

26、每部分的衡量被被尾到尾存储部分2 的点跟在部分1 的点之后,如此下去。部分数列对每一部分保持开始点的数列索引。在部分间点之间 没有界限。关于PolygonM shape有以下注意事项:环是闭合的(第一个和最后一个vetex 必须是一样的)在点数列中环的顺序是不重要的。表 11 多边形 M 的记录内容位置域值类型数目字节顺序 0字节shape类型5整数1小4字节Box Box双精度 4 小 36 字节 NumParts NumParts 整数 1 小 40 字节 NumPoints NumPoints 整数 1 小 44 字节 PartsParts整数 NumParts小 X字节PointsPo

27、ints 点 NumPoints 小 Y*字节 MminMmin 双精度1小丫+8*字节MmaxMmax双精度1小丫+16*字节MarryMarry 双精度 NumPoints 小注意:X=44+4* NumParts Y= 40+ (16* NumPoints) *可选的在 X,Y,Z间中衡量的 shape类型该种 shape有个额外的坐标M,注意"没有数据"的值可以被指定为M的一个值。PointZ一个PointZ包括一对以X,Y,Z顺序排列的双精度的坐标,再加上衡量 M。PointMDoubleDoubleYDoubleZX /X 坐标/Y 坐标/Z 坐标/M 衡量表1

28、2 PointZ记录内容Double M位置域值类型数目字节顺序X 双精度1 小 12 字节 Y双精度 1 小 28 字节 Measure代表一个PointZ的集合:MultiPointDouble4IntegerPointNumPointsDouble2DoubleNumPointsDouble20字节shape类型21整数1小4字节XY 双精度 1 小 20 字节 ZZM双精度1小多PointZ一个多PointZBox/ 边界盒/ 点的数目/在集合中的点/Z 的上下界/Z 的值NumPointsPointsZ RangeZ ArrayM Range/ 衡量 M 的上下界DoubleNumP

29、oints M Array / 衡量边界盒是以Xmin,Ymin,Xmax,YmaX勺顺序存储。ZRange是以 Mmin,Mmax 顺序存储的,M Range是以Mmin,Mmax顺序存储的。表 9 多 PointM 记录内容位置域值类型数目字节顺序 0字节shape类型28整数1小4字节BoxBox双精度4小36字节NumPoints NumPoints整数1小40字节Points Points 点 NumPoints 小 X字节 ZminZmin 双精度 1 小 X+8字节 ZmaxZmax双精度1小X+16字节ZarryZarry双精度NumPoints小Y*字节MminMmin双精度

30、1小丫+8*字节MmaxMmax双精度1小丫+16*字节MarryMarry双精度NumPoints小注意:X= 40+ (16* NumPoints) Y=X+16+(8* NumPoints)可选白多 LineZ一条 shape文件的多LineZ包含一个或多个部分。指一条包含一个或多个部分的有序 的 vertices 的集合。一个部分是指二个或多个点彼此连接的顺序。部分间彼此相连或不连。部 分间彼此可能相交或不相交。PolyLineZDouble4Box/ 边界盒IntegerNumParts / 部分的数目IntegerNumPoints / 点的总数目IntegerNumParts P

31、artsPointNumPoints Points/ 在部分中第一个点的索引/ 所有部分的点Double2Z Range /Z 的上下界DoubleNumPoints Z Array/Z 的值Double2M Range / 衡量 M 的上下界DoubleNumPoints M Array所有点的衡量PolyLineZ的域在以下为更详细的描述:Box被存储的PolyLineZ的边界盒,以Xmin,Ymin,Xmax,YmaX勺顺序存储。NumParts在PolyLineZ中部分的数目。NumPoints所有部分的点的总数目。Parts NumParts长度的数歹!J。为每条 PolyLineZ

32、存储它在点数歹!J中的第一个点的索引。数列索引是从0 开始的。PointsNumPoints长度的数列。在 PolyLineZ中的每一部分的点被尾到尾存储。部分2 的点跟在部分1 的点之后,如此下去。部分数列对每一部分保持开始点的数列索引。在部分间点之间没有界限。ZRange以Zmin,Zmax顺序存储的多 PointZ的最小,最大值。ZArray NumPoints长的衡量的数组,在多PointZ每部分的衡量被被尾到尾存储部分2 的点跟在部分1 的点之后,如此下去。部分数列对每一部分保持开始点的数列索引。在部分间点之间没有界限。M Range以Mmin,Mmax顺序存储的多 PointZ的最

33、小,最大值。MArrayNumPoints长的衡量的数组,在多PointZ每部分的衡量被被尾到尾存储部分2 的点跟在部分1 的点之后,如此下去。部分数列对每一部分保持开始点的数列索引。在部分间点之间没有界限。表14 PolyLineZ记录内容位置域值类型数目字节顺序 0字节shape类型23整数1小4字节BoxBox双精度 4 小 36 字节 NumParts NumParts 整数 1 小 40 字节 NumPointsNumPoints 整数 1 小 44 字节 PartsParts整数 NumParts小 X字节PointsPoints 点 NumPoints 小 Y字节 ZminZmi

34、n 双精度1小Y+8字节ZmaxZmax双精度1小Y+16字节ZarryZarry双精度NumPoints小Z*字节MminMmin双精度1小2+8*字节 MmaxMmax 双精度 1 小 2+16*字节 MarryMarry双精度NumPoints小注意:X=44+4*NumPartsY= X+ (16*NumPoints) Z=Y+16+(8*NumPoints) *可选Z 一个多边形Z 包含一个或多个环。一个环是四或多个点彼此相连组成的一个闭合的彼此不 相交的环。一个多边形可能包括多个外环,一个多边形Z的环是被做为它的一部分的。多边形Z的结构被定义为PolyLineZ结构,正如下文:Po

35、lygonZDouble4Box / 边界盒IntegerNumParts / 部分的数目IntegerNumPoints / 点的总数目IntegerNumParts Parts/ 在部分中第一个点的索引PointNumPointsPoints /所有部分的点Double2Z RangeDoubleNumPointsZ ArrayDouble2MRangeDoubleNumPointsM Array下为更详细的描述:/Z 的上下界/Z 的值/ 衡量 M 的上下界所有点的衡量多边形Z的域在以Box被存储的多边形的边界盒,以Xmin,Ymin,Xmax,Ymax勺顺序存储。NumParts在多边

36、形Z中环的数目。NumPoints所有环的点的总数目。PartsNumParts长度的数列。为每条环存储它在点数列中的第一个点的索引。数列索引是从0 开始的。PointsNumPoints长度的数列。在多边形中的每一个环的点被尾到尾存储。环2 的点跟在环1 的点之后,如此下去。部分数列对每一环保持开始点的数列索引。在环间点之间没有界限。ZRange以Zmin,Zmax顺序存储的多 PointZ的最小,最大值。ZArray NumPoints长的衡量的数组,在多PointZ每部分的衡量被被尾到尾存储部分2 的点跟在部分1 的点之后,如此下去。部分数列对每一部分保持开始点的数列索引。在部分间点之间

37、没有界限。M Range以Mmin,Mmax顺序存储的多 PointZ的最小,最大值。MArrayNumPoints长的衡量的数组,在多PointZ每部分的衡量被被尾到尾存储部分2 的点跟在部分1 的点之后,如此下去。部分数列对每一部分保持开始点的数列索引。在部分间点之间没有界限。关于PolygonZ shaped以下注意事项:环是闭合的(第一个和最后一个vetex 必须是一样的)在点数列中环的顺序是不重要的。表15多边形Z的记录内容位置域值类型数目字节顺序 0字节shape类型15整数1小4字节BoxBox双精度 4 小 36 字节 NumParts NumParts 整数 1 小 40 字

38、节 NumPointsNumPoints 整数 1 小 44 字节 PartsParts整数 NumParts小 X字节PointsPoints 点 NumPoints 小 Y字节 ZminZmin 双精度1小Y+8字节ZmaxZmax双精度1小Y+16字节ZarryZarry双精度NumPoints小Z*字节MminMmin双精度1小2+8*字节 MmaxMmax 双精度 1 小 2+16*字节 MarryMarry双精度NumPoints小注意:X=44+4*NumPartsY= X+ (16*NumPoints) Z=Y+16+(8*NumPoints) *可选 的多Patch一个Mul

39、tiPatch 包括许多表面斑块。每个表面斑块描述了一个表面。MultiPatch的表面斑块是指比如它的部分,控制一个MultiPatch部分的vertices顺序是如何被解释的部分类型。一个MultiPatch 的部分可以是以下类型:三角形条带三角形的连接条带,此处每个顶点(在开始二个后)完成一个新三角形。一个新三角形总是通过把新顶点和二个临近的原有点相连而得到。三角形扇三角形的连接扇,此处每个顶点(在开始二个后)完成一个新三 角形。一个新三角形总是通过把新顶点和一个个临近的原有点及这部分的第一个顶点相连而得到。外环多边形的外环。内环多边形的洞。第一环未定义类型的多边形的第一个环。环未定义类

40、型的多边形的环。一个简单的三角形条带或三角形扇代表一个简单的表面斑块。参见图3 看这些部分类型的例子。带环的部分的序列能描述有洞的多边形表面。该序列典型包括一个外环,代表斑块的外边界,用许多内环代表洞。当用代表表现带洞的多边形斑块环的集合的个体环是不知道,整个序列以第一环开始,接着是其他的环。不跟着第一环后的环的序列被认为是没有洞的外环的序列。图3 MultiPatch 部分例子用来对部分类型进行编码的值有:值部分类型0 三角形条带1 三角形扇2 外环3 内环4 第一环5环MultiPatchDouble4Box / 边界盒IntegerNumParts / 部分的数目IntegerNumPo

41、ints / 点的总数目IntegerNumParts PartsIntegerNumParts PartsTypesPointNumPoints PointsDouble2Z RangeDoubleNumPointsZ ArrayDouble2M RangeDoubleNumPointsM Array下为更详细的描述:/ 在部分中第一个点的索引/ 部分类型/ 所有部分的点/Z 的上下界/Z 的值/ 衡量 M 的上下界所有点的衡量多边形Z的域在以Box被存储的多边形的边界盒,以 Xmin,Ymin,Xmax,YmaX勺顺序存储。NumParts在多边形Z中环的数目。NumPoints所有环的点

42、的总数目。PartsNumParts长度的数列。为每条环存储它在点数列中的第一个点的索引。数列索引是从0 开始的。PartsTypeNumParts长度的数列,存储每一部分的类型。PointsNumPoints长度的数列。在多边形中的每一个环的点被尾到尾存储。环2 的点跟在环1 的点之后,如此下去。部分数列对每一环保持开始点的数列索引。在环间点之间没有界限。ZRange以Zmin,Zmax顺序存储的多 PointZ的最小,最大值。ZArray NumPoints长的衡量的数组,在多PointZ每部分的衡量被被尾到尾存储部分2 的点跟在部分1 的点之后,如此下去。部分数列对每一部分保持开始点的数

43、列索引。在部分间点之间没有界限。M Range以Mmin,Mmax顺序存储的多 PointZ的最小,最大值。MArrayNumPoints长的衡量的数组,在多PointZ每部分的衡量被被尾到尾存储部分2 的点跟在部分1 的点之后,如此下去。部分数列对每一部分保持开始点的数列索引。在部分间点之间没有界限。shp文件格式内部结构Shape文件是ArcGIS的基础文件类型,存储了非拓扑几何和属性信息。Shape文件支持点、线、区域的几何特征,由于不需要处理拓扑数据结构文件头,在编辑等方面具有更快的处理速度。本文通过对ESR公司发布的原版资料ESRI Shapefile Technical Descr

44、ip tio的翻译解读,剖析Shape文件的 结构,利用VB写出直接生成Shape文件的代码。2Shape文件结构2. IShape文件的文件构成 Shape文件由3个文件构成:主文件、索引文件、数据文件。其中主文件的后缀必须是.shp;索引文件的后缀必须是.shx数据文件的后缀 必须是.dbf,这3个文件共同组成Shape文件。各文件中存储的数据相互联系又各有区别。主文件中是Shape的位置信息 ;索引文件是对主文件的索引,指出主文件中记录在文件中的位置信息;数据文件中包括Shape的具体位置和属性信息。2.2. shp 文件的结构.shp文件由文件头和文件记录构成(图1),其中文件大部分结

45、构见表1。文件头记录头记录内容记录头记录内容记录头记录内容记录头记录内容记录头记录内容图1. shp文件的结构其中Shape类型是ArcGIS定义的图形类型,具体可以参考 ShapefileTechnicalDescrip tion。每个记录由记录头、记录内容两部分组成。记录头部分由两部分组成:03字节是长整型的记录数,47字节是记录内容的长度。文件头中的文件长度与记录头中的记录长度均以字( 2字节)为单位。记录内容对不同的Shape类型定义不一样,但原理是相同的。因篇幅所限 ,这里以记录点(point)类型为例进行说明。点(point)类型的每个记录的记录内容为:03字节长整型的Shape类

46、型、411字节双精度的X坐标、1219字节双精度的Y坐标。所以记录头中的记录 长度就是2 + 4 + 4 = 10个字长 ,文件头中文件长度就是50 (文件头长) +总记录数3 14。表1. shp 文件的文件头结构位置字段名称数据类型字节顺序0 文件代码9994 32 位整型 big - endian4 保留0 32 位整型big - endian8 保留0 32 位整型big - endian12 保留0 32 位整型big - endian16 保留0 32 位整型big - endian20 保留 0 32 位整型 big - endian24 文件长度32 位整型 big - end

47、ian28 版本 1000 32位整型 little - endian32 Shape类型 32 位整型 little - endian36范围框最小X值双精度little - endian44范围框最小Y值双精度little - endian52范围框最大X值双精度little - endian60范围框最大Y值双精度little - endian68范围框最小Z值双精度little - endian76范围框最大Z值双精度little - endian84 范围框最小M 值双精度little - endian92 范围框最大M 值双精度little - endian2.3. shx文件结构

48、.shx文件的结构与图1所示的.shp文件在总体结构上相同,但内容有所区别。文件头的定义与1shp一致,但文件长度指的是.shx的文件长度,所以这一项的数值是不同的。每 1 个记录没有记录头 ,内容有2 部分组成:03字节表示记录存储位置,以离文件开始处的字数来表示,即50 + 记录数3 14;记录长度,在点(point)类型中为102.4. dbf文件结构有关描述.dbf文件是Shape文件中的数据存储文件,其前缀必须与.shp和.shx文件一样。 每 1 个图形特征必须在1 个记录内。记录的顺序必须与.shp中的记录顺序一样。 在.dbf文件头中的年份值是以1900年为基础的,即其数值表示

49、年份与1900的差。3用VB编写直接写Shape文件的方法及代码在编写程序时要特别注意的是在一般的机器中写文件的字节顺序是little-endian 方式,即小的在低地址,大的在高地址;而big - endian正好相反,所以对big - endian方式的要 人为加以转换,本文编写了 little2big()函来实现。下面是以点类型为例用 VB写Shape文件的代码:txt2 shape ( )。Function little2big ( x1 As Long, myt1 As Byte,myt2 As Byte, myt3 As Byte, myt4 As Byte)mytl = Int(

50、 x1 / (2 八 24)myt2 = Int ( ( x1 - ( Int ( x1 / (2 八24) ) ) 3 2 八24) / (2 八 16)myt3 = Int ( ( x1 - myt1 3 2 八24 - myt2 3 2八 16)/ (2 八 8)myt4 = x1 - mytl 3 2 八 24 - myt2 3 2 八 16-myt3 3 2 八 8End FunctionPrivate Sub txt2 shape ( )Dim jdattribute (0 To 100) AsDouble 定义点位 置的 xDim wdattribute (0 To 100) A

51、s Double 定义点位置的 yDim zmattribute (0 To 100) As String定义点位置名称 ,如站名Dim ylattribute (0 To 100) AsDouble 存点的属 '性值 ,如站点雨量Dim filen As Long 文件长度Dim records AsLong 记录数Dim xmin AsDouble最小 x 值Dim xmax AsDouble最大 x 值Dim ymin AsDouble最/J弋 y 值Dim ymax AsDouble最大 y 值Dim zm AsVariant以下为临时变量Dim temp As StringDim lin0 As LongDim dblin0 AsDoubleDim mytl AsByte用于传递转换到big形式的字节临时变量Dim myt2 As ByteDim myt3 As ByteDim myt4 As Byte为了减小篇幅,本文省略信息的读入过程,即认为这些信息已经读到zmattribute ( )、 jdattribute ( ) 、wdattribute ( ) 、 ylattribute ( ) 、 records 等数组、变量,直接从写文件开始。Open (workfile + " shp " ) For Binary

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论