【老文新说】C++读取.shp文件

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文件这一个文件格式相关内容,关于shxdbf这两个文件格式,将会在后续文章中介绍。

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 分别为xminyminxmaxymax
z和m数据范围 4 * sizeof(double)=32 little 分别为:zminzmaxmminmmax

上表中关于字节序的知识,大家可以上网搜索,其原理就是不同系统要求的数据在内存中的字节顺序不一样,其中:

BigEndian机器上,0x0102在内存中的字节顺序为0x010x02,但是在LittleEndian的机器上,他的字节顺序就变成了0x020x01
字节转换的工具函数,在shp读写的源码仓库中已有实现。

2.2 文件记录

2.3 多边形的段(Part)

3. shp文件读写——C++

3.1 仓库地址

3.2 代码结构简介

相关推荐

  1. C++读取.shp文件

    2024-03-10 02:04:04       47 阅读
  2. c#读取bin文件

    2024-03-10 02:04:04       30 阅读
  3. C++多线程测试 文件读取过程有内容

    2024-03-10 02:04:04       24 阅读
  4. C# 读取指定文件夹

    2024-03-10 02:04:04       40 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-10 02:04:04       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-10 02:04:04       106 阅读
  3. 在Django里面运行非项目文件

    2024-03-10 02:04:04       87 阅读
  4. Python语言-面向对象

    2024-03-10 02:04:04       96 阅读

热门阅读

  1. 获取通知细节信息

    2024-03-10 02:04:04       49 阅读
  2. linux禁止被ping的方法

    2024-03-10 02:04:04       45 阅读
  3. MySQL客户端和服务器进程通信的几种方式

    2024-03-10 02:04:04       39 阅读
  4. svn + ssh

    2024-03-10 02:04:04       54 阅读
  5. Unix Network Programming Episode 88

    2024-03-10 02:04:04       47 阅读