GDAL C++ API 学习之路 (2) OGRGeometry 几何类 OGRGeometry

该文讨论了OGREnvelope结构在计算几何对象边界包络的作用,包括点、线段、多边形等不同类型的几何对象的包围盒算法。此外,还介绍了如何使用importFromWkb和exportToWkt方法在二进制WKB格式和文本WKT格式间转换几何对象。
摘要由CSDN通过智能技术生成

getEnvelope

virtual void getEnvelope(OGREnvelope *psEnvelope) const = 0

计算并返回传递的 psEnvelope 结构中此几何图形的边界包络

参数:

psEnvelope -- 放置结果的结构

获取几何对象的包围盒的算法通常取决于几何对象的类型。不同类型的几何对象可能需要不同的计算方法。以下是一些常见的几何对象的包围盒计算算法示例:

  • 点(OGRPoint):点的包围盒就是点本身,最小坐标值和最大坐标值都是点的坐标。
  • 线段(OGRLineString):线段的包围盒由线段的起点和终点确定,最小坐标值和最大坐标值分别是起点和终点的坐标。
  • 多边形(OGRPolygon):多边形的包围盒由多边形的外环(exterior ring)的所有点确定,最小坐标值和最大坐标值分别是外环中所有点的最小和最大坐标值。
  • 多点(OGRMultiPoint):多点的包围盒由所有点的坐标确定,最小坐标值和最大坐标值分别是所有点的最小和最大坐标值。
  • 多线段(OGRMultiLineString):多线段的包围盒由所有线段的起点和终点确定,最小坐标值和最大坐标值分别是所有线段的起点和终点的最小和最大坐标值。
  • 多多边形(OGRMultiPolygon):多多边形的包围盒由所有多边形的包围盒合并而成,最小坐标值和最大坐标值分别是所有多边形包围盒的最小和最大坐标值。

getEnvelope

virtual void getEnvelope(OGREnvelope3D *psEnvelope) const = 0

计算并返回传递的 psEnvelope 结构中此几何图形的边界包络 (3D)

参数:

psEnvelope -- 放置结果的结构

WkbSize

virtual size_t WkbSize() const = 0

返回相关二进制表示形式的大小

返回: 二进制表示形式的大小(以字节为单位)

importFromWkb

OGRErr importFromWkbconst GByte*, size_t = static_cast<size_t>(-1), OGRwkbVariant = wkbVariantOldOgc)

从已知的二进制数据中指定几何图形

参数:

  • pabyData -- 二进制输入数据。

  • nSize -- pabyData 的大小(以字节为单位),如果不知道,则为 -1。

  • eWkbVariant -- 如果 wkbVariantPostGIS1,则对曲线几何代码进行特殊解释

返回: OGRERR_NONE如果一切顺利,否则OGRERR_NOT_ENOUGH_DATA、OGRERR_UNSUPPORTED_GEOMETRY_TYPE或OGRERR_CORRUPT_DATA中的任何一个都可能被退回

// 定义包含 WKB 数据的字节数组
GByte wkbData[] = {
    0x01, 0x02, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
};
size_t wkbSize = sizeof(wkbData);

// 创建一个 OGRGeometry 对象
OGRGeometry* geom = nullptr;

// 使用 importFromWkb 导入几何对象
OGRErr err = geom->importFromWkb(wkbData, wkbSize);

importFromWkb

virtual OGRErr importFromWkb(const unsigned char*, size_t, OGRwkbVariant, size_t &nBytesConsumptiondOut) = 0

参数:

  • pabyData -- 二进制输入数据。

  • nSize -- pabyData 的大小(以字节为单位),如果不知道,则为 -1。

  • eWkbVariant -- 如果 wkbVariantPostGIS1,则对曲线几何代码进行特殊解释

  • nBytesConsumptiondOut -- 输出参数。消耗的字节数。

返回: OGRERR_NONE如果一切顺利,否则OGRERR_NOT_ENOUGH_DATA、OGRERR_UNSUPPORTED_GEOMETRY_TYPE或OGRERR_CORRUPT_DATA中的任何一个都可能被退回

exportToWkb

virtual OGRErr exportToWkb(OGRwkbByteOrder, unsigned char*, OGRwkbVariant = wkbVariantOldOgc) const = 0

将几何图形转换为众所周知的二进制格式

参数:

  • eByteOrder -- wkbXDR 或 wkbNDR 之一,分别表示 MSB 或 LSB 字节顺序。

  • pabyData -- 写入二进制表示的缓冲区。此缓冲区的大小必须至少为 OGRGeometry::WkbSize() 字节。

  • eWkbVariant -- 导出三维(或更多)几何图形时使用什么标准。默认的 wkbVariantOldOgc 是历史的 OGR 变体。wkbVariantIso 是 ISO SQL/MM 中定义的变体,并被 OGC 用于 SFSQL 1.2。

返回:  当前始终返回OGRERR_NONE

importFromWkt

virtual OGRErr importFromWkt(const char **ppszInput) = 0

从已知文本数据中指定几何图形

参数:

ppszInput -- 指向源文本指针的指针。指针将更新为已使用文本之后的指针。

