介绍
Shapefile文件格式是一种矢量图形格式,它能够保存几何图形的位置和相关属性,但是它没法存储地理数据的拓扑信息,所以shapefile文件经常是和其他文件一起使用,本文主要关注shapefile文件的结构组成,关于shapefile文件的详细描述可以参考百度百科中关于shapefile文件的描述。
文件结构
Shapefile文件由文件头和内容两个部分组成,其中文件头是由固定长度的数据组成,具体如下:
Bytes | Field | Value | Type | Byte Order |
---|---|---|---|---|
0-3 | File Code | 9994 | Integer | Big Endian |
4-23 | Unused | 0 | Integer | Big Endian |
24-27 | File Length | File Length | Integer | Big Endian |
28-31 | Version | 1000 | Integer | Little Endian |
32-35 | Shape Type | Shape Type | Integer | Little Endian |
36-67 | Minimum Bounding Rectangle | Xmin, Ymin, Xmax and Ymax | double | Little Endian |
68-83 | Bounding Box | Zmin, Zmax | double | Little Endian |
84-99 | Bounding Box | Mmin, Mmax | double | Little Endian |
需要注意的是文件中的的File Length是16位字表示的,所以使用时注意转换,在内容部分,我们也会看到相同的表示
在文件头中有个比较特殊的字段Shape Type, 它用来描述shapefile文件表示的几何图形类型,所有值对应的几何类型如下:
Value | Shape Type |
---|---|
0 | Null Shape |
1 | Point |
3 | Polyline |
5 | Polygon |
8 | MultiPoint |
11 | PointZ |
13 | PolyLineZ |
15 | PolygonZ |
18 | MultiPointZ |
21 | PointM |
23 | PolyLineM |
25 | PolygonM |
28 | MultiPointM |
31 | MultiPatch |
Shapefile文件头后跟着的就是不定长度的文件内容,Shapefile文件内容由许多record组成,每个record由固定长度的header和可变长度的content两个部分组成,header部分如下:
Bytes | Field | Value | Byte Order |
---|---|---|---|
0-3 | Record Number | Record Number | Big Endian |
4-7 | Record Length | Record Length | Big Endian |
content部分包含具体的描述几何结构的数据内容,如当前record表示点信息的时候,content的结构如下:
Bytes | Shape Type | Value | Type | Number | Byte Order |
---|---|---|---|---|---|
0-3 | Shape Type | 1 | Integer | 1 | Little Endian |
4-11 | X | X | Double | 1 | Little Endian |
12-19 | Y | Y | Double | 1 | Little Endian |
其他几何类型的数据结构可以参考ESRI Shapefile Technical Description,下面是ESRI中关于Polygon的结构描述: