OGRFeature处理几何字段
OGRFeatureDefn 中也可以处理和获取几何字段,是因为它的设计初衷是为了支持早期版本的 OGR 格式,这些版本不支持将几何字段作为单独的实体进行处理。因此,OGRFeatureDefn 中的方法可以同时处理属性字段和几何字段,以满足早期版本 OGR 格式的要求。但是,从 OGR 1.9.0 版本开始,引入了新的 OGRGeomFeatureDefn 类,可以更方便地处理几何字段,因此建议在新代码中使用 OGRGeomFeatureDefn
所有下面我只把对于的函数和参数列出,具体的使用示例和属性字段一样,就不展示了
GetGeomFieldCount
virtual int GetGeomFieldCount() const 此方法与 C 函数 OGR_FD_GetGeomFieldCount() 相同
获取此要素上的几何字段数
字段=属性字段+几何字段
返回: 几何字段的计数
GetGeomFieldDefn
virtual OGRGeomFieldDefn *GetGeomFieldDefn(int i) virtual const OGRGeomFieldDefn *GetGeomFieldDefn(int i) const 此方法与 C 函数 OGR_FD_GetGeomFieldDefn() 相同
获取几何字段定义
参数:
iGeomField – 要获取的几何字段,介于 0 和 GetGeomFieldCount() 之间 - 1。
返回: 指向内部字段定义对象的指针,如果索引无效,则为 NULL。应用程序不应修改或释放此对象
GetGeomFieldIndex
virtual int GetGeomFieldIndex(const char*) const 此方法与 C 函数 OGR_FD_GetGeomFieldIndex() 相同
按名称查找几何字段
返回与传递的字段名称匹配的第一个几何字段的几何字段索引(不区分大小写)
参数:
pszGeomFieldName – 要搜索的几何字段名称。
返回: 几何字段索引,如果未找到匹配项,则为 -1
GetGeomFields
inline GeomFields GetGeomFields()
返回可用于迭代几何字段的对象
for( const auto* poGeomFieldDefn: poFeatureDefn->GetGeomFields() )
{
// do something
}
AddGeomFieldDefn
virtual void AddGeomFieldDefn(const OGRGeomFieldDefn*) 此方法与 C 函数 OGR_FD_AddGeomFieldDefn() 相同
添加新的几何字段定义
要将新的几何字段定义添加到图层定义,请不要直接使用此函数,而应改用 OGRLayer::CreateGeomField()仅当不存在基于此 OGRFeatureDefn 的 OGRFeature 对象时,才应调用此方法
参数: poNewDefn – 新几何字段的定义
DeleteGeomFieldDefn
virtual OGRErr DeleteGeomFieldDefn(int iGeomField) 此方法与 C 函数 OGR_FD_DeleteGeomFieldDefn() 相同
要从图层定义中删除现有字段定义,请不要直接使用此函数,而应改用 OGRLayer::D eleteGeomField()。
仅当不存在基于此 OGRFeatureDefn 的 OGRFeature 对象时,才应调用此方法
删除现有几何字段定义
参数:
iGeomField – 几何字段定义的索引。
返回: OGRERR_NONE成功的情况下
SetGeomType
virtual void SetGeomType(OGRwkbGeometryType) 此方法与 C 函数 OGR_FD_SetGeomType() 相同
为此图层指定基本几何类型
使用此类型的所有几何对象都必须是定义的类型或派生类型。创建时的默认值为 wkbUnknown,它允许任何几何类型。在根据此定义创建任何 OGRFeature 之后,通常不应更改几何类型
参数:
eNewType – 要分配的新类型
GetGeomType
virtual OGRwkbGeometryType GetGeomType() const 获取几何基类型
获取几何基类型
请注意,某些驱动程序无法确定图层的特定几何类型,在这种情况下,将返回 wkbUnknown。值 wkbNone 表示根本没有可用于图层的几何图形
返回: 与此定义相关的所有几何图形的基类型
OGRFeatureDefn *poFeatureDefn = new OGRFeatureDefn("my_feature");
// 设置几何类型为点
poFeatureDefn->SetGeomType(wkbPoint);
// 输出几何类型
OGRwkbGeometryType geomType = poFeatureDefn->GetGeomType();
if (geomType == wkbPoint) {
printf("Geometry type is Point.\n");
}