GDAL OGR C++ API 学习之路 (6)OGRFeature 篇 代码示例 功能标识符FID

功能标识符FID

功能标识符在矢量数据中非常重要,它可以用于识别和访问特定的要素对象。通过获取要素对象的功能标识符

  1. 唯一标识要素对象:每个要素对象都有一个唯一的功能标识符,它可以用作要素的唯一标识符。通过获取功能标识符,您可以确保引用或操作正确的要素对象。

  2. 进行要素对象之间的比较:功能标识符可以用于比较两个要素对象是否相同。通过比较功能标识符,您可以确定两个要素对象是否引用了相同的要素。

  3. 数据关联和查询:功能标识符在数据关联和查询操作中非常有用。通过将功能标识符作为查询条件,您可以准确地检索特定的要素对象或执行关联操作

GetFID

inline GIntBig GetFID() const

获取功能标识符

返回: 特征 ID 或 OGRNullFID(如果未分配)

// 假设有一个名为 feature 的 OGRFeature 对象

// 获取功能标识符
GIntBig fid = feature.GetFID();

// 打印功能标识符
cout << "Feature ID: " << fid << endl;

输出:Feature ID: 12345

 

SetFID

virtual OGRErr SetFIDGIntBig nFIDIn)

设置功能标识符

参数:

nFIDIn -- 要分配的新特征标识符值。

返回: 在成功时OGRERR_NONE,或者在失败时,其他一些价值

// 创建一个新的 OGRFeature 对象
OGRFeature feature;

// 设置要素对象的功能标识符
GIntBig fid = 12345;
feature.SetFID(fid);

 

DumpReadable

void DumpReadable(FILE*, CSLConstList papszOptions = nullptr) const

用于将要素对象的可读格式信息输出到指定的文件流中。它将要素对象的属性和几何信息以易读的方式打印到文件中

它不会定义信息(字段类型和名称除外),也不会报告几何空间参考系统

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

  • DISPLAY_FIELDS=NO :隐藏属性的转储

  • DISPLAY_STYLE=NO :隐藏样式字符串的转储

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

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

参数

  • FILE*:指向要输出信息的文件流的指针。
  • CSLConstList papszOptions:可选参数,用于传递额外的选项
// 假设有一个名为 feature 的 OGRFeature 对象

// 打开一个文件流
FILE* file = fopen("feature_info.txt", "w");

// 设置附加选项
    "DISPLAY_FIELDS=NO",
    "DISPLAY_STYLE=NO",
    "DISPLAY_GEOMETRY=NO",
    "DISPLAY_GEOMETRY=SUMMARY",
    nullptr

// 将选项数组转换为 CSLConstList 类型
CSLConstList papszOptions = CSLDuplicate(options);

// 将要素对象的信息输出到文件中,包括附加选项
feature.DumpReadable(file, papszOptions);

// 关闭文件流
fclose(file);

// 释放选项数组的内存
CSLDestroy(papszOptions);

DumpReadableAsString

std::string DumpReadableAsString(CSLConstList papszOptions = nullptr) const

将要素对象的信息转储为字符串形式

它不会定义信息(字段类型和名称除外),也不会报告几何空间参考系统

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

  • DISPLAY_FIELDS=NO :隐藏属性的转储

  • DISPLAY_STYLE=NO :隐藏样式字符串的转储

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

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

参数:

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

返回: 具有要素表示的字符串

// 假设有一个名为 feature 的 OGRFeature 对象

// 设置附加选项
const char* options[] = {
    "DISPLAY_FIELDS=NO",
    "DISPLAY_STYLE=NO",
    "DISPLAY_GEOMETRY=NO",
    nullptr
};

// 将选项数组转换为 CSLConstList 类型
CSLConstList papszOptions = CSLDuplicate(options);

// 将要素对象的信息转储为字符串
std::string featureInfo = feature.DumpReadableAsString(papszOptions);

// 打印要素信息字符串
std::cout << featureInfo << std::endl;

SetFrom    

OGRErr SetFromconst OGRFeature*, int = TRUE)

设置一个要素与另一个要素

参数:

  • poSrcFeature -- 指向将从中复制几何和字段值的要素指针。

  • bForgiving -- 如果操作在缺少与某些源字段匹配的输出字段的情况下仍应继续,则为 TRUE

返回:OGRERR_NONE操作是否成功,即使某些值未传输,否则为错误代码

仅复制属性值和几何图形,而不会复制要素对象的其他属性(例如 FID)

// 假设有两个名为 feature1 和 feature2 的 OGRFeature 对象

// 将 feature1 的属性值和几何图形复制到 feature2
OGRErr result = feature2.SetFrom(&feature1,TURE);

if (result == OGRERR_NONE) {
    std::cout << "属性值和几何图形复制成功" << std::endl;
} else {
    std::cout << "属性值和几何图形复制失败" << std::endl;
}

SetFrom

OGRErr SetFrom(const OGRFeature*, const int*, int = TRUE)

设置一个要素与另一个要素  不需要具有相同的OGRFeatureDefn

根据提供的索引映射复制字段值。字段类型不必完全匹配

参数:

  • poSrcFeature -- 将从中复制几何和字段值的特征。

  • panMap -- 存储在源要素字段的相应索引处的要素字段索引的数组。应使用值 -1 来忽略源的字段。数组不应为 NULL,并且不应与源要素中的字段数一样长。

  • bForgiving -- 如果操作在缺少与某些源字段匹配的输出字段的情况下仍应继续,则为 TRUE。

返回:

OGRERR_NONE操作是否成功,即使某些值未传输,否则为错误代码

  // 假设有两个名为 feature1 和 feature2 的 OGRFeature 对象
    // feature1 包含 3 个属性字段,feature2 包含 4 个属性字段

    // 定义属性字段的映射关系
    int fieldMapping[] = {1,0,2,-1};

    // 将 feature1 的属性值按照映射关系复制到 feature2
    OGRErr result = feature2.SetFrom(&feature1, fieldMapping, TRUE);
  • 源要素对象的第一个属性字段(索引为 0)将复制到目标要素对象的第二个属性字段(索引为 1);
  • 源要素对象的第二个属性字段(索引为 1)将复制到目标要素对象的第一个属性字段(索引为 0);
  • 源要素对象的第三个属性字段(索引为 2)将复制到目标要素对象的第三个属性字段(索引为 2);
  • 源要素对象的第四个属性字段将被忽略,不进行复制;

SetFieldsFrom

OGRErr SetFieldsFrom(const OGRFeature*, const int*, int = TRUE)

设置其他要素中的字段

参数:

  • poSrcFeature -- 将从中复制几何和字段值的特征。

  • panMap -- 存储在源要素字段的相应索引处的要素字段索引的数组。应使用值 -1 来忽略源的字段。数组不应为 NULL,并且不应与源要素中的字段数一样长。

  • bForgiving -- 如果操作在缺少与某些源字段匹配的输出字段的情况下仍应继续,则为 TRUE。

返回: OGRERR_NONE操作是否成功,即使某些值未传输,否则为错误代码he

OGRErr SetFrom(const OGRFeature*, const int*, int = TRUE)一模一样

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

场主不吃鍋巴

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

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

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

打赏作者

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

抵扣说明:

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

余额充值