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

OGRLineString class        "ogr_geometry.h"

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

Public Functions

OGRLineString()

创建一个空线串

OGRLineStringconst 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");
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

场主不吃鍋巴

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值