GDAL C++ API 学习之路 (5) Spatial Reference System篇 OGRSpatialReference类
class OGRSpatialReference #include <ogr_spatialref.h>
OGRSpatialReference 是 GDAL/OGR 库中的一个重要类,用于管理和操作地理空间数据的空间参考系统(Spatial Reference System,SRS)。它提供了一系列功能,允许用户定义、查询、解析和转换地理空间数据的坐标系统和投影信息
Public Functions
SetFromUserInput
OGRErr SetFromUserInput(const char*)
从各种文本格式设置空间参考
参数:
pszDefinition -- 尝试从中推断出 SRS 的文本定义。
返回: 成功时OGRERR_NONE,或者如果无法识别名称、定义已损坏或无法成功查找 EPSG 值,则为错误代码
// 创建一个 OGRSpatialReference 对象OGRSpatialReference srs;// 定义一个字符串,包含空间参考系统的信息const char* user_input = "+proj=utm +zone=48 +datum=WGS84 +units=m +no_defs";// 使用 SetFromUserInput() 函数设置空间参考系统OGRErr result = srs.SetFromUserInput(user_input);
SetTOWGS84
OGRErr SetTOWGS84(double, double, double, double = 0.0, double = 0.0, double = 0.0, double = 0.0)
将Bursa-Wolf转换设置为 WGS84 这将创建 TOWGS84 节点作为基准面的子节点
参数:
-
dfDX -- X 子级,单位为米。
-
dfDY -- 以米为单位的 Y 孩子。
-
dfDZ -- Z 子级,单位为米。
-
dfEX -- X 以弧秒为单位旋转(可选,默认为零)。
-
dfEY -- 以弧秒为单位的 Y 旋转(可选,默认为零)。
-
dfEZ -- Z 旋转(以弧秒为单位)(可选,默认为零)。
-
dfPPM -- 比例因子(百万分之一)。
返回: OGRERR_NONE成功
// 创建一个 OGRSpatialReference 对象OGRSpatialReference srs;// 设置空间参考系统的转换参数到 WGS 84double dx = -84.0;double dy = -97.0;double dz = -119.0;double ex = 0.0;double ey = 0.0;double ez = 0.0;double ppm = 0.0;OGRErr result = srs.SetTOWGS84(dx, dy, dz, ex, ey, ez, ppm);
GetTOWGS84
OGRErr GetTOWGS84(double *padfCoef, int nCoeff = 7) const
获取 TOWGS84 参数(如果可用)
参数:
-
padfCoeff -- 最多放置 7 个系数的数组。
-
nCoeffCount -- padfCoeff 的大小 - 默认为 7。
返回: 成功时OGRERR_NONE,如果没有可用的 TOWGS84 节点,则OGRERR_FAILURE
// 创建一个 OGRSpatialReference 对象OGRSpatialReference srs;// 设置空间参考系统的转换参数到 WGS 84double dx = -84.0;double dy = -97.0;double dz = -119.0;double ex = 0.0;double ey = 0.0;double ez = 0.0;double ppm = 0.0;srs.SetTOWGS84(dx, dy, dz, ex, ey, ez, ppm);// 获取空间参考系统的转换参数double transformationParams[7];OGRErr result = srs.GetTOWGS84(transformationParams, 7);
AddGuessedTOWGS84
OGRErr AddGuessedTOWGS84()
尝试将 3 参数或 7 参数 Helmert 变换添加到 WGS84
返回: 成功时OGRERR_NONE,失败时错误代码(CRS 已转换为 WGS84 或找不到匹配项)
// 创建一个 OGRSpatialReference 对象OGRSpatialReference srs;// 定义一个字符串,包含空间参考系统的信息const char* user_input = "+proj=utm +zone=48 +datum=WGS84 +units=m +no_defs";// 使用 SetFromUserInput() 函数设置空间参考系统OGRErr result = srs.SetFromUserInput(user_input);// 检查是否设置成功if (result != OGRERR_NONE) {printf("空间参考系统设置失败!\n");return 1;}// 尝试添加转换参数OGRErr guessResult = srs.AddGuessedTOWGS84();
GetSemiMajor
double GetSemiMajor(OGRErr* = nullptr) const
获取椭球体半长轴(以米为单位,从 GDAL 3.0 开始)
// 创建一个 OGRSpatialReference 对象OGRSpatialReference srs;// 定义一个字符串,包含空间参考系统的信息const char* user_input = "+proj=utm +zone=48 +datum=WGS84 +units=m +no_defs";// 使用 SetFromUserInput() 函数设置空间参考系统OGRErr result = srs.SetFromUserInput(user_input);// 获取椭球体的长半轴值OGRErr err;double semiMajor = srs.GetSemiMajor(&err);
GetSemiMinor
double GetSemiMinor(OGRErr* = nullptr) const
获取球体短半轴
参数:
pnErr -- 如果非 NULL 设置为 OGRERR_FAILURE 如果可以找到半短轴。
返回: 短半轴,或 WGS84 半小轴(如果找不到)
GetInvFlattening
double GetInvFlattening(OGRErr* = nullptr) const
获得球面逆平坦化
GetEccentricity
double GetEccentricity() const
返回: 偏心率(或错误时为 -1)
GetSquaredEccentricity
double GetSquaredEccentricity() const
获得椭球体平方偏心率
返回:偏心率平方(或误差时为 -1)
GetEPSGGeogCS
int GetEPSGGeogCS() const
获取此坐标系 GEOGCS 的 EPSG 代码
返回: EPSG 代码
// 获取地理坐标系的 EPSG 代码int epsgCode = srs.GetEPSGGeogCS();
地理坐标系的 EPSG 代码为: 4326
GetAuthorityCode
const char *GetAuthorityCode(const char *pszTargetKey) const
获取节点的颁发机构代码
参数:
pszTargetKey -- 要从中获取权限的节点的部分或完整路径。即“PROJCS”、“GEOGCS”、“GEOGCS|UNIT“或 NULL 以搜索根元素上的颁发机构节点。
返回: 来自授权节点的值代码,或失败时为 NULL。返回的值是内部值,不应释放或修改
// 获取地理坐标系的标识代码const char* authorityCode = srs.GetAuthorityCode("GEOGCS");
地理坐标系的标识代码为: EPSG:4326
GetAuthorityName
const char *GetAuthorityName(const char *pszTargetKey) const
获取节点的颁发机构名称
参数:
pszTargetKey -- 要从中获取权限的节点的部分或完整路径。即“PROJCS”、“GEOGCS”、“GEOGCS|UNIT“或 NULL 以搜索根元素上的颁发机构节点。
返回: 来自授权节点的值代码,或失败时为 NULL。返回的值是内部值,不应释放或修改
GetAreaOfUse
bool GetAreaOfUse(double *pdfWestLongitudeDeg, double *pdfSouthLatitudeDeg, double *pdfEastLongitudeDeg, double *pdfNorthLatitudeDeg, const char **ppszAreaName) const
返回 CRS 的使用区域
参数:
-
pdfWestLongitudeDeg -- 指向双精度的指针,用于接收最西端的经度,以度数表示。可能为空。如果返回值为 -1000,则边界框未知。
-
pdfSouthLatitudeDeg -- 指向双精度的指针,用于接收最南端的纬度,以度数表示。可能为空。如果返回值为 -1000,则边界框未知。
-
pdfEastLongitudeDeg -- 指向双精度的指针,用于接收最东端的经度,以度数表示。可能为空。如果返回值为 -1000,则边界框未知。
-
pdfNorthLatitudeDeg -- 指向接收最北纬度的双精度的指针,以度表示。可能为空。如果返回值为 -1000,则边界框未知。
-
ppszAreaName -- 指向用于接收使用区域名称的字符串的指针。可能为空。请注意,*ppszAreaName 的生存期很短,可能会因进一步的调用而失效。
返回: 在成功的情况下为真
// 定义变量用于接收使用范围信息double westLongitude, southLatitude, eastLongitude, northLatitude;const char* areaName;// 获取使用范围信息bool success = srs.GetAreaOfUse(&westLongitude, &southLatitude, &eastLongitude, &northLatitude, &areaName);// 检查是否获取成功if (success) {printf("使用范围信息:\n");printf("西边界经度: %.6f\n", westLongitude);printf("南边界纬度: %.6f\n", southLatitude);printf("东边界经度: %.6f\n", eastLongitude);printf("北边界纬度: %.6f\n", northLatitude);printf("使用范围名称: %s\n", areaName);} else {printf("获取使用范围信息失败!\n");}
SetProjParm
OGRErr SetProjParm(const char*, double)
设置投影参数值 在 PROJCS 下添加一个具有指示名称和值的新参数
参数:
-
pszParamName -- 参数名称,应从 ogr_srs_api.h 中的宏中选择,例如 SRS_PP_CENTRAL_MERIDIAN。
-
dfValue -- 要分配的值。
返回: OGRERR_NONE成功
// 创建一个 OGRSpatialReference 对象OGRSpatialReference srs;// 设置投影坐标系为 Transverse Mercator 投影srs.SetUTM(48, TRUE);// 设置投影坐标系的中央经线参数值为 80.0 度OGRErr result = srs.SetProjParm("central_meridian", 80.0);
GetProjParm
double GetProjParm(const char*, double = 0.0, OGRErr* = nullptr) const
获取投影参数值
参数:
-
pszName -- 要从 ogr_srs_api.h 中的SRS_PP代码集中获取的参数的名称。
-
dfDefaultValue -- 此参数不存在时要返回的值。
-
pnErr -- 在失败时放置错误代码的位置。如果为 NULL,则忽略。
返回: 参数的值
SetNormProjParm
OGRErr SetNormProjParm(const char*, double)
使用归一化值设置投影参数
参数:
-
pszName -- 参数名称,应从 ogr_srs_api.h 中的宏中选择,例如 SRS_PP_CENTRAL_MERIDIAN。
-
dfValue -- 要分配的值。
返回: OGRERR_NONE成功
// 创建一个 OGRSpatialReference 对象OGRSpatialReference srs;// 设置投影坐标系为 Transverse Mercator 投影srs.SetUTM(48, TRUE);// 设置投影坐标系的中央经线参数值为 80.0 度OGRErr result = srs.SetProjParm("central_meridian", 80.0);
在地理空间数据处理中,"归一化"或者说"标准化"是指将数据转换为统一的标准范围或单位,以便于比较、分析和处理。地理空间数据通常来自不同的数据源、采用不同的投影、坐标系统或单位,因此其数值范围和表示方式可能有很大的差异。归一化的目的是消除这些差异,使得数据在不同数据源之间可以进行有效的比较和分析。
GetNormProjParm
double GetNormProjParm(const char*, double = 0.0, OGRErr* = nullptr) const
获取归一化投影参数值
参数:
-
pszName -- 要从 ogr_srs_api.h 中的SRS_PP代码集中获取的参数的名称。
-
dfDefaultValue -- 此参数不存在时要返回的值。
-
pnErr -- 在失败时放置错误代码的位置。如果为 NULL,则忽略。
返回: 参数的值
// 创建一个 OGRSpatialReference 对象OGRSpatialReference srs;// 设置投影坐标系为 Transverse Mercator 投影srs.SetUTM(48, TRUE);// 设置投影坐标系的中央经线参数值为 80.0 度OGRErr result = srs.SetProjParm("central_meridian", 80.0);
相关文章:
GDAL C++ API 学习之路 (5) Spatial Reference System篇 OGRSpatialReference类
class OGRSpatialReference #include <ogr_spatialref.h> OGRSpatialReference 是 GDAL/OGR 库中的一个重要类,用于管理和操作地理空间数据的空间参考系统(Spatial Reference System,SRS)。它提供了一系列功能&…...

