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

2. shp文件格式

shp文件格式比较简单,分为文件头记录列表两块。

2.1 文件头

shp文件头是一个定长100字节的数据块,其中的内容由以下部分组成:

字段名数据长度(字节)字节序备注
文件码(file code)sizeof(int32) = 4big
未使用5 * sizeof(int32) = 20big
文件长度(File Length)sizeof(int32) = 4big
文件版本(version)sizeof(int32) = 4little
图元类型(shape type)sizeof(int32)=4little
xy数据范围(包围盒)4 * sizeof(double) = 32little分别为xminyminxmaxymax
z和m数据范围4 * sizeof(double)=32little分别为:zminzmaxmminmmax

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

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

2.2 文件记录

2.3 多边形的段(Part)

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

3.1 仓库地址

3.2 代码结构简介

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/733221.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Android打包cannot find symbol import androidx.annotation.NonNull

不知道从什么时候开始 implementation(“androidx.annotation:annotation:1.1.0jar”)会导致打包失败,需要改成 implementation(“androidx.annotation:annotation-jvm:1.7.0jar”) 这样就能解决Android打包类似下面的问题 cannot find symbol import androidx.ann…

12. 建立用户表并使用雪花算法生成用户ID

文章目录 一、建立用户表二、雪花算法生成唯一ID三、将雪花算法整合到我们的项目中 一、建立用户表 上一节我们搭建完了脚手架,从这一节开始,就正式进入到业务逻辑的开发了。首先要开发的就是博客系统的用户注册与登录功能。 既然涉及到用户&#xff0…

必用的10个Python装饰器

装饰器(Decorators)是Python中一种强大而灵活的功能,用于修改或增强函数或类的行为。装饰器本质上是一个函数,它接受另一个函数或类作为参数,并返回一个新的函数或类。它们通常用于在不修改原始代码的情况下添加额外的…

Spring MVC RequestMappingHandlerAdapter原理解析

在Spring MVC框架中,RequestMappingHandlerAdapter是一个核心的组件,负责将请求映射到具体的处理器方法上,并调用这些方法来处理请求。其中,invokeHandlerMethod方法是这个适配器中的一个关键方法,它负责实际调用处理器…

XSS靶场-DOM型初级关卡

一、环境 XSS靶场 二、闯关 1、第一关 先看源码 使用DOM型&#xff0c;获取h2标签&#xff0c;使用innerHTML将内容插入到h2中 我们直接插入<script>标签试一下 明显插入到h2标签中了&#xff0c;为什么不显示呢&#xff1f;看一下官方文档 尽管插入进去了&#xff0…

存算一体成为突破算力瓶颈的关键技术?

大模型的训练和推理需要高性能的算力支持。以ChatGPT为例&#xff0c;据估算&#xff0c;在训练方面&#xff0c;1746亿参数的GPT-3模型大约需要375-625台8卡DGX A100服务器训练10天左右&#xff0c;对应A100 GPU数量约3000-5000张。 在推理方面&#xff0c;如果以A100 GPU单卡…

46. 【Linux教程】逻辑卷与 LVM 介绍

本小节介绍 Linux 逻辑卷&#xff0c;若标准分区上面有一个文件系统&#xff0c;想要给这个文件系统添加额外的空间时&#xff0c;可以通过将另外一个硬盘上的分区加入已有文件系统&#xff0c;Linux 中的逻辑卷管理器(LVM)软件包就可以做这个工作。 1. 逻辑卷介绍 LVM 是逻辑…

【Leetcode每日一刷】数组|双指针篇:977. 有序数组的平方、76. 最小覆盖子串(附滑动窗口法详解)

力扣每日刷题 一、977. 有序数组的平方1.1题目1.2、解题思路1.3、代码实现——C 二、76. 最小覆盖子串2.1&#xff1a;题目2.2、解题思路2.3&#xff1a;代码实现——c2.4&#xff1a;易错点 一、977. 有序数组的平方 1.1题目 [题目链接]( 1.2、解题思路 题型&#xff1a;双…

nextjs 12 和 13的区别

Next.js 12和Next.js 13在多个方面存在显著的区别。以下是一些主要的差异点&#xff1a; 1、文件夹架构和路由&#xff1a; 在Next.js 12中&#xff0c;存在名为pages的文件夹&#xff0c;其中包含一些特定命名的文件&#xff0c;如_app.ts。而在Next.js 13中&#xff0c;文件…

