当前位置: 首页 > 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数据…...

SpringBoot-17-MyBatis动态SQL标签之常用标签

文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…...

19c补丁后oracle属主变化,导致不能识别磁盘组

补丁后服务器重启&#xff0c;数据库再次无法启动 ORA01017: invalid username/password; logon denied Oracle 19c 在打上 19.23 或以上补丁版本后&#xff0c;存在与用户组权限相关的问题。具体表现为&#xff0c;Oracle 实例的运行用户&#xff08;oracle&#xff09;和集…...

mongodb源码分析session执行handleRequest命令find过程

mongo/transport/service_state_machine.cpp已经分析startSession创建ASIOSession过程&#xff0c;并且验证connection是否超过限制ASIOSession和connection是循环接受客户端命令&#xff0c;把数据流转换成Message&#xff0c;状态转变流程是&#xff1a;State::Created 》 St…...

WEB3全栈开发——面试专业技能点P2智能合约开发(Solidity)

一、Solidity合约开发 下面是 Solidity 合约开发 的概念、代码示例及讲解&#xff0c;适合用作学习或写简历项目背景说明。 &#x1f9e0; 一、概念简介&#xff1a;Solidity 合约开发 Solidity 是一种专门为 以太坊&#xff08;Ethereum&#xff09;平台编写智能合约的高级编…...

C# SqlSugar:依赖注入与仓储模式实践

C# SqlSugar&#xff1a;依赖注入与仓储模式实践 在 C# 的应用开发中&#xff0c;数据库操作是必不可少的环节。为了让数据访问层更加简洁、高效且易于维护&#xff0c;许多开发者会选择成熟的 ORM&#xff08;对象关系映射&#xff09;框架&#xff0c;SqlSugar 就是其中备受…...

NFT模式:数字资产确权与链游经济系统构建

NFT模式&#xff1a;数字资产确权与链游经济系统构建 ——从技术架构到可持续生态的范式革命 一、确权技术革新&#xff1a;构建可信数字资产基石 1. 区块链底层架构的进化 跨链互操作协议&#xff1a;基于LayerZero协议实现以太坊、Solana等公链资产互通&#xff0c;通过零知…...

OpenLayers 分屏对比(地图联动)

注&#xff1a;当前使用的是 ol 5.3.0 版本&#xff0c;天地图使用的key请到天地图官网申请&#xff0c;并替换为自己的key 地图分屏对比在WebGIS开发中是很常见的功能&#xff0c;和卷帘图层不一样的是&#xff0c;分屏对比是在各个地图中添加相同或者不同的图层进行对比查看。…...

C++.OpenGL (14/64)多光源(Multiple Lights)

多光源(Multiple Lights) 多光源渲染技术概览 #mermaid-svg-3L5e5gGn76TNh7Lq {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-3L5e5gGn76TNh7Lq .error-icon{fill:#552222;}#mermaid-svg-3L5e5gGn76TNh7Lq .erro…...

人工智能--安全大模型训练计划:基于Fine-tuning + LLM Agent

安全大模型训练计划&#xff1a;基于Fine-tuning LLM Agent 1. 构建高质量安全数据集 目标&#xff1a;为安全大模型创建高质量、去偏、符合伦理的训练数据集&#xff0c;涵盖安全相关任务&#xff08;如有害内容检测、隐私保护、道德推理等&#xff09;。 1.1 数据收集 描…...

消息队列系统设计与实践全解析

文章目录 &#x1f680; 消息队列系统设计与实践全解析&#x1f50d; 一、消息队列选型1.1 业务场景匹配矩阵1.2 吞吐量/延迟/可靠性权衡&#x1f4a1; 权衡决策框架 1.3 运维复杂度评估&#x1f527; 运维成本降低策略 &#x1f3d7;️ 二、典型架构设计2.1 分布式事务最终一致…...