当前位置: 首页 > 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);

http://www.lryc.cn/news/107504.html

相关文章:

  • 2023年华数杯数学建模C题思路代码分析 - 母亲身心健康对婴儿成长的影响
  • WebAgent-基于大型语言模型的代理程序
  • 智慧~经典开源项目数字孪生智慧商场——开源工程及源码
  • LeetCode--剑指Offer75(1)
  • C++ 关于大端模式和小端模式的简析
  • 嵌入式:C高级 Day2
  • iPhone 7透明屏的显示效果怎么样?
  • 【C++】—— 多态常见的笔试和面试问题
  • 探寻AI大模型平台之巅——文心千帆
  • 【springboot】RestTemplate配置HttpClient连接池
  • MySQL内置函数使用说明
  • java后端富文本转word,再传递到浏览器下载。
  • 【动态规划算法】-回文串问题题型(34-40题)
  • STM32基础回顾
  • 如何解决电脑无声问题:排除故障的几种常见方法
  • Apache RocketMQ 命令注入
  • 二、搜索与图论6:Dijkstra 模板题+算法模板(Dijkstra求最短路 I, Dijkstra求最短路 II,1003 Emergency)
  • ROS2学习(四)进程,线程与节点的关系
  • 【物联网】DMA传输原理与实现详解(超详细)
  • Java类集框架(二)
  • 爬虫008_流程控制语句_if_if else_elif_for---python工作笔记026
  • 【随笔】五周年创作纪念日
  • 7_分类算法—逻辑回归
  • 【计算机网络】应用层协议 -- DNS协议
  • ES6 - 数组新增的一些常用方法
  • 【BEV感知】3-BEV开源数据集
  • Kafka-Broker工作流程
  • 第八篇-Tesla P40+ChatGLM2+LoRA
  • 调用feign返回错误的数据
  • 【Spring】(二)从零开始的 Spring 项目搭建与使用