AddGeomFieldDefn
virtual void AddGeomFieldDefn(const OGRGeomFieldDefn*) 此方法与 C 函数 OGR_FD_AddGeomFieldDefn() 相同
添加新的几何字段定义
给一个OGRFeatureDefn对象添加新的字段定义只是修改了该对象的元数据信息,而并没有修改数据源中的字段定义。如果要将新的字段定义应用到数据源中,你需要使用OGRLayer对象的CreateField方法来在数据源中创建新的字段 仅当不存在基于此 OGRFeatureDefn 的 OGRFeature 对象时,才应调用此方法
参数:
poNewDefn – 新几何字段的定义
OGRFeatureDefn featureDefn("NewFeatureType");
OGRFieldDefn fieldDefn("NewField", OFTString);
fieldDefn.SetWidth(32); //设置宽度为 32
featureDefn.AddFieldDefn(&fieldDefn);
DeleteFieldDefn
virtual OGRErr DeleteFieldDefn(int iField) 此方法与 C 函数 OGR_FD_DeleteFieldDefn() 相同
删除现有字段定义
函数也是只对当前的 OGRFeatureDefn 对象起作用,而不会在数据源中删除字段。使用 OGRLayer::DeleteField() 函数可以删除数据源中的字段,同时也会在 OGRFeatureDefn 对象中删除对应的字段定义 仅当不存在基于此 OGRFeatureDefn 的 OGRFeature 对象时,才应调用此方法
参数:
iField – 字段定义的索引。
返回: OGRERR_NONE成功的情况下
OGRFeatureDefn *poDefn = poLayer->GetLayerDefn();
// 获取要删除的字段的索引
int iField = poDefn->GetFieldIndex("field_to_delete");
// 从定义中删除该字段
OGRErr err = poDefn->DeleteFieldDefn(iField);
if (err != OGRERR_NONE) {
cout << "Error deleting field" << endl;
}
ReorderFieldDefns
virtual OGRErr ReorderFieldDefns(const int *panMap) 此方法与 C 函数 OGR_FD_ReorderFieldDefns() 相同
对要素定义数组中的字段定义重新排序
要对图层定义中的字段定义重新排序,请不要直接使用此函数,而应改用 OGR_L_ReorderFields();仅当不存在基于此 OGRFeatureDefn 的 OGRFeature 对象时,才应调用此方法
参数:
panMap –其长度应与 GetFieldCount方法返回的字段数相同,它是 [0, GetFieldCount()-1] 的一个数组。
返回: OGRERR_NONE成功的情况下
排序规则:对于重新排序后位置 i 的每个字段定义,它在重新排序之前的位置是 panMap[i]。
例如,如果一个拥有 4 个字段的 OGRFeatureDefn 对象被创建,字段顺序为 {name, age, height, weight}。我们可以使用以下代码对其进行排序:
int panMap[4] = { 3, 0, 2, 1 };
featureDefn.ReorderFieldDefns(panMap);
此时,字段顺序将变为 {weight, name, height, age}
Clone
virtual OGRFeatureDefn *Clone() const
创建副本
返回: 副本
OGRFeatureDefn *poFeatureDefn = poLayer->GetLayerDefn();
OGRFeatureDefn* pNewDefn = poFeatureDefn->Clone();
SetGeometryIgnored
virtual void SetGeometryIgnored(int bIgnore) 此方法与 C 函数 OGR_FD_SetGeometryIgnored() 相同
设置获取要素时是否可以省略几何
参数: 0 忽略 1 不忽略
if (poDefn->IsGeometryIgnored(nGeomFieldIndex))
{
printf("The geometry field is ignored.\n");
}
IsGeometryIgnored
virtual int IsGeometryIgnored() const
检查在获取要素时是否可以省略几何
返回: 忽略状态 1或者 0
下一章: