GDAL C++ API 学习之路 OGRGeometry 环类 OGRLinearRing

OGRLinearRing class <ogrsf_frmts.h>

OGRLinearRing 是 OGR 库中的一个类,它是一个线性环(Linear Ring)的几何对象,用于表示封闭的线性路径。线性环是由一系列连续的线段组成,首尾相连形成闭合的环。线性环常用于构建多边形几何体,多边形的边界由线性环构成

Public Functions

OGRLinearRing()

构造 函数

OGRLinearRing(const OGRLinearRing &other**)**

复制构造函数

OGRLinearRing(OGRLinearRing*****)

构造 函数

OGRLinearRing &operator=(const OGRLinearRing &other**)**

赋值运算符

Virtual const char *getGeometryName() const override

获取几何类型的 WKT 名称

返回: 用于此几何类型的名称,采用众所周知的文本格式。返回的指针指向静态内部字符串,不应修改或释放

clone

virtual OGRLinearRing *clone() const override

创建此对象的副本

返回: 具有与原始对象相同的几何和空间参考系统的新对象实例

isPointInRing

OGRBoolean isPointInRing(const OGRPoint *pt, int bTestEnvelope = TRUE) const

返回点是否在环内

参数:

  • -- 点

  • bTestEnvelope -- 如果必须先检查环包络内是否存在该点,则设置为 TRUE。

返回: 对或错

    // 创建一个 OGRLinearRing 对象,表示一个线性环
    OGRLinearRing ring;
    ring.addPoint(0, 0);
    ring.addPoint(0, 1);
    ring.addPoint(1, 1);
    ring.addPoint(1, 0);
    ring.addPoint(0, 0);

    // 创建一个 OGRPoint 对象,表示要检测的点的坐标 (0.5, 0.5)
    OGRPoint point(0.5, 0.5);

    // 判断点是否在线性环的内部
    OGRBoolean isInRing = ring.isPointInRing(&point);

    if (isInRing) {
        printf("Point is inside the ring.\n");
    } else {
        printf("Point is not inside the ring.\n");
    }

isPointOnRingBoundary

OGRBoolean isPointOnRingBoundary(const OGRPoint *pt, int bTestEnvelope = TRUE) const

返回点是否在环边界上

参数:

  • -- 点

  • bTestEnvelope -- 如果必须先检查环包络内是否存在该点,则设置为 TRUE。

返回: 对或错

// 创建一个 OGRLinearRing 对象,表示一个线性环
    OGRLinearRing ring;
    ring.addPoint(0, 0);
    ring.addPoint(0, 1);
    ring.addPoint(1, 1);
    ring.addPoint(1, 0);
    ring.addPoint(0, 0);

    // 创建一个 OGRPoint 对象,表示要检测的点的坐标 (0.5, 0.5)
    OGRPoint point(0.5, 0.5);

    // 判断点是否在线性环的边界上
    OGRBoolean isOnBoundary = ring.isPointOnRingBoundary(&point);

    if (isOnBoundary) {
        printf("Point is on the ring boundary.\n");
    } else {
        printf("Point is not on the ring boundary.\n");
    }

transform

virtual OGRErr transform(OGRCoordinateTransformation *poCT) override

对几何图形应用任意坐标变换

此方法会将几何图形的坐标从其当前空间参考系统转换为新的目标空间参考系统。通常这意味着重新投影矢量,但它可能包括基准面偏移和单位变化

参数:

poCT -- 要应用的转换。

返回: OGRERR_NONE成功或错误代码

    // 创建一个 OGRPoint 对象,表示原始点的坐标 (30, 40)
    OGRPoint originalPoint(30, 40);

    // 创建源和目标的空间参考系统
    OGRSpatialReference sourceSRS;
    OGRSpatialReference targetSRS;
    sourceSRS.SetWellKnownGeogCS("WGS84"); // 使用 WGS84 作为源 CRS
    targetSRS.SetWellKnownGeogCS("EPSG:4326"); // 使用 EPSG:4326 作为目标 CRS

    // 创建坐标转换对象
    OGRCoordinateTransformation *transformer = OGRCreateCoordinateTransformation(&sourceSRS, &targetSRS);

    if (transformer) {
        // 对原始点进行坐标转换
        OGRErr err = originalPoint.transform(transformer);

        if (err == OGRERR_NONE) {
            // 打印转换后的点坐标
            double x = originalPoint.getX();
            double y = originalPoint.getY();
            printf("Transformed Point: (%f, %f)\n", x, y);
        } else {
            printf("Error during coordinate transformation!\n");
        }

        // 释放坐标转换对象
        OCTDestroyCoordinateTransformation(transformer);
    } else {
        printf("Failed to create coordinate transformation!\n");
    }
相关推荐
懒惰的bit3 小时前
基础网络安全知识
学习·web安全·1024程序员节
Natural_yz5 小时前
大数据学习09之Hive基础
大数据·hive·学习
龙中舞王5 小时前
Unity学习笔记(2):场景绘制
笔记·学习·unity
Natural_yz5 小时前
大数据学习10之Hive高级
大数据·hive·学习
love_and_hope6 小时前
Pytorch学习--神经网络--完整的模型训练套路
人工智能·pytorch·python·深度学习·神经网络·学习
夜雨星辰4876 小时前
Android Studio 学习——整体框架和概念
android·学习·android studio
奔跑的花短裤6 小时前
少儿编程启蒙学习
学习·青少年编程·机器人·ai编程
VertexGeek7 小时前
Rust学习(一):初识Rust和Rust环境配置
开发语言·学习·rust
chusheng18407 小时前
Java基于小程序公考学习平台的设计与实现(附源码,文档)
java·学习·小程序·公考小程序·公考学习小程序
虾球xz8 小时前
游戏引擎学习第五天
学习·算法·游戏引擎