GDAL OGR C++ API 学习之路 (7)OGRFeature 篇 代码示例 验证要素

验证要素对象

验证要素对象是指对要素对象进行一系列检查和测试,以确保其满足特定的规则、约束或条件。在地理信息系统(GIS)中,要素对象通常包含空间几何信息和属性数据,例如点、线、面等空间要素以及与之相关联的属性字段

在地理信息系统(GIS)中,要素对象通常包含空间几何信息和属性数据,例如点、线、面等空间要素以及与之相关联的属性字段

常见的要素对象验证包括:

  • 几何验证:检查几何数据是否有效、完整、符合拓扑规则。
  • 属性验证:验证属性字段的数据类型、范围、完整性等。
  • 拓扑验证:检查要素之间的拓扑关系是否正确,如节点连接、边界相交等。
  • 空间关系验证:检查要素之间的空间关系是否满足特定条件,如包含、相交、接触等。

通过对要素对象进行验证,可以确保数据的准确性、一致性和可靠性,为后续的数据处理和分析提供可靠的基础

Validate

int Validate(int nValidateFlags, int bEmitError) const

验证要素是否满足其方案的约束        测试范围使用 nValidateFlags 参数指定

参数:

nValidateFlags

bEmitError

返回: 如果所有启用的验证测试都通过,则为 TRUE

nValidateFlags可以根据您的需求设置为以下值之一或它们的组合:

  • OGR_VAL_DEFAULT:默认验证标志,执行基本的几何和属性验证。
  • OGR_VAL_GEOMETRY:仅执行几何验证。
  • OGR_VAL_FIELDS:仅执行属性字段验证。
  • OGR_VAL_ALL:执行所有类型的验证。
  • OGR_VAL_STRICT_GEOMETRY:执行严格的几何验证,包括检查几何类型的有效性和拓扑关系。
  • OGR_VAL_STRICT_FIELDS:执行严格的属性字段验证,包括检查字段类型和范围的有效性。
  • OGR_VAL_STRICT_ALL:执行严格的验证,包括几何和属性字段的所有检查

组合方式:

// 执行严格的几何和属性字段验证
int result = feature->Validate(OGR_VAL_STRICT_GEOMETRY | OGR_VAL_STRICT_FIELDS, TRUE);
 

 // 读取第一个要素
OGRFeature* feature = layer->GetNextFeature();

// 执行默认验证并发出错误消息
int result = feature->Validate(OGR_VAL_DEFAULT, TRUE);

if (result)
      std::cout << "要素验证失败" << std::endl;
else
      std::cout << "要素验证通过" << std::endl;

FillUnsetWithDefault

void FillUnsetWithDefault(int bNotNullableOnly, char **papszOptions)

void FillUnsetWithDefault(int bNotNullableOnly, char **papszOptions)

参数:

  • bNotNullableOnly -- 如果我们只用非空约束填充未设置的字段。

  • papszOptions -- 目前未使用。必须设置为 NULL

    feature->FillUnsetWithDefault(0, nullptr);

    bNotNullableOnly参数设置为非零值(例如1)时,FillUnsetWithDefault函数只会填充那些被定义为非空的属性字段,即那些必须具有有效值的字段。这意味着只有那些尚未设置为有效值的非空字段会被填充为默认值。

    bNotNullableOnly参数设置为零值(例如0)时,FillUnsetWithDefault函数将填充所有未设置的属性字段,无论它们是非空字段还是可为空字段。这意味着所有尚未设置为有效值的属性字段都会被填充为默认值

GetStyleString

virtual const char *GetStyleString() const

获取此要素的样式字符串

返回: 对字符串格式的表示形式的引用,如果没有,则为 NULL

const char* styleString = feature->GetStyleString();
if (styleString != nullptr) {
    // 处理样式字符串
    // ...
} else {
    // 没有样式字符串
    // ...
}

SetStyleString

virtual void SetStyleStringconst char*)

设置要素样式字符串

参数:

pszString -- 要应用于此功能的样式字符串不能为 NULL

// 创建要素对象
    OGRFeature feature;

    // 设置样式字符串
    const char* styleString = "color:red;width:2px;fill:blue";
    feature.SetStyleString(styleString);

    // 获取设置后的样式字符串
    const char* retrievedStyleString = feature.GetStyleString();
    if (retrievedStyleString != nullptr) {
        std::cout << "Retrieved style string: " << retrievedStyleString << std::endl;
    } else {
        std::cout << "No style string set." << std::endl;
    }

SetStyleStringDirect

virtual void SetStyleStringDirect(char*)