返回:  OGRERR_NONE如果一切顺利,否则OGRERR_NOT_ENOUGH_DATA、OGRERR_UNSUPPORTED_GEOMETRY_TYPE或OGRERR_CORRUPT_DATA中的任何一个都可能被退回

exportToWkt

OGRErr exportToWkt(char **ppszDstText, OGRwkbVariant = wkbVariantOldOgc) const

将几何图形转换为众所周知的文本格式

  • 参数:

  • ppszDstText -- 文本缓冲区由程序分配,并分配给传递的指针。使用后,*ppszDstText 应该使用 CPLFree() 释放。

  • 变体 -- 也必须符合的规范:

    • wkb变体 Ogc 用于旧式 99-402 扩展尺寸 (Z) WKB 类型

    • wkbVariantIso for SFSQL 1.2 和 ISO SQL/MM 第 3 部分

返回:当前始终返回OGRERR_NONE

// 创建一个 OGRGeometry 对象(示例中以 OGRPoint 为例)
OGRPoint point(1.0, 2.0);

// 导出为 WKT 字符串
char* wktString = nullptr;
OGRErr err = point.exportToWkt(&wktString);

if (err == OGRERR_NONE) {
    // 导出成功
    // 打印导出的 WKT 字符串
    if (wktString != nullptr) {
        printf("WKT: %s\n", wktString);
        // 使用完毕后需要释放内存
        OGRFree(wktString);
    }
} else {
    // 导出失败或出现错误
    // 处理错误情况
}

exportToWkt

virtual std::string exportToWkt(const OGRWktOptions &opts = OGRWktOptions(), OGRErr *err = nullptr) const = 0

导出 WKT 几何图形

参数:

  • 选项 -- 输出选项

  • err -- 指向错误代码的指针(如果需要)。

返回: 表示此几何图形的 WKT 字符串

getGeometryType

virtual OGRwkbGeometryType getGeometryType() const = 0

获取几何类型

返回:  几何类型代码

getIsoGeometryType

OGRwkbGeometryType getIsoGeometryType() const

获取符合 ISO SQL/MM 第 3 部分的几何类型。

返回: 符合 ISO SQL/MM 第 3 部分的几何类型

// 创建一个 OGRGeometry 对象(示例中以 OGRPoint 为例)
OGRPoint point(1.0, 2.0);

// 获取几何类型
OGRwkbGeometryType geometryType = point.getIsoGeometryType();

// 打印几何类型枚举值
printf("Geometry Type: %d\n", geometryType);

getGeometryName

virtual const char *getGeometryName() const = 0

获取几何类型的 WKT 名称

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

dumpReadable

void dumpReadable(FILE*, const char* = nullptr, CSLConstList papszOptions = NULLPTR) const

将已知文本格式的几何图形转储到指示的输出文件

可以定义几个选项来更改默认转储:

  • DISPLAY_GEOMETRY=NO :隐藏几何图形的转储

  • DISPLAY_GEOMETRY=WKT 或 YES(默认):将几何图形转储为 WKT

  • DISPLAY_GEOMETRY=摘要:仅获取几何图形的摘要

参数:

  • FP -- 要将几何图形写入的文本文件。

  • pszPrefix -- 要放在每行输出上的前缀。

  • papszOptions -- NULL 终止的选项列表(可能为 NULL)

// 创建一个指向要写入的文件的 FILE 指针
    FILE* fpOut = fopen("output.txt", "w");

    // 创建一个几何图形对象
    OGRGeometry* geometry = new OGRPoint(1.0, 2.0);

    // 定义前缀字符串
    const char* pszPrefix = "Prefix: ";

    // 定义选项列表(以 NULL 终止的字符串数组)
    const char* papszOptions[] = {
        "option1",
        "option2",
        NULL  // 列表的最后一个元素必须是 NULL
    };

    // 调用 dumpReadable 函数,将几何图形写入文件
    geometry->dumpReadable(fpOut, pszPrefix, papszOptions);

dumpReadable

std::string dumpReadable(const char* = nullptr, CSLConstList papszOptions = NULLPTR) const

将已知文本格式的几何图形转储到指示的输出文件

可以定义几个选项来更改默认转储:

  • DISPLAY_GEOMETRY=NO :隐藏几何图形的转储

  • DISPLAY_GEOMETRY=WKT 或 YES(默认):将几何图形转储为 WKT

  • DISPLAY_GEOMETRY=摘要:仅获取几何图形的摘要

参数:

  • pszPrefix -- 要放在每行输出上的前缀。

  • papszOptions -- NULL 终止的选项列表(可能为 NULL)

返回: 带有几何表示形式的字符串

// 创建一个几何图形对象
    OGRGeometry* geometry = new OGRPoint(1.0, 2.0);

    // 定义前缀字符串
    const char* pszPrefix = "Prefix: ";

    // 定义选项列表(以 NULL 终止的字符串数组)
    const char* papszOptions[] = {
        "option1",
        "option2",
        NULL  // 列表的最后一个元素必须是 NULL
    };

    // 调用 dumpReadable 函数,获取几何图形的可读文本表示
    std::string readableText = geometry->dumpReadable(pszPrefix, papszOptions);

    // 打印可读文本表示
    std::cout << readableText << std::endl;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

场主不吃鍋巴

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

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

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

打赏作者

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

抵扣说明:

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

余额充值