ESRI Shapefile格式解析

ESRI Shapefile格式解析

概述

Shapefile属于一种矢量图形格式,它能够保存几何图形的位置及相关属性。但这种格式没法存储地理数据的拓扑信息。Shapefile在九十年代初的ArcView GIS的第二个版本被首次应用。目前,许多自由的程序或商业的程序都可以读取Shapefile。

Shapefile是一种比较原始的矢量数据存储方式,它仅仅能够存储几何体的位置数据,而无法在一个文件之中同时存储这些几何体的属性数据。因此,Shapefile还必须附带一个二维表用于存储Shapefile中每个几何体的属性信息。Shapefile中许多几何体能够代表复杂的地理事物,并为他们提供强大而精确的计算能力。然而,单个shapefile文件只能包含一种几何体,例如一个shapefile文件不可能同时包含折线与多边形数据。

Shapefile由多个文件组成,其中有三个文件必不可少:

.shp — 图形格式,用于保存元素的几何实体。
.shx — 图形索引格式。几何体位置索引,记录每一个几何体在shp文件之中的位置,能够加快向前或向后搜索一个几何体的效率。
.dbf — 属性数据格式,以dBase III+ 的数据表格式存储每个几何形状的属性数据。

表示同一数据的一组文件其文件名前缀应该相同。例如,存储一个关于湖的几何与属性数据,就必须有lake.shp,lake.shx与lake.dbf三个文件。而其中“真正”的Shapefile的后缀为shp,然而仅有这个文件数据是不完整的,必须要把其他两个附带上才能构成一组完整的地理数据。
除了这三个必须的文件以外,还有八个可选的文件,其中最有用的莫过于.prj文件:

.prj —投影信息文件,用于保存well-known text格式的地理坐标系统与投影信息。

在每个.shp, .shx与.dbf文件之中,图形在每个文件的排序是一致的。也就是说,.shp的第一条记录与.shx及.dbf之中的第一条记录相对应,如此类推。此外,在.shp与.shx之中,有许多字段的字节序是不一样的。因此用户在编写读取这些文件格式的程序时,必须十分小心地处理不同文件的不同字节序。

Shapefile通常以XY的顺序来记录地理坐标,一般X对应经度,Y对应纬度,用户必须注意X,Y的顺序。

.shp文件格式

Shapefile格式的主文件包含了地理参照数据。该文件由一个定长的文件头和一个或若干个变长的记录数据组成。每一条变长数据记录包含一个记录头和一些记录内容。详细的数据存储格式由Esri Shapefile技术描述.[1]提供。注意,虽然Shapefile文件的后缀名与AutoCAD的图形字体源格式它们的文件后缀名相同的,都是.shp ,请不要把它们混淆。

主文件头包含17个字段,共100个字节,其中包含九个4字节(32位有符号整数,int32)整数字段,紧接着是八个8字节(双精度浮点数)有符号浮点数字段。

字节 类型 字节序 用途
0–3 int32 大端序 文件编号,永远是整数9994(十六进制数0x0000270a)
4–23 int32 大端序 五个没有被使用的32位整数
24–27 int32 大端序 文件长度,包括文件头。(用16位整数表示)
28–31 int32 小端序 版本号
32–35 int32 小端序 图形类型(参见下面)
36–67 double 小端序 最小外接矩形 (MBR),也就是一个包含shapefile之中所有图形的矩形。以四个浮点数表示,分别是X坐标最小值,Y坐标最小值,X坐标最大值,Y坐标最大值。
68–83 double 小端序 Z坐标值的范围。以两个浮点数表示,分别是Z坐标的最小值与Z坐标的最大值。
84–99 double 小端序 M坐标值的范围。以两个浮点数表示,分别是M坐标的最小值与M坐标的最大值。

然后这个文件包含不定数目的变长数据记录,每个数据记录以一个8字节记录头开始:

字节 类型 字节序 用途
0–3 int32 大端序 记录编号 (从1开始)
4–7 int32 大端序 记录长度(以16位整数表示)

在记录头的后面就是实际的记录:

字节 类型 字节序 用途
0–3 int32 小端序 图形类型(参见下面)
4– - - 图形内容

变长记录的内容由图形的类型决定。Shapefile支持以下的图形类型:

