文章目录
参考
有需要的同学请移步上面这位大佬的github库。我只是对内容做一个小小的总结。
一、文件介绍
1.shapefile组成
ESRI shapefile由一个主文件,一个索引文件组成。和一个dBASE表。主文件是一个直接访问、可变记录长度的文件,其中每条记录都用它的顶点列表来描述一个形状。在索引文件中。每条记录包含对应的主文件记录从主文件开始的偏移量。dBASE表包含每个特性一条记录的特性属性。几何图形和属性之间的一对一关系是基于记录号的。dBASE文件中的属性记录必须与主文件中的记录的顺序相同。
命名规范
所有的文件名都遵循8.3命名约定。的主要文件。索引文件。和dBASE文件具有相同的前缀。前缀必须以字母数字字符(a-Z)开头。0 - 9)。后跟0个或最多7个字符(a-Z)。0 - 9)。主文件的后缀是.shp。索引文件的后缀是.shx。dBASE表的后缀是.dbf。在具有区分大小写的文件名的操作系统上,文件名中的所有字母都是小写的。
数值类型
shapefile存储整数和双精度数。本文件的其余部分将引用以下类型:整数:带符号的32位整数(4字节)双:带符号的64位IEEE双精度浮点数(8字节)浮点数必须是数值。正无穷。在shapefile中不允许出现负无穷和非数字(NaN)值。然而,shapefiles支持“无数据”值的概念。但它们目前仅用于测量。shapefile读取器认为任何小于10的浮点数表示“无数据”值。
2.Main File(.shx)的文件结构
主文件(.shp)包含一个固定长度的文件头,后面跟着可变长度的记录。每个可变长度的记录由固定长度的记录头和可变长度的记录内容组成。图1说明了主文件的组织。
字节序
shapefile中的所有内容可以分为两类:
- 相关的数据
- 主文件的记录内容
- 主文件头的数据描述字段(Shape Type)。Bounding Box等)
- 相关文件管理
- 文件和记录长度
- 记录偏移量。等等
组成文件头(下面标识)中的数据描述字段和主文件中的记录内容的整数和双精度整数采用小端字节顺序
(PC或Intel)。构成文件和文件管理的其余部分的整数和双精度浮点数采用大端字节顺序
(Sun或Motorola)。相关参考
:浅谈字节序(Byte Order)及其相关操作
主文件的Header
主文件头的长度为100字节。表1显示了文件头中的字段及其字节位置、值、类型和字节顺序。在表中,位置与文件的开始有关。
文件长度的值是以16位字表示的文件总长度(包括组成头的50个16位字)。shapefile中的所有非空形状都需要具有相同的形状类型。形状类型的值如下:
目前,shapefile被限制为包含与上面指定的形状相同类型的形状。在未来。shapefiles可以允许包含一种以上的形状类型。如果实现了混合形状类型,头中的形状类型字段将标志该文件主文件头中的Bounding Box文件中形状的实际范围:与包含所有形状的X和Y轴(可能还有M和Z轴)正交的最小边框。如果shapefile是空的(即没有record)。Xmin,Ymin,Xmax,Ymax是未指定的。Mmin和Mmax可以包含“no data”值,用于测量形状类型的shapefile,这些形状文件不包含度量值。
Record Headers
每个记录的头存储记录编号和记录的内容长度。记录头的长度为8字节。表2显示了文件头中的字段及其字节位置、值、类型和字节序。在表中,position和record的start有关。
记录数字从1开始。记录的内容长度是记录内容部分的长度,用16位的字来度量。每条记录,因此。将(4 +内容长度)16位的字作为文件的总长度&