2023年华数杯数学建模C题思路代码分析 - 母亲身心健康对婴儿成长的影响
# 1 赛题 C 题 母亲身心健康对婴儿成长的影响 母亲是婴儿生命中最重要的人之一,她不仅为婴儿提供营养物质和身体保护, 还为婴儿提供情感支持和安全感。母亲心理健康状态的不良状况,如抑郁、焦虑、 压力等,可能会对婴儿的认知、情…...

WebAgent-基于大型语言模型的代理程序
大型语言模型(LLM)可以解决多种自然语言任务,例如算术、常识、逻辑推理、问答、文本生成、交互式决策任务。最近,LLM在自主网络导航方面也取得了巨大成功,代理程序助HTML理解和多步推理的能力,通过控制计算…...

智慧~经典开源项目数字孪生智慧商场——开源工程及源码
深圳南山某商场的工程和源码免费赠送,助您打造智慧商场。立即获取,提升商场管理效能! 项目介绍 凤凰商场作为南山地区的繁华商业中心,提供多样化的购物和娱乐体验。通过此项目,凤凰商场将迈向更智能的商业模式。 本项目…...

LeetCode--剑指Offer75(1)
目录 题目描述:剑指 Offer 05. 替换空格(简单)题目接口解题思路1代码解题思路2代码 PS: 题目描述:剑指 Offer 05. 替换空格(简单) 请实现一个函数,把字符串 s 中的每个空格替换成"%20&quo…...
C++ 关于大端模式和小端模式的简析
大端及小端的简析 序言环境概念理解可能有问题的地方一般情况下需要注意的大小端情况关于大小端相关的实用函数/代码判断自身大小端的代码大小端转换函数 序言 我记得我已经查过4次了,最近回想一下发现我竟然又忘了!所以特以此文来记录一下。 环境 Qt…...

