本文目录
- 1. .shp文件简介
- 2. shp文件格式
- 2.1 文件头
- 2.2 文件记录
- 2.3 多边形的段(Part)
- 3. shp文件读写——C++
- 3.1 仓库地址
- 3.2 代码结构简介
1. .shp文件简介
shp
文件是ESRI
(美国环境系统研究所公司)开发的一种用于存储和描述空间数据的文件格式(shapefile),目前已经成为GIS中的开放标准。shp
常用来描述基本几何对象:点、线、多边形。(shapefile其实也可以存储对象的各种人为定义的属性,但那些属性数据是存放在dBase File(dbf)
中的,不属于本文的内容。)
ArcMap
中这样描述:
Shapefile 是一种用于存储地理要素的几何位置和属性信息的非拓扑简单格式。 shapefile 中的地理要素可表示为点、线或面(区域)。 包含 shapefile 的工作空间还可以包含 dBASE 表,它们用于存储可连接到 shapefile 的要素的附加属性。
笔者
这样理解shape文件:
一种可扩展的、用于存储基本几何对象的、可描述基本地理信息的二进制文件格式。
shp
文件的读写,源代码(openfile仓库的shp文件夹中)在github上,有兴趣的同学可以自取,如对代码有任何疑问,欢迎提交issue
,或者添加笔者QQ:3495421705
。同时也欢迎各位同学加入到该仓库的建设和维护中。
注意,在本文中,只讨论shp
文件这一个文件格式相关内容,关于shx
和dbf
这两个文件格式,将会在后续文章中介绍。
2. shp文件格式
shp
文件格式比较简单,分为文件头
和记录列表
两块。
2.1 文件头
shp
文件头是一个定长100字节
的数据块,其中的内容由以下部分组成:
字段名 | 数据长度(字节) | 字节序 | 备注 |
---|---|---|---|
文件码(file code) | sizeof(int32) = 4 | big | |
未使用 | 5 * sizeof(int32) = 20 | big | |
文件长度(File Length) | sizeof(int32) = 4 | big | |
文件版本(version) | sizeof(int32) = 4 | little | |
图元类型(shape type) | sizeof(int32)=4 | little | |
xy数据范围(包围盒) | 4 * sizeof(double) = 32 | little | 分别为xmin 、ymin 、xmax 、ymax |
z和m数据范围 | 4 * sizeof(double)=32 | little | 分别为:zmin 、zmax 、mmin 、mmax |
上表中关于字节序
的知识,大家可以上网搜索,其原理就是不同系统要求的数据在内存中的字节顺序不一样,其中:
BigEndian
机器上,0x0102
在内存中的字节顺序为0x01
和0x02
,但是在LittleEndian
的机器上,他的字节顺序就变成了0x02
和0x01
。
字节转换的工具函数,在shp
读写的源码仓库中已有实现。