OGRFeatureDefn Class “ogr_feature.h”
OGRFeatureDefn是一个定义了OGRFeature对象所包含的属性和几何字段元数据的类,它包含了所有OGRFeature对象的字段信息,包括每个字段的名称、数据类型、宽度、精度和是否可空等元数据信息
OGRFeatureDefn
explicit OGRFeatureDefn(const char *pszName = nullptr) 此方法与 C 函数 OGR_FD_Create() 相同
构造函数
参数: pszName – 要分配给此图层/类的名称。它不需要是唯一的
OGRFeatureDefn* poFeatureDefn = new OGRFeatureDefn("my_feature");
SetName
void SetName(const 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;
}