嵌入式:C高级 Day2
一、递归实现,输入一个数,输出这个数的每一位 二、递归实现,输入一个数字,输出这个数的二进制 三、写一个脚本,包含以下内容 1.显示/etc/group文件中第五行的内容 2.创建目录/home/ubuntu/copy 3.切换工作路径到此目录…...

iPhone 7透明屏的显示效果怎么样?
iPhone 7是苹果公司于2016年推出的一款智能手机,它采用了4.7英寸的Retina HD显示屏,分辨率为1334x750像素。 虽然iPhone 7的屏幕并不是透明的,但是苹果公司在设计上采用了一些技术,使得用户在使用iPhone 7时可以有一种透明的感觉…...

【C++】—— 多态常见的笔试和面试问题
序言: 在上期,我们对多态进行了详细的讲解。本期,我给大家带来的是关于有关多态常见的笔试和面试问题,帮助大家理解记忆相关知识点。 目录 (一)概念查考 (二)问答题 1、简述一下…...

探寻AI大模型平台之巅——文心千帆
目录 前言1. 何为文心千帆2. 核心亮点2.1 第三方大模型2.2 Prompt模板2.3 安全可靠 3. 一站式服务3.1 数据管理3.2 数据标注3.3 数据处理3.4 数据训练3.5 模型纳管3.5.1 模型评估3.5.2 模型压缩 3.6 服务发布 总结 前言 众多AI大模型不断涌现,一时不知如何挑选&…...
【springboot】RestTemplate配置HttpClient连接池
在Java开发中,访问第三方HTTP协议的网络接口,通常使用的连接工具为JDK自带的HttpURLConnection、HttpClient(现在应该称之为HttpComponents)和OKHttp。 这些Http连接工具,使用起来都比较复杂,如果项目中使…...

