shp文件格式.docx
《shp文件格式.docx》由会员分享,可在线阅读,更多相关《shp文件格式.docx(31页珍藏版)》请在冰豆网上搜索。
shp文件格式
.
shp文件格式
SDE,ARC/INFO,PCARC/INFO,Data
AutomationKit(DAK)
和ArcCAD软件提供了shape
到coverage的数据转换器,ARC/INFO
同样提供了coverage到shape的转换器。
为了和
其他数据格式交换,shape文件的格式在本报告中被出版。
其他数据流,比如来自全球定位
系统(GPS)接收机的数据能同样被存为
shape文件或X,Y事件表。
Shape文件技术描述计算机程序能通过使用本节的技术描述来产生,读,写
shape文件。
一个ESRI的shape文件包括一个主文件,一个索引文件,和一个
dBASE表。
主文件是一
个直接存取,变量记录长度文件,其中每个记录描述一个有它自己的
vertices列表的shape。
在索引文件中,每个记录包含对应主文件记录离主文件头开始的偏移,
dBASE表包含一
feature一个记录的feature的特征。
几何和属性间的一一对应关系是基于记录数目的。
在
dBASE文件中的属性记录必须和主文件中的记录是相同顺序的。
命名习惯所有文件名都符合
8.3命名习惯。
主文件,索引文件和dBASE文件有相同的前缀。
前缀必须是由字符或数字(
a-Z,0-9)开始,后跟0到7个字符(a-Z,0-9,_,)主文件的后
缀是.shp,索引文件的后缀是
.shx,dBASE表的后缀是.dbf。
文件名中的所有字母在对文件
名敏感的操作系统中都是小写的。
例子
主文件:
counties.shp索引文件:
counties.shxdBASE表:
ounties.dbf数字类型一个
shape文件存储整数和双精度数,本文档的余数指以下类型:
整数:
有符号32位整数(4字节)
双精度:
有符号64位IEEE双精度浮点数(8字节)浮点数必须是数字的值。
负无穷,正
无穷和非数字(NaN)值在shape文件不被允许。
然而shape文件支持'没有数据'的值这样的概念,但是目前只用于衡量。
某些小于-1038被shape文件读取程序用来代表'没有数据'的值。
下面的第一节描述shape文件的总体结构和组织。
第二节描述shape文件支持的每种shape类型的记录内容。
主文件的组织
主文件(.shp)由固定长度的文件头和接着的变长度记录组成。
每个变长度记录是由固定长
度的记录头和接着的变长度记录内容组成。
图1图解了主文件的结构。
图1主文件的结构
文件头
记录头记录内容
记录头记录内容
记录头记录内容
记录头记录内容
.
.
记录头记录内容
Shape文件中所有的内容可以被分为二类:
与数据相关的:
。
主文件记录内容
。
主文件头的数据描述域(Shape类型,边界盒等)
与文件管理相关的:
。
文件和记录长度
。
记录偏移等
整数和双精度整数在文件头中组成数据描述域,在主文件的记录内容是小ndian(PC或Intel)
字节顺序。
组成文件的其余部分和文件管理的整数和双精度浮点数是大endian(Sun或
Motorola)字节顺序。
主文件头
主文件头100字节长。
表1显示带有字节位置,值,类型和字节顺序的文件头中的域。
在此表中,位置是相对于文件的开始。
表
1主文件头的描述
位置
域
值
类型
字节顺序
0字节
文件代码
9994
整数
大
4字节
未被使用
0
整数
大
8字节
未被使用
0
整数
大
12
字节
未被使用
0
整数
大
16
字节
未被使用
0
整数
大
20
字节
未被使用
0
整数
大
24
字节
文件长度
文件长度
整数
大
28
字节
版本
1000
整数
小
32
字节
Shape类型
Shape
类型
整数
小
36
字节
边界盒
Xmin
双精度
小
44
字节
边界盒
Ymin
双精度
小
52
字节
边界盒
Xmax
双精度
小
60
字节
边界盒
Ymax
双精度
小
68
字节*
边界盒
Zmin
双精度
小
76
字节*
边界盒
Zmax
双精度
小
84
字节*
边界盒
Mmin
双精度
小
92
字节*
边界盒
Mmax
双精度
小
*未被使用,值为0.0,若没有被衡量或是Z轴。
文件长度的值是在16位字下文件的总长度(包括组成文件头的50个16位字)。
在shape
文件中的所有非空shape被需要是同种shape类型。
Shape类型的值如下:
.
.
值shape类型
0
空shape
1
点
3
多线
5多边形
8多点
11点Z
13
多线Z
15
多边形Z
18
多点Z
21
点M
23
多线M
25
多边形M
28
多点M
31
多斑块
没有被定义的Shape
类型值(2,4,6
等直到33)为将来可能的使用而保留。
目前
shape
文件被局限于包含以上定义的同种
shape类型。
在将来
shape文件可以被允许包含多于一
种shape类型。
若混合shape
类型被实现,文件头中的
shape类型将标识该文件。
主文件头的边界盒存储文件中
shape的实际幅度。
最小边界
X和Y直交的(潜在的
M,Z)
长方形包含了所有的
shape。
若shape文件是空的(没有记录),min,Ymin,Xmax,Ymax
的值是未被定义的。
Mmin和Mmax能包含shape文件用来衡量不包含衡量的
shape类型
的'没有数据'的值(参见2页的数字类型),记录头
每个记录的头存储了记录的数目和记录内容的长度。
记录头有一个固定长度
8字节。
表2
显示文件记录头中域的字节位置,值,类型和字节顺序。
在表中,位置是相对于记录的开始
的。
表2
主文件记录头文件的描述
位置
域
值
类型
字节顺序
0字节
记录数目
记录数目
整数
大
4字节
内容长度
内容长度
整数
大
记录数目从1开始。
一个记录的内容长度是按16位字衡量的记录内容长度。
每个记录因此为文件的总长度贡献
(4+内容长度)个16位字,正如文件头是24字节一样。
主文件记录内容
Shape文件记录内容包含一个shape类型和接着的该shape的几何数据。
记录内容的长度依赖于在一个shape中部分和vertices的数目。
对每种shape类型,我们首先描述该shape
然后是它在磁盘上的存储镜像。
在表3到16,位置是相对于记录内容的开始。
.
.
空shape
shape类型为0指代一种不带几何数据的空shape,每种要素类型(点,线,多边形等)都
支持空,在同一个shape文件中有点和空的点是有效的。
常常空shape是放东西的地方;
在shape文件产生时被使用和在产生后更被广泛地使用。
表3空shape记录内容
位置域值类型数目字节顺序
0字节shape类型0整数1小
在X,Y位置的Shape类型
点一个点包括一对以X,Y顺序排列的双精度的坐标
Point
{
DoubleX//X坐标
DoubleY//Y坐标
}
表4点记录内容
位置
域
值
类型
数目
字节顺序
0字节
shape
类型
1
整数
1
小
4字节
X
X
双精度
1
小
12字节
Y
Y
双精度
1
小
多点一个多点代表一个点的集合:
MultiPoint
{
Double[4]
Box
//边界盒
Integer
NumPoints
//点的数目
Point[NumPoints]
Points
//在集合中的点
}
边界盒以Xmin,Ymin,Xmax,Ymax
存储。
表5多点记录内容
位置
域
值
类型
数目
字节顺序
0字节
shape
类型
8
整数
1
小
4字节
Box
Box
双精度
4
小
36字节
NumPoints
NumPoints
整数
1
小
40字节
Points
Points
点
NumPoints
小
PolyLine一条PolyLine是指一条包含一个或多个部分的有序的vertices的集合。
一个部分
是指二个或多个点彼此连接的顺序。
部分间彼此相连或不连。
部分间彼此可能相交或不相交。
因为该定义没有禁止有确定坐标的连续点,shape文件的读程序必须掌握这样的情况。
在另
外,退化(degenerate)和可能导致零长度的结果是不被允许的。
.
.
PolyLine
{
Double[4]Box//边界盒
IntegerNumParts//部分的数目
IntegerNumPoints//点的总数目
Integer[NumParts]Parts//在部分中第一个点的索引
Point[NumPoints]Points//所有部分的点
}
PolyLine的域在以下为更详细的描述:
Box被存储的PolyLine的边界盒,以Xmin,Ymin,Xmax,Ymax的顺序存储。
NumParts在PolyLine中部分的数目。
NumPoints所有部分的点的总数目。
PartsNumParts长度的数列。
为每条PolyLine存储它在点数列中的第一个点的索引。
数列索引是从0开始的。
PointsNumPoints长度的数列。
在PolyLine中的每一部分的点被尾到尾存储。
部分2
的点跟在部分1的点之后,如此下去。
部分数列对每一部分保持开始点的数列索引。
在部分间点之间没有界限。
表6PolyLine记录内容
位置
域
值
类型
数目
字节顺序
0字节
shape类型
3
整数
1
小
4字节
Box
Box
双精度
4
小