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数据…...
(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)
题目:3442. 奇偶频次间的最大差值 I 思路 :哈希,时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况,哈希表这里用数组即可实现。 C版本: class Solution { public:int maxDifference(string s) {int a[26]…...
C++_核心编程_多态案例二-制作饮品
#include <iostream> #include <string> using namespace std;/*制作饮品的大致流程为:煮水 - 冲泡 - 倒入杯中 - 加入辅料 利用多态技术实现本案例,提供抽象制作饮品基类,提供子类制作咖啡和茶叶*//*基类*/ class AbstractDr…...
简易版抽奖活动的设计技术方案
1.前言 本技术方案旨在设计一套完整且可靠的抽奖活动逻辑,确保抽奖活动能够公平、公正、公开地进行,同时满足高并发访问、数据安全存储与高效处理等需求,为用户提供流畅的抽奖体验,助力业务顺利开展。本方案将涵盖抽奖活动的整体架构设计、核心流程逻辑、关键功能实现以及…...
Vue3 + Element Plus + TypeScript中el-transfer穿梭框组件使用详解及示例
使用详解 Element Plus 的 el-transfer 组件是一个强大的穿梭框组件,常用于在两个集合之间进行数据转移,如权限分配、数据选择等场景。下面我将详细介绍其用法并提供一个完整示例。 核心特性与用法 基本属性 v-model:绑定右侧列表的值&…...
前端倒计时误差!
提示:记录工作中遇到的需求及解决办法 文章目录 前言一、误差从何而来?二、五大解决方案1. 动态校准法(基础版)2. Web Worker 计时3. 服务器时间同步4. Performance API 高精度计时5. 页面可见性API优化三、生产环境最佳实践四、终极解决方案架构前言 前几天听说公司某个项…...
23-Oracle 23 ai 区块链表(Blockchain Table)
小伙伴有没有在金融强合规的领域中遇见,必须要保持数据不可变,管理员都无法修改和留痕的要求。比如医疗的电子病历中,影像检查检验结果不可篡改行的,药品追溯过程中数据只可插入无法删除的特性需求;登录日志、修改日志…...
鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院挂号小程序
一、开发准备 环境搭建: 安装DevEco Studio 3.0或更高版本配置HarmonyOS SDK申请开发者账号 项目创建: File > New > Create Project > Application (选择"Empty Ability") 二、核心功能实现 1. 医院科室展示 /…...
在 Nginx Stream 层“改写”MQTT ngx_stream_mqtt_filter_module
1、为什么要修改 CONNECT 报文? 多租户隔离:自动为接入设备追加租户前缀,后端按 ClientID 拆分队列。零代码鉴权:将入站用户名替换为 OAuth Access-Token,后端 Broker 统一校验。灰度发布:根据 IP/地理位写…...
【论文笔记】若干矿井粉尘检测算法概述
总的来说,传统机器学习、传统机器学习与深度学习的结合、LSTM等算法所需要的数据集来源于矿井传感器测量的粉尘浓度,通过建立回归模型来预测未来矿井的粉尘浓度。传统机器学习算法性能易受数据中极端值的影响。YOLO等计算机视觉算法所需要的数据集来源于…...
DIY|Mac 搭建 ESP-IDF 开发环境及编译小智 AI
前一阵子在百度 AI 开发者大会上,看到基于小智 AI DIY 玩具的演示,感觉有点意思,想着自己也来试试。 如果只是想烧录现成的固件,乐鑫官方除了提供了 Windows 版本的 Flash 下载工具 之外,还提供了基于网页版的 ESP LA…...