MySQL内置函数使用说明
MySQL函数使用说明 MySQL 是一个流行的关系型数据库管理系统,它提供了许多内置函数来处理和操作数据。这些函数可以简化数据库查询和操作的过程,提高代码的可读性和效率。以下是一些常见的 MySQL 内置函数及其使用说明和示例。 数值函数 ABS() 函数原…...

java后端富文本转word,再传递到浏览器下载。
思路参考,以及所有的工具类都使用了》牧羊人大佬的代码《 有帮助的话不用给到我点赞,给大佬点赞即可 这是前端代码,必须使用get。 post后端返回的流浏览器接收不到(具体原因不详)。get无法传递requestBody,…...

【动态规划算法】-回文串问题题型(34-40题)
💖作者:小树苗渴望变成参天大树🎈 🎉作者宣言:认真写好每一篇博客💤 🎊作者gitee:gitee✨ 💞作者专栏:C语言,数据结构初阶,Linux,C 动态规划算法🎄 如 果 你 …...

STM32基础回顾
文章目录 单片机编程的原理GPIO中断EXTI外部中断定时器中断、串口中断 定时器定时器中断配置过程通用定时器输出比较功能:PWM波的生成定时器的输入捕获功能主从触发模式PWMI模式 定时器的编码器接口 DMA简介通信接口USART软件配置流程:1、仅发数据的配置…...

如何解决电脑无声问题:排除故障的几种常见方法
大家好,今天我们来讨论一下处理电脑没有声音的故障。当你突然发现电脑静音无声时,需要逐步排除可能的问题,但总体而言,声音故障是相对容易解决的。接下来,我们将介绍一些排除电脑无声问题的方法。 第一步:…...

Apache RocketMQ 命令注入
漏洞简介 RocketMQ 5.1.0及以下版本,在一定条件下,存在远程命令执行风险。RocketMQ的NameServer、Broker、Controller等多个组件外网泄露,缺乏权限验证,攻击者可以利用该漏洞利用更新配置功能以RocketMQ运行的系统用户身份执行命令…...

二、搜索与图论6:Dijkstra 模板题+算法模板(Dijkstra求最短路 I, Dijkstra求最短路 II,1003 Emergency)
文章目录 算法模板Dijkstra题目代码模板朴素dijkstra算法堆优化版dijkstra 树与图的存储(1) 邻接矩阵:(2) 邻接表:关于e[],ne[],h[]的理解 关于堆的原理与操作 模板题Dijkstra求最短路 I原题链接题目思路题解 Dijkstra求最短路 II原题链接题目思路题解 1…...