词语排列组合

为什么会出现这个&#xff1f; 1. 我们已进入越来越复杂的世界 2. 任何遇见的每一件事情都有复杂度&#xff0c; 3. 从小 > 大&#xff0c;从 弱 > 强&#xff0c;从有限0 > 无限 4. 主要是今天&#xff0c;用查找替换&#xff0c;发现有好多的词语组合 5. 这个词语排…

【银河商学】大蓝短视频学习02——流量突围实战

【银河商学】大蓝短视频学习02——流量突围实战 内容大纲 找对标找准你的"竞争对手" 定形式选定适合你的视频形式 做内容选题决定命运 2s上热门 一、找对标 1. 为什么要找对标 标准答案,少走弯路99%的问题,都有标准答案。 找个懂得人问一问 秒上热门,快速起号预…

思维调试:为什么FormatMessage提示找不到资源?

在不调试的情况下解决下面的问题&#xff0c;说明你的思维调试能力又进阶了。 问题 我在调用 FormatMessage 函数加载一个插入的资源字符串&#xff0c;由于某种未知的原因&#xff0c;它没能按预期那样工作。 我要加载的字符串类似于这样的 “Blah blah blah %1. Blah blah …

QT中结构体和QbyteArray的转换,可加帧头帧尾

demo源码&#xff1a; #include <QApplication> #include <QDebug> #include <QByteArray>// 头 typedef struct tagEXT_HEADER {unsigned short type 0x5642; }EXT_HEADER;// 数据包格式 typedef struct tagMsgFormat {EXT_HEADER heade…

JavaEE——简单认识JS(Web API)

文章目录 一、认识什么是 WebAPI二、认识事件三、操作元素1. innerHTML 属性2. 获取 / 修改元素内容3. 获取 / 修改 元素属性4. 获取 / 修改 表单元素属性5. 获取 / 修改 样式属性6. 创建 / 删除元素 一、认识什么是 WebAPI 1.什么是API 在我们了解 WebAPI 之前&#xff0c;我们…

MYSQL使用mysqldump备份、复原数据库

参考 添加链接描述 1. 备份数据库 C:\Windows\system32>mysqldump -uroot -p test student>C:\student.sql Enter password: ****2. 备份多个数据库 mysqldump -u root -p --databases test mysql>C:\testandmysql.sql3. 备份所有数据库 mysqldump -u root -p -…

【Python】外网远程登录访问jupyter notebook+pycharm使用ipython

第一步&#xff1a;创建python虚拟环境 conda create -n py3610 python3.6.10第二步&#xff1a;安装ipython pip install ipython pip install ipython notebook第三步&#xff1a;创建 IPython Notebook 服务器配置文件 # 进入python交互shell&#xff0c;设置密码 >&…

数论<1>——数论基础

这期博客是一个数论入门介绍&#xff0c;dalao们可以自动忽略。 Part 1:素数(质数) 说到数论&#xff0c;小学奥数里也有。我最先想到的就是质数了。素数就是一个只能被1和它自己整除的数。判断的方法也很简单&#xff0c;可以扫一遍就结束了&#xff0c;但是没必要。由于一个…

Hudi入门

一、Hudi编译安装 1.下载 https://archive.apache.org/dist/hudi/0.9.0/hudi-0.9.0.src.tgz2.maven编译 mvn clean install -DskipTests -Dscala2.12 -Dspark33.配置spark与hudi依赖包 [rootmaster hudi-spark-jars]# ll total 37876 -rw-r--r-- 1 root root 38615211 Oct …

【NR 定位】3GPP NR Positioning 5G定位标准解读(十一)-增强的小区ID定位

前言 3GPP NR Positioning 5G定位标准&#xff1a;3GPP TS 38.305 V18 3GPP 标准网址&#xff1a;Directory Listing /ftp/ 【NR 定位】3GPP NR Positioning 5G定位标准解读&#xff08;一&#xff09;-CSDN博客 【NR 定位】3GPP NR Positioning 5G定位标准解读&#xff08;…

讲给自己听的的技术---WMS

标题一 点题 为什么我会说&#xff0c;这是说给自己听的了&#xff1f;做项目有三个月了&#xff0c;外加之前三个月的自学&#xff0c;自我感觉对WMS系统有了一点了解&#xff0c;今天三月九号晚上九点二十&#xff0c;就让我自己和自己说说吧。 标题二 WMS的职责是什么…