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");
    }
相关推荐
Ylucius1 小时前
动态语言? 静态语言? ------区别何在?java,js,c,c++,python分给是静态or动态语言?
java·c语言·javascript·c++·python·学习
LvManBa1 小时前
Vue学习记录之六(组件实战及BEM框架了解)
vue.js·学习·rust
LvManBa2 小时前
Vue学习记录之三(ref全家桶)
javascript·vue.js·学习
知识分享小能手2 小时前
mysql学习教程,从入门到精通,SQL DISTINCT 子句 (16)
大数据·开发语言·sql·学习·mysql·数据分析·数据库开发
晓幂4 小时前
CTFShow-信息搜集
笔记·学习
cyr___4 小时前
Unity教程(十六)敌人攻击状态的实现
学习·游戏·unity·游戏引擎
Code哈哈笑4 小时前
【C++ 学习】多态的基础和原理(10)
java·c++·学习
nbsaas-boot4 小时前
架构卡牌游戏:通过互动与挑战学习系统设计的创新玩法
学习·游戏·架构
QuantumYou5 小时前
计算机视觉 对比学习 串烧二
人工智能·学习·计算机视觉