GDAL C++ API 学习之路 OGRGeometry 抽象曲线基类 OGRCurve

OGRCurve class        "ogrsf_frmts.h"

OGRCurve 是 OGR(OpenGIS Simple Features Reference Implementation)几何库中的一个基类,表示曲线几何对象。它是 OGRLineStringOGRCircularString 的抽象基类,用于表示曲线类型的几何对象

Public Functions

ConstIterator begin() const

返回点迭代器的开始

ConstIterator end() const

点迭代器的返回结束

// 创建一个 OGRLineString 对象
    OGRLineString lineString;
    lineString.addPoint(0, 0);
    lineString.addPoint(1, 1);
    lineString.addPoint(2, 2);

    // 使用迭代器遍历 OGRLineString 的点集合
    for (OGRCurve::ConstIterator it = lineString.begin(); it != lineString.end(); ++it) {
        // 通过迭代器获取点坐标
        const OGRPoint* point = *it;
        double x = point->getX();
        double y = point->getY();

        // 在这里进行点坐标的处理
        // ...
    }

virtual void StartPoint(OGRPoint*) const = 0

返回曲线起点

参数:

poPoint -- 要指定起始位置的点

virtual void EndPoint(OGRPoint*) const = 0

返回曲线终点

参数:

poPoint -- 要指定结束位置的点

virtual int get_IsClosed() const

如果曲线闭合,则返回 TRUE

测试曲线是否闭合。如果曲线的起点等于其终点,则曲线闭合

返回: 如果关闭,则为 TRUE,否则为 FALSE

virtual int getDimension() const override

获取此对象的维度

返回: 0 表示点,1 表示直线,2 表示曲面

virtual int getNumPoints() const = 0

返回曲线几何图形的点数

返回:  曲线的点数

virtual OGRBoolean IsConvex() const

如果(闭合)曲线形成凸形状,则返回

返回: 如果曲线形成凸形,则为 TRUE

// 创建一个OGRLineString对象作为示例
    OGRLineString lineString;
    lineString.addPoint(0, 0);
    lineString.addPoint(1, 1);
    lineString.addPoint(2, 0);

    // 判断曲线是否为凸曲线
    OGRBoolean isConvex = lineString.IsConvex();

virtual int isClockwise() const

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

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

virtual double get_Area() const = 0

获取(闭合)曲线的面积

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

Centroid()

OGRErr OGRGeometry::Centroid ( OGRPoint * poPoint ) const

计算几何质心

质心位置应用于传入的 OGRPoint 对象。质心不一定在几何图形内

返回  OGRERR_NONE成功或OGRERR_FAILURE错误

OGRRegisterAll(); // 注册所有OGR数据格式驱动

    // 创建一个OGRLineString对象作为示例
    OGRLineString lineString;
    lineString.addPoint(0, 0);
    lineString.addPoint(1, 1);
    lineString.addPoint(2, 2);

    // 获取质心
    OGRPoint centroid;
    OGRErr err = lineString.Centroid(&centroid);

Public Static Functions

static OGRCompoundCurve *CastToCompoundCurve(OGRCurve *puCurve)

铸造到复合曲线        传入的几何将被消耗并返回一个新的几何图形(如果失败,则返回 NULL)

参数:

poCurve - 输入几何 - 所有权传递给方法。

返回:新几何形状

static OGRLineString *CastToLineString(OGRCurve *poCurve)

转换为线串        传入的几何将被消耗并返回一个新的几何图形(如果失败,则返回 NULL)

参数:

poCurve - 输入几何 - 所有权传递给方法。

返回: 新几何图形

static OGRLinearRing *CastToLinearRing(OGRCurve *poCurve)

铸造到线性环        传入的几何将被消耗并返回一个新的几何图形(如果失败,则返回 NULL)

参数:

poCurve - 输入几何 - 所有权传递给方法。

返回:  新几何图形

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
GDAL是一个功能强大的地理数据抽象库,用于读取、写入和处理各种栅格数据格式。在使用GDAL提取NDVI(归一化植被指数)时,我们可以按照以下步骤进行操作。 首先,我们需要引入GDAL库,并声明需要使用的数据集和波段。 ``` #include "gdal_priv.h" #include "cpl_conv.h" int main() { //声明需要使用的数据集和波段 GDALDatasetH hDataset; GDALRasterBandH hRedBand, hNirBand; //... return 0; } ``` 接下来,我们需要打开影像文件,并获取红光和近红外波段。 ``` hDataset = GDALOpen("input_image.tif", GA_ReadOnly); hRedBand = GDALGetRasterBand(hDataset, 1); hNirBand = GDALGetRasterBand(hDataset, 2); ``` 然后,我们需要读取红光和近红外波段的数据,并计算NDVI。 ``` int width = GDALGetRasterBandXSize(hRedBand); int height = GDALGetRasterBandYSize(hRedBand); float* redData = (float*) CPLMalloc(sizeof(float)*width*height); float* nirData = (float*) CPLMalloc(sizeof(float)*width*height); GDALRasterIO(hRedBand, GF_Read, 0, 0, width, height, redData, width, height, GDT_Float32, 0, 0); GDALRasterIO(hNirBand, GF_Read, 0, 0, width, height, nirData, width, height, GDT_Float32, 0, 0); float* ndviData = (float*) CPLMalloc(sizeof(float)*width*height); for (int i = 0; i < width*height; i++) { if (redData[i] + nirData[i] == 0) { ndviData[i] = 0; } else{ ndviData[i] = (nirData[i] - redData[i]) / (nirData[i] + redData[i]); } } ``` 最后,我们可以将计算得到的NDVI数据保存到新的影像文件中。 ``` GDALDriverH hDriver = GDALGetDriverByName("GTiff"); GDALDatasetH hOutputDataset = GDALCreateCopy(hDriver, "output_ndvi.tif", hDataset, 0, NULL, NULL, NULL); GDALRasterBandH hOutputBand = GDALGetRasterBand(hOutputDataset, 1); GDALRasterIO(hOutputBand, GF_Write, 0, 0, width, height, ndviData, width, height, GDT_Float32, 0, 0); ``` 上述代码片段展示了如何使用GDAL C API提取NDVI。通过逐像素计算红光和近红外波段之间的比值,我们可以得到NDVI并将其保存为新的栅格影像文件output_ndvi.tif。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

场主不吃鍋巴

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

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

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

打赏作者

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

抵扣说明:

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

余额充值