GDAL OGR C++ API 学习之路 (1)ORGfeatureDefn篇

OGRFeatureDefn Class        “ogr_feature.h”

OGRFeatureDefn是一个定义了OGRFeature对象所包含的属性和几何字段元数据的类,它包含了所有OGRFeature对象的字段信息,包括每个字段的名称、数据类型、宽度、精度和是否可空等元数据信息

OGRFeatureDefn

explicit OGRFeatureDefnconst char *pszName = nullptr)        此方法与 C 函数 OGR_FD_Create() 相同

构造函数

参数: pszName – 要分配给此图层/类的名称。它不需要是唯一的

OGRFeatureDefn* poFeatureDefn = new OGRFeatureDefn("my_feature");

SetName

void SetNameconst char *pszName)        

更改此 OGRFeatureDefn 的名称

参数: pszName – 功能定义名称

OGRFeatureDefn* poFDefn = new OGRFeatureDefn("my_feature");
poFDefn->SetName("new_feature_name");

GetName

Virtual const char *GetName() const         此方法与 C 函数 OGR_FD_GetName() 相同

获取此 OGRFeatureDefn 的名称

返回:  名称。此名称是内部名称,不应修改或释放

OGRFeatureDefn* oDefn = new OGRFeatureDefn("my_feature");
const char* pszName = oDefn.GetName();  // 获取名称
cout << "Feature name: " << pszName << endl;

oDefn.SetName("newFeature");  // 修改名称
pszName = oDefn.GetName();  // 获取修改后的名称
cout << "Feature name: " << pszName << endl;

GetFieldCount

virtual int GetFieldCount() const        此方法与 C 函数 OGR_FD_GetFieldCount() 相同

获取此功能的字段数

OGRFeatureDefn* poFDefn = layer->GetLayerDefn();
int fieldCount = poFDefn->GetFieldCount();

GetFieldDefn

virtual OGRFieldDefn *GetFieldDefn(int i)            virtual const OGRFieldDefn *GetFieldDefn(int i) const        此方法与 C 函数 OGR_FD_GetFieldDefn() 相同

如果需要修改或者获取OGRFeature对象中的值,则使用后者;当我们只需要获取OGRFieldDefn对象时,建议使用返回const指针的函数;

参数:

iField – 要获取的字段,介于 0 和 GetFieldCount() 之间 - 1。

返回: 指向内部字段定义对象的指针,如果索引无效,则为 NULL。应用程序不应修改或释放此对象

OGRFeatureDefn* featureDefn = layer->GetLayerDefn();  // 获取图层定义
if (featureDefn != nullptr) {
    OGRFieldDefn* fieldDefn = featureDefn->GetFieldDefn(0);  // 获取第一个字段定义
    if (fieldDefn != nullptr) {
        const char* fieldName = fieldDefn->GetNameRef();  // 获取字段名称
        OGRFieldType fieldType = fieldDefn->GetType();  // 获取字段类型
        int fieldWidth = fieldDefn->GetWidth();  // 获取字段宽度
        int fieldPrecision = fieldDefn->GetPrecision();  // 获取字段精度
        // ...
    }
}

GetFieldIndex

virtual int GetFieldIndex(const char*) const        此方法与 C 函数 OGR_FD_GetFieldIndex() 相同

按名称查找字段        返回与传递的字段名称匹配的第一个字段的字段索引(不区分大小写)

参数:

psz字段名称 – 要搜索的字段名称。

返回:  字段索引,如果未找到匹配项,则为 -1

GetFieldIndexCaseSensitive

int GetFieldIndexCaseSensitive (const char*) const

按名称查找字段,区分大小写

返回与传递的字段名称匹配的第一个字段的字段索引。

参数:

psz字段名称 – 要搜索的字段名称。

返回: ,字段索引,如果未找到匹配项,则为 -1。

OGRFeatureDefn* poFDefn = poLayer->GetLayerDefn();

const char* pszFieldName = "name";
int iFieldIndex = poFDefn->GetFieldIndex(pszFieldName);

const char* pszFieldNameCaseSensitive = "Name";
int iFieldIndexCaseSensitive = poFDefn->GetFieldIndexCaseSensitive(pszFieldNameCaseSensitive);

GetFields

inline Fields GetFields()

返回可用于循环访问非几何字段的对象

Fields fields = featureDefn.GetFields();

// 遍历每个字段并输出名称和类型
for (const auto& field : fields)
{
    cout << "Field name: " << field.GetName() << ", Type: " << field.GetTypeName() << endl;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

场主不吃鍋巴

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

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

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

打赏作者

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

抵扣说明:

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

余额充值