图形类型 字段
0 空图形
1 Point(点) X, Y
3 Polyline(折线) (最小包围矩形)MBR,组成部分数目,点的数目,所有组成部分,所有点
5 Polygon(多边形) (最小包围矩形)MBR,组成部分数目,点的数目,所有组成部分,所有点
8 MultiPoint(多点) (最小包围矩形)MBR,点的数目,所有点
11 PointZ(带Z与M坐标的点) X, Y, Z, M
13 PolylineZ(带Z或M坐标的折线) 必须的: (最小包围矩形)MBR,组成部分数目,点的数目,所有组成部分,所有点,Z坐标范围, Z坐标数组\可选的: M坐标范围, M坐标数组
15 PolygonZ(带Z或M坐标的多边形) 必须的: (最小包围矩形)MBR,组成部分数目,点的数目,所有组成部分,所有点,Z坐标范围, Z坐标数组\可选的: M坐标范围, M坐标数组
18 MultiPointZ(带Z或M坐标的多点) 必须的: (最小包围矩形)MBR,点的数目,所有点, Z坐标范围, Z坐标数组\可选的: M坐标范围, M坐标数组
21 PointM(带M坐标的点) X, Y, M
23 PolylineM(带M坐标的折线) 必须的: (最小包围矩形)MBR,组成部分数目,点的数目,所有组成部分,所有点\可选的: M坐标范围, M坐标数组
25 PolygonM(带M坐标的多边形) 必须的: (最小包围矩形)MBR,组成部分数目,点的数目,所有组成部分,所有点\可选的: M坐标范围, M坐标数组
28 MultiPointM(带M坐标的多点) 必须的: (最小包围矩形)MBR,点的数目,所有点\可选的: M坐标范围, M坐标数组
31 MultiPatch 必须的: (最小包围矩形)MBR,组成部分数目,点的数目,所有组成部分,所有点,Z坐标范围, Z坐标数组\可选的: M坐标范围, M坐标数组

在普通的使用中,Shapefile通常包含点、折线与多边形。带有Z坐标的形状是三维的。带有M坐标的形状是包含一个用户指定的测量值,该测量值定义在每一个点坐标之上。三维的Shapefile十分罕见。此外,Shapefile的M测量值通常已经被其他功能更加强大和稳健的数据库取代,Shapefile一般只负责几何数据。

.shx文件格式

Shapefile的文件索引包含与.shp文件相同的100个字节的文件头,然后跟随着不定数目的8字节定长记录,每个记录都有两个字段:

字节 类型 字节序 用途
0–3 int32 大端序 记录位移(用16位整数表示)
4–7 int32 大端序 记录长度(用16位整数表示)

因为这个图形索引每个数据项都是定长的,因此程序只要在这个图形索引中向前或向后遍历,读取索引中所记录的记录位移与记录长度,程序就可以很快地向前或向后遍历整个Shapefile,在.shp文件中找到任意一个几何体的正确位置。

.dbf文件格式

属性文件(.dbf)用于记录属性信息。它是一个标准的DBF文件,也是由头文件和实体信息两部分构成。这个文件可以用excel打开。
其中文件头部分的长度是不定长的,它主要对DBF文件作了一些总体说明(见表2.7),其中最主要的是对这个DBF文件的记录项的信息进行了详细地描述,比如对每个记录项的名称、数据类型、长度等信息都有具体的说明。一般来说,shapefile文件有多少个属性就有多少个记录项
文件头结构如下表所示:

字节 类型 说明
0 1个字节 表示当前的版本信息。
1-3 3个字节 表示最近的更新日期,按照YYMMDD格式。
4-7 1个32位数 文件中的记录条数。
8-9 1个16位数 文件头中的字节数。
10-11 1个16位数 一条记录中的字节长度。
12-13 2个字节 保留字节,用于以后添加新的说明性信息时使用,这里用0来填写。
14 1个字节 表示未完成的操作。
15 1个字节 dBASE IV编密码标记。
16-27 12个字节 保留字节,用于多用户处理时使用。
28 1个字节 DBF文件的MDX标识。在创建一个DBF 表时 ,如果使用了MDX 格式的索引文件,那么 DBF 表的表头中的这个字节就自动被设置了一个标志,当你下次试图重新打开这个DBF表的时候,数据引擎会自动识别这个标志,如果此标志为真,则数据引擎将试图打开相应的MDX 文件。
29 1个字节 Language driver ID.
32-X (n*32)个字节 记录项信息描述数组。n表示记录项的个数。这个数组的结构在下个表中有详细的解释。
X+1 1个字节 作为记录项终止标识。

每条记录项都是对一项属性的描述,结构见下表:

字节 类型 说明
0-10 11个字节 记录项名称,是ASCII码值。例如:“LAYER”,“AREA”,“GM_TYPE”,"NAME"等。
11 1个字节 记录项的数据类型,是ASCII码值。(B、C、D、G、L、M和N,具体的解释见表2.9)。
12-15 4个字节 保留字节,用于以后添加新的说明性信息时使用,这里用0来填写。
16 1个字节 记录项长度,二进制型。
17 1个字节 记录项的精度,二进制型。
18-19 2个字节 保留字节,用于以后添加新的说明性信息时使用,这里用0来填写。
20 1个字节 工作区ID。
21-30 10个字节 保留字节,用于以后添加新的说明性信息时使用,这里用0来填写。
31 1个字节 MDX标识。如果存在一个MDX 格式的索引文件,那么这个记录项为真,否则为空。

记录项数据类型如下表所示:

代码 数据类型 允许输入的数据
B 二进制型 各种字符。
C 字符型 各种字符。
D 日期型 用于区分年、月、日的数字和一个字符,内部存储按照YYYYMMDD格式。
G (General or OLE) 各种字符。
N 数值型(Numeric) - . 0 1 2 3 4 5 6 7 8 9
M (Memo) 各种字符。

写完所有记录项之后,就是实体信息了。按与shp中几何实体相同的次序写入即可。

参考

维基百科
ESRI文档
CSDN博客

猜你喜欢

转载自blog.csdn.net/qq_42679415/article/details/129899766
今日推荐