GDAL OGR C++ API 学习之路 ORGFieldDomain篇 代码示例

类 ORGFieldDomain      “ogr_core.h”

OGRFieldDomain是对OGRField的一种约束和限制。

OGRFieldDomain对象可以指定一个枚举类型、最小值和最大值、一个范围、或一个字符串列表等,这些限制OGRFeature的某个字段的值必须符合的规则。这些规则可以保证数据的一致性和合法性

字段域可以是:

OGRCodedFieldDomain:(代码、值)元组的枚举列表

OGRRangeFieldDomain:范围约束(最小值、最大值)

OGRGlobFieldDomain:一个 glob 表达式

  • OGRCodedFieldDomain:表示字段域是一个离散的、预定义的值域,每个值有对应的代码或标签。例如,一个人的性别可以是"male"或"female",对应的代码可以是0或1。
  • OGRGlobFieldDomain:表示字段域是一个通配符表达式,即一个字符串模板,用于匹配符合条件的值。例如,"ABC*"可以匹配以"ABC"开头的任意字符串。
  • OGRRangeFieldDomain:表示字段域是一个连续的、有序的值域,可以用最小值和最大值来定义。例如,一个年龄字段的范围可以是0到120岁。

~OGRFieldDomain

virtual ~OGRFieldDomain() = 0        这与 C 函数 OGR_FldDomain_Destroy() 相同

析构

Clone

virtual OGRFieldDomain *Clone() const = 0        

克隆

返回克隆的对象,或在出现错误时返回 nullptr

GetName

inline const std::string &GetName() const        这与 C 函数 OGR_FldDomain_GetName() 相同

获取字段域的名称

OGRFieldDomain* domain = new OGRCodedValueDomain("my_domain");
cout << "Domain name: " << domain->GetName() << endl;

GetDescription       

inline const std::string &GetDescription() const        与 C 函数 OGR_FldDomain_GetDescription() 相同

获取字段域的说明

如果没有,则为空字符串

OGRFieldDomain* pFieldDomain = new OGRFieldDomain("Test Domain", "This is a test domain");

// 获取域的描述
string strDescription = pFieldDomain->GetDescription();
cout << "Description: " << strDescription << endl;

GetDomainType

inline OGRFieldDomainType GetDomainType() const        与 C 函数 OGR_FldDomain_GetDomainType() 相同

获取字段域的类型

auto domain = new OGRFieldDomain();

// 设置字段域类型
domain->SetDomainType(OGRFieldDomainType::OFTString);

// 获取字段域类型
OGRFieldDomainType type = domain->GetDomainType();

// 打印
cout << "Domain type: " << type << endl;

 OGRFieldDomainType枚举类:

  1. 值域型(OGRCodedValueFieldDomain),用于对某个字段进行分类,限定其取值范围,例如一个城市名字段的取值范围可以限制为某个省或者国家内的城市名。

  2. 范围型(OGRRangeFieldDomain),用于对某个字段的取值范围进行限定,例如一个人的年龄字段必须在0到120岁之间。

  3. 全局型(OGRGlobFieldDomain),使用通配符来匹配某个字段的取值范围,例如一个邮箱字段可以通过通配符限定只能使用某个公司的邮箱地址。

  4. 时间型(OGRTemporalFieldDomain),用于对时间字段的取值范围进行限定。

  5. 几何型(OGRGeometryFieldDomain),用于对几何字段的取值范围进行限定,例如一个几何字段的取值必须是一个点、线或者面。

  6. 自定义型(OGRCustomFieldDomain),用于根据特定需求自定义字段域类型。

GetFieldType

inline OGRFieldType GetFieldType() const        这与 C 函数 OGR_FldDomain_GetFieldType() 相同

获取字段类型

// 获取字段类型
OGRFieldType type = domain->GetDomainType();

// 打印
cout << "Domain type: " << type << endl;

GetFieldSubType

inline OGRFieldSubType GetFieldSubType() const        这与 C 函数 OGR_FldDomain_GetFieldSubType() 相同

获取字段子类型

拆分策略和合并策略

在 OGRFieldDomain 中,拆分策略(SplitStrategy)和合并策略(MergeStrategy)用于指定如何处理字段域的多个值。具体来说

  • 拆分策略用于将字段域的多个值分割成单独的值。例如,对于一个包含多个值的邮政编码字段域,拆分策略可以指定将多个邮政编码分割成单独的邮政编码值,从而便于数据的查询和处理。
  • 合并策略用于将单独的值合并成一个值。例如,对于一个包含多个关键词的字段域,合并策略可以指定将这些关键词合并成一个单独的字符串,便于数据的显示和导出。

常见的拆分策略和合并策略包括:

OGRFieldDomainSplitPolicy::OFDSP_DEFAULT_VALUE                   如果要拆分的字段的值不能被成功拆分,则会使用预定义的默认值来代替该值

OGRFieldDomainSplitPolicy::OFDSP_DUPLICATE                             有多个值需要被分配给同一字段时,复制所有的值并将它们作为独立的条目插入该字段

OGRFieldDomainSplitPolicy::OFDSP_GEOMETRY_RATIO                按照几何图形的比例进行拆分

OGRFieldDomainMergePolicy::OFDMP_DEFAULT_VALUE                使用该字段的默认值作为合并结果

OGRFieldDomainMergePolicy::OFDMP_SUM                                      在合并多个字段值时将它们相加

OGRFieldDomainMergePolicy::OFDMP_GEOMETRY_WEIGHTED    合并后的值将是所有几何体权重的加权平均值

这些拆分策略和合并策略可以根据数据的特点和需要进行灵活的配置和调整    默认值可以通过 SetDefaultValue() 方法设置

GetSplitPolicy

inline OGRFieldDomainSplitPolicy GetSplitPolicy() const        这与 C 函数 OGR_FldDomain_GetSplitPolicy() 相同

获取拆分策略

SetSplitPolicy

inline void SetSplitPolicy(OGRFieldDomainSplitPolicy policy)        这与 C 函数 OGR_FldDomain_SetSplitPolicy() 相同

设置拆分策略

// 得到拆分策略
OGRFieldDomainSplitPolicy splitPolicy = domain->GetSplitPolicy();

// 设置拆分策略
domain->SetSplitPolicy(OGRFieldDomainSplitPolicy::OFDSP_DEFAULT_VALUE);

GetMergePolicy

inline OGRFieldDomainMergePolicy GetMergePolicy() const        这与 C 函数 OGR_FldDomain_GetMergePolicy() 相同

获取合并策略

SetMergePolicy

inline void SetMergePolicy(OGRFieldDomainMergePolicy policy)        这与 C 函数 OGR_FldDomain_SetMergePolicy() 相同

设置合并策略

OGRFieldDomainMergePolicy eMergePolicy = poFieldDefn->GetMergePolicy();

poFieldDefn->SetMergePolicy(OGRFieldDomainMergePolicy::OFDMP_DEFAULT_VALUE);

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

场主不吃鍋巴

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

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

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

打赏作者

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

抵扣说明:

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

余额充值