设置要素样式字符串

SetStyleString函数不同,SetStyleStringDirect不会复制传入的样式字符串,而是直接使用传入的指针。这意味着在调用此函数后,应用程序需要确保传入的样式字符串在要素对象的生命周期内保持有效

char* styleString = new char[100];
    strcpy(styleString, "color:red;width:2px;fill:blue");
    feature.SetStyleStringDirect(styleString);

    // 获取设置后的样式字符串
    const char* retrievedStyleString = feature.GetStyleString();
    if (retrievedStyleString != nullptr) {
        std::cout << "Retrieved style string: " << retrievedStyleString << std::endl;
    } else {
        std::cout << "No style string set." << std::endl;
    }

    // 清理内存
    delete[] styleString;

一般建议使用SetStyleString函数,除非有特定的需求和注意事项需要使用SetStyleStringDirect函数

GetStyleTable

inline virtual OGRStyleTable *GetStyleTable() const

返回样式表

OGRStyleTable* styleTable = feature->GetStyleTable();
if (styleTable != nullptr) {
    // 对样式表进行操作或查询
    // ...
}

SetStyleTable

virtual void SetStyleTableOGRStyleTable *poStyleTable )

设置样式表

// 创建一个OGRFeature对象
    OGRFeature* feature = new OGRFeature();

    // 创建一个OGRStyleTable对象,并添加样式
    OGRStyleTable* styleTable = new OGRStyleTable();
    OGRStyleMgr* styleMgr = new OGRStyleMgr();
    OGRStyle* style = new OGRStyle();
    style->SetName("Style1");
    style->SetString("PEN(c:#FF0000,w:2px)");
    styleMgr->AddStyle(style);
    styleTable->AddStyle(style);

    // 设置要素对象的样式表
    SetFeatureStyleTable(feature, styleTable);
  • styleTableOGRStyleTable)是一个存储多个样式(OGRStyle)的容器。它可以包含多个样式,并且可以根据需要进行添加、删除和修改。

  • styleMgrOGRStyleMgr)是一个样式管理器对象,用于管理样式的创建和存储。它可以创建和管理多个样式,并提供了对样式的操作和查询功能。

  • styleOGRStyle)是一个具体的样式对象,它包含了定义要素渲染样式的属性,例如线条颜色、宽度、填充颜色等。可以通过设置样式的属性来定义要素的显示样式

这个以后的OGRFeature Style C++ API中会讲到:

 

SetStyleTableDirect

virtual void SetStyleTableDirectOGRStyleTable *poStyleTable )

设置样式表

// 假设有一个名为feature的OGRFeature对象
const char* nativeData = feature->GetNativeData();
if (nativeData != nullptr) {
    // 处理原生数据
    std::cout << "Native Data: " << nativeData << std::endl;
}

GetNativeData

inline const char *GetNativeData() const

返回要素原生数据

原生数据(Native Data)是指特定数据源或驱动程序所使用的底层数据格式或结构。它是数据在其原始形式下存储的方式,通常是由数据源或驱动程序内部定义的。原生数据通常与特定的数据源或驱动程序紧密相关,其格式和含义可能因不同的数据源或驱动程序而有所差异

总结来说,原生数据是指特定数据源或驱动程序内部使用的底层数据格式或结构,通过获取原生数据,可以对数据进行更底层的操作和处理

SetNativeData

void SetNativeData(const char *pszNativeData)

设置要素的原生数据

参数:

pszNativeData -- 包含本机数据的字符串,如果没有,则为 NULL

// 假设有一个名为feature的OGRFeature对象
const char* nativeData = "Some native data";  // 原生数据

// 设置要素的原生数据
feature->SetNativeData(nativeData);

GetNativeMediaType

inline const char *GetNativeMediaType() const

获取与要素相关的原生媒体类型

const char* mediaType = feature->GetNativeMediaType();

// 打印原生媒体类型
if (mediaType != nullptr) {
    printf("Native Media Type: %s\n", mediaType);
} else {
    printf("Native Media Type not available\n");
}

SetNativeMediaType

void SetNativeMediaType(const char *pszNativeMediaType)

设置功能的本机媒体类型

参数:

pszNativeMediaType -- 具有本机媒体类型的字符串,如果没有,则为 NULL

// 假设有一个名为feature的OGRFeature对象
const char* nativeMediaType = "application/json";  // 原生媒体类型

// 设置要素的原生媒体类型
feature->SetNativeMediaType(nativeMediaType);

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

场主不吃鍋巴

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

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

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

打赏作者

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

抵扣说明:

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

余额充值