GDAL C++ API 学习之路 OGRGeometry 线类 OGRLineString

OGRLineString class "ogr_geometry.h"

OGRLineString 类是 OGR 库中的一个几何对象类,用于表示线段或折线。它由多个坐标点组成,并且在坐标点之间形成线段。OGRLineString 可以包含 2D、3D 或 3D+M 坐标点,其中 M 表示额外的度量值,例如时间或速度

Public Functions

OGRLineString()

创建一个空线串

OGRLineString(const OGRLineString &other**)**

复制构造函数

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

赋值运算符

clone

virtual OGRLineString *clone() const override

创建此对象的副本

复制代码
OGRLineString lineString;

// 添加两个坐标点构成线段
lineString.addPoint(0.0, 0.0);
lineString.addPoint(10.0, 10.0);

// 克隆 OGRLineString 对象
OGRLineString* clonedLineString = lineString.clone();

CurveToLine

virtual OGRLineString *CurveToLine(double dfMaxAngleStepSizeDegrees = 0, const char *const *papszOptions = nullptr) const override

从曲线几何返回线串

参数:

  • dfMaxAngleStepSizeDegrees -- 沿弧的最大步长(以度为单位),使用默认设置为零。

  • papszOptions -- 选项作为以 null 结尾的字符串列表或 NULL。

返回: 近似曲线的线串

复制代码
OGRLineString lineString;
    
// Add points to the lineString (this could be a curve)
lineString.addPoint(0, 0);
lineString.addPoint(1, 1);
lineString.addPoint(2, 0);
    
// Convert curve to line
OGRLineString* convertedLine = lineString.CurveToLine();
    
// Output the converted line's points
for (int i = 0; i < convertedLine->getNumPoints(); ++i) {
    double x, y;
    convertedLine->getPoint(i, &x, &y);
    std::cout << "Point " << i << ": (" << x << ", " << y << ")" << std::endl;
}
    
// Release memory
delete convertedLine;

getCurveGeometry

virtual OGRGeometry *getCurveGeometry(const char *const *papszOptions = nullptr) const override

返回此几何图形的曲线版本

参数:

papszOptions -- 选项作为以 null 结尾的字符串列表。暂时未使用。必须设置为 NULL。

返回: 新的几何图形

复制代码
// 创建一个线性曲线对象
    OGRLineString linearRing;
    linearRing.addPoint(0, 0);
    linearRing.addPoint(1, 0);
    linearRing.addPoint(1, 1);
    linearRing.addPoint(0, 1);
    linearRing.addPoint(0, 0);

    // 获取线性曲线的几何对象
    OGRGeometry* curveGeometry = linearRing.getCurveGeometry();

    // 输出几何对象的类型
    if (curveGeometry != nullptr) {
        OGRwkbGeometryType geomType = curveGeometry->getGeometryType();
        const char* typeName = OGRGeometryTypeToName(geomType);
        printf("Curve geometry type: %s\n", typeName);

        // 释放内存
        OGRGeometryFactory::destroyGeometry(curveGeometry);
    } else {
        printf("Failed to get curve geometry.\n");
    }

get_Area

virtual double get_Area() const override

获取(闭合)曲线的面积

返回: 要素的面积(以使用的空间参考系统的平方单位表示)

复制代码
// 创建一个多边形对象
    OGRLinearRing ring;
    ring.addPoint(0, 0);
    ring.addPoint(1, 0);
    ring.addPoint(1, 1);
    ring.addPoint(0, 1);
    ring.addPoint(0, 0);

    OGRPolygon polygon;
    polygon.addRing(&ring);

    // 获取多边形对象的面积
    double area = polygon.get_Area();

    // 输出面积
    printf("Polygon area: %f\n", area);

getGeometryType

virtual OGRwkbGeometryType getGeometryType() const override

返回:

几何类型类型

复制代码
    // 创建一个点对象
    OGRPoint point(10.0, 20.0);

    // 获取点对象的几何类型
    OGRwkbGeometryType geomType = point.getGeometryType();

    // 输出几何类型
    switch (geomType) {
        case wkbPoint:
            printf("Geometry Type: Point\n");
            break;
        case wkbLineString:
            printf("Geometry Type: LineString\n");
            break;
        case wkbPolygon:
            printf("Geometry Type: Polygon\n");
            break;
        // 更多几何类型的处理...
        default:
            printf("Unknown Geometry Type\n");
            break;
    }

getGeometryName

Virtual const char *getGeometryName() const override

获取几何类型的 WKT 名称

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

复制代码
// 创建一个点对象
    OGRPoint point(10.0, 20.0);

    // 获取几何对象的名称
    const char* geometryName = point.getGeometryName();

    // 输出几何对象的名称
    printf("Geometry Name: %s\n", geometryName);

isClockwise

virtual int isClockwise() const override

如果环具有顺时针绕组(或小于 2 磅),则返回 TRUE

返回: 如果顺时针为真,否则为假

复制代码
/ 创建一个多边形对象
    OGRLinearRing ring;
    ring.addPoint(0, 0);
    ring.addPoint(0, 1);
    ring.addPoint(1, 1);
    ring.addPoint(1, 0);
    ring.addPoint(0, 0);

    OGRPolygon polygon;
    polygon.addRing(&ring);

    // 判断多边形顶点排列方向
    int clockwise = polygon.isClockwise();

    // 输出判断结果
    if (clockwise > 0) {
        printf("Polygon is clockwise.\n");
    } else if (clockwise < 0) {
        printf("Polygon is counterclockwise.\n");
    } else {
        printf("Vertices are collinear or not a valid polygon.\n");
    }
相关推荐
陈年老古董18 分钟前
OpenCV 人脸识别学习笔记:从Haar检测到三种特征脸算法实战
笔记·opencv·学习·人脸识别
旖旎夜光23 分钟前
【LangChain实战】LangChain 学习笔记(二):结构化输出、流式传输与消息管理
人工智能·笔记·python·学习·ai·langchain
我是你的开心果7781 小时前
ai全栈应用开发学习day19
学习
是隼人1 小时前
buuctf-pwn wustctf2020_closed(文件描述符)题解(学习过程持续更新)
c语言·学习·安全·pwn入门·ctf入门
励志不掉头发的内向程序员1 小时前
【LibreCAD 2D架构】从两个坐标到图形实体:RS_ActionDrawLine如何创建RS_Line
开发语言·c++·qt·学习·系统架构
sunshine22 girl2 小时前
Java学习一 环境配置1 安装JDK,配置环境变量
java·开发语言·学习
我爱cope2 小时前
【计算机网络 | 传输层5:TCP 如何实现可靠传输?滑动窗口、累计确认与重传机制】
网络·网络协议·学习·tcp/ip·计算机网络·传输层
zfoo-framework2 小时前
kotlin技术栈各种 学习文档
学习
是隼人2 小时前
buuctf-pwn wdb_2018_3rd_soEasy(ret2shellcode)题解(学习过程持续更新)
c语言·学习·安全·pwn入门·ctf入门
mykj155110 小时前
英语单词APP解锁学习新方式,智能高效背单词
学习·英语单词app