ROS2学习(四)进程,线程与节点的关系
节点与节点执行器 节点,英文是node,在ROS2中,节点是一个抽象的实体,它可以代表某种或某类特定功能的抽象集合体,它可以存在于进程中,也可以存在于线程中。所有ROS2的基础功能最基础的载体是节点,所有的通信…...

【物联网】DMA传输原理与实现详解(超详细)
DMA(Direct Memory Access,直接内存访问)是一种计算机数据传输方式,允许外围设备直接访问系统内存,而无需CPU的干预。 文章目录 Part 1: DMA的工作原理配置阶段:数据传输阶段: Part 2: DMA数据…...
逻辑回归:给不确定性划界的分类大师
想象你是一名医生。面对患者的检查报告(肿瘤大小、血液指标),你需要做出一个**决定性判断**:恶性还是良性?这种“非黑即白”的抉择,正是**逻辑回归(Logistic Regression)** 的战场&a…...

成都鼎讯硬核科技!雷达目标与干扰模拟器,以卓越性能制胜电磁频谱战
在现代战争中,电磁频谱已成为继陆、海、空、天之后的 “第五维战场”,雷达作为电磁频谱领域的关键装备,其干扰与抗干扰能力的较量,直接影响着战争的胜负走向。由成都鼎讯科技匠心打造的雷达目标与干扰模拟器,凭借数字射…...

如何在最短时间内提升打ctf(web)的水平?
刚刚刷完2遍 bugku 的 web 题,前来答题。 每个人对刷题理解是不同,有的人是看了writeup就等于刷了,有的人是收藏了writeup就等于刷了,有的人是跟着writeup做了一遍就等于刷了,还有的人是独立思考做了一遍就等于刷了。…...
Spring AI Chat Memory 实战指南:Local 与 JDBC 存储集成
一个面向 Java 开发者的 Sring-Ai 示例工程项目,该项目是一个 Spring AI 快速入门的样例工程项目,旨在通过一些小的案例展示 Spring AI 框架的核心功能和使用方法。 项目采用模块化设计,每个模块都专注于特定的功能领域,便于学习和…...

9-Oracle 23 ai Vector Search 特性 知识准备
很多小伙伴是不是参加了 免费认证课程(限时至2025/5/15) Oracle AI Vector Search 1Z0-184-25考试,都顺利拿到certified了没。 各行各业的AI 大模型的到来,传统的数据库中的SQL还能不能打,结构化和非结构的话数据如何和…...

一些实用的chrome扩展0x01
简介 浏览器扩展程序有助于自动化任务、查找隐藏的漏洞、隐藏自身痕迹。以下列出了一些必备扩展程序,无论是测试应用程序、搜寻漏洞还是收集情报,它们都能提升工作流程。 FoxyProxy 代理管理工具,此扩展简化了使用代理(如 Burp…...

Linux基础开发工具——vim工具
文章目录 vim工具什么是vimvim的多模式和使用vim的基础模式vim的三种基础模式三种模式的初步了解 常用模式的详细讲解插入模式命令模式模式转化光标的移动文本的编辑 底行模式替换模式视图模式总结 使用vim的小技巧vim的配置(了解) vim工具 本文章仍然是继续讲解Linux系统下的…...
32位寻址与64位寻址
32位寻址与64位寻址 32位寻址是什么? 32位寻址是指计算机的CPU、内存或总线系统使用32位二进制数来标识和访问内存中的存储单元(地址),其核心含义与能力如下: 1. 核心定义 地址位宽:CPU或内存控制器用32位…...

【阅读笔记】MemOS: 大语言模型内存增强生成操作系统
核心速览 研究背景 研究问题:这篇文章要解决的问题是当前大型语言模型(LLMs)在处理内存方面的局限性。LLMs虽然在语言感知和生成方面表现出色,但缺乏统一的、结构化的内存架构。现有的方法如检索增强生成(RA…...
Vue 实例的数据对象详解
Vue 实例的数据对象详解 在 Vue 中,数据对象是响应式系统的核心,也是组件状态的载体。理解数据对象的原理和使用方式是成为 Vue 专家的关键一步。我将从多个维度深入剖析 Vue 实例的数据对象。 一、数据对象的定义方式 1. Options API 中的定义 在 Options API 中,使用 …...