当前位置: 首页 > news >正文

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 SetFromUserInputconst 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 SetProjParmconst 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 SetNormProjParmconst 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 库中的一个重要类&#xff0c;用于管理和操作地理空间数据的空间参考系统&#xff08;Spatial Reference System&#xff0c;SRS&#xff09;。它提供了一系列功能&…...

2023年华数杯数学建模C题思路代码分析 - 母亲身心健康对婴儿成长的影响

# 1 赛题 C 题 母亲身心健康对婴儿成长的影响 母亲是婴儿生命中最重要的人之一&#xff0c;她不仅为婴儿提供营养物质和身体保护&#xff0c; 还为婴儿提供情感支持和安全感。母亲心理健康状态的不良状况&#xff0c;如抑郁、焦虑、 压力等&#xff0c;可能会对婴儿的认知、情…...

WebAgent-基于大型语言模型的代理程序

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

智慧~经典开源项目数字孪生智慧商场——开源工程及源码

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

LeetCode--剑指Offer75(1)

目录 题目描述&#xff1a;剑指 Offer 05. 替换空格&#xff08;简单&#xff09;题目接口解题思路1代码解题思路2代码 PS: 题目描述&#xff1a;剑指 Offer 05. 替换空格&#xff08;简单&#xff09; 请实现一个函数&#xff0c;把字符串 s 中的每个空格替换成"%20&quo…...

C++ 关于大端模式和小端模式的简析

大端及小端的简析 序言环境概念理解可能有问题的地方一般情况下需要注意的大小端情况关于大小端相关的实用函数/代码判断自身大小端的代码大小端转换函数 序言 我记得我已经查过4次了&#xff0c;最近回想一下发现我竟然又忘了&#xff01;所以特以此文来记录一下。 环境 Qt…...

嵌入式:C高级 Day2

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

iPhone 7透明屏的显示效果怎么样?

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

【C++】—— 多态常见的笔试和面试问题

序言&#xff1a; 在上期&#xff0c;我们对多态进行了详细的讲解。本期&#xff0c;我给大家带来的是关于有关多态常见的笔试和面试问题&#xff0c;帮助大家理解记忆相关知识点。 目录 &#xff08;一&#xff09;概念查考 &#xff08;二&#xff09;问答题 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大模型不断涌现&#xff0c;一时不知如何挑选&…...

【springboot】RestTemplate配置HttpClient连接池

在Java开发中&#xff0c;访问第三方HTTP协议的网络接口&#xff0c;通常使用的连接工具为JDK自带的HttpURLConnection、HttpClient&#xff08;现在应该称之为HttpComponents&#xff09;和OKHttp。 这些Http连接工具&#xff0c;使用起来都比较复杂&#xff0c;如果项目中使…...

MySQL内置函数使用说明

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

java后端富文本转word,再传递到浏览器下载。

思路参考&#xff0c;以及所有的工具类都使用了》牧羊人大佬的代码《 有帮助的话不用给到我点赞&#xff0c;给大佬点赞即可 这是前端代码&#xff0c;必须使用get。 post后端返回的流浏览器接收不到&#xff08;具体原因不详&#xff09;。get无法传递requestBody&#xff0c;…...

【动态规划算法】-回文串问题题型(34-40题)

&#x1f496;作者&#xff1a;小树苗渴望变成参天大树&#x1f388; &#x1f389;作者宣言&#xff1a;认真写好每一篇博客&#x1f4a4; &#x1f38a;作者gitee:gitee✨ &#x1f49e;作者专栏&#xff1a;C语言,数据结构初阶,Linux,C 动态规划算法&#x1f384; 如 果 你 …...

STM32基础回顾

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

如何解决电脑无声问题:排除故障的几种常见方法

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

Apache RocketMQ 命令注入

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

二、搜索与图论6:Dijkstra 模板题+算法模板(Dijkstra求最短路 I, Dijkstra求最短路 II,1003 Emergency)

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

ROS2学习(四)进程,线程与节点的关系

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

【物联网】DMA传输原理与实现详解(超详细)

