【老文新说】C++读取.shp文件
本文目录
- 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读写的源码仓库中已有实现。
2.2 文件记录
2.3 多边形的段(Part)
3. shp文件读写——C++
3.1 仓库地址
3.2 代码结构简介
(图片来源网络,侵删)
还没有评论,来说两句吧...