DMA&#xff08;Direct Memory Access&#xff0c;直接内存访问&#xff09;是一种计算机数据传输方式&#xff0c;允许外围设备直接访问系统内存&#xff0c;而无需CPU的干预。 文章目录 Part 1: DMA的工作原理配置阶段&#xff1a;数据传输阶段&#xff1a; Part 2: DMA数据…...

挑战杯推荐项目

“人工智能”创意赛 - 智能艺术创作助手&#xff1a;借助大模型技术&#xff0c;开发能根据用户输入的主题、风格等要求&#xff0c;生成绘画、音乐、文学作品等多种形式艺术创作灵感或初稿的应用&#xff0c;帮助艺术家和创意爱好者激发创意、提高创作效率。 ​ - 个性化梦境…...

【决胜公务员考试】求职OMG——见面课测验1

2025最新版&#xff01;&#xff01;&#xff01;6.8截至答题&#xff0c;大家注意呀&#xff01; 博主码字不易点个关注吧,祝期末顺利~~ 1.单选题(2分) 下列说法错误的是:&#xff08; B &#xff09; A.选调生属于公务员系统 B.公务员属于事业编 C.选调生有基层锻炼的要求 D…...

uniapp微信小程序视频实时流+pc端预览方案

方案类型技术实现是否免费优点缺点适用场景延迟范围开发复杂度​WebSocket图片帧​定时拍照Base64传输✅ 完全免费无需服务器 纯前端实现高延迟高流量 帧率极低个人demo测试 超低频监控500ms-2s⭐⭐​RTMP推流​TRTC/即构SDK推流❌ 付费方案 &#xff08;部分有免费额度&#x…...

零基础设计模式——行为型模式 - 责任链模式

第四部分&#xff1a;行为型模式 - 责任链模式 (Chain of Responsibility Pattern) 欢迎来到行为型模式的学习&#xff01;行为型模式关注对象之间的职责分配、算法封装和对象间的交互。我们将学习的第一个行为型模式是责任链模式。 核心思想&#xff1a;使多个对象都有机会处…...

OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别

OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别 直接训练提示词嵌入向量的核心区别 您提到的代码: prompt_embedding = initial_embedding.clone().requires_grad_(True) optimizer = torch.optim.Adam([prompt_embedding...

【JavaWeb】Docker项目部署

引言 之前学习了Linux操作系统的常见命令&#xff0c;在Linux上安装软件&#xff0c;以及如何在Linux上部署一个单体项目&#xff0c;大多数同学都会有相同的感受&#xff0c;那就是麻烦。 核心体现在三点&#xff1a; 命令太多了&#xff0c;记不住 软件安装包名字复杂&…...

.Net Framework 4/C# 关键字(非常用,持续更新...)

一、is 关键字 is 关键字用于检查对象是否于给定类型兼容,如果兼容将返回 true,如果不兼容则返回 false,在进行类型转换前,可以先使用 is 关键字判断对象是否与指定类型兼容,如果兼容才进行转换,这样的转换是安全的。 例如有:首先创建一个字符串对象,然后将字符串对象隐…...

Maven 概述、安装、配置、仓库、私服详解

目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...

Web 架构之 CDN 加速原理与落地实践

文章目录 一、思维导图二、正文内容&#xff08;一&#xff09;CDN 基础概念1. 定义2. 组成部分 &#xff08;二&#xff09;CDN 加速原理1. 请求路由2. 内容缓存3. 内容更新 &#xff08;三&#xff09;CDN 落地实践1. 选择 CDN 服务商2. 配置 CDN3. 集成到 Web 架构 &#xf…...

【JVM面试篇】高频八股汇总——类加载和类加载器

目录 1. 讲一下类加载过程&#xff1f; 2. Java创建对象的过程&#xff1f; 3. 对象的生命周期&#xff1f; 4. 类加载器有哪些&#xff1f; 5. 双亲委派模型的作用&#xff08;好处&#xff09;&#xff1f; 6. 讲一下类的加载和双亲委派原则&#xff1f; 7. 双亲委派模…...