类 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枚举类:
值域型(OGRCodedValueFieldDomain),用于对某个字段进行分类,限定其取值范围,例如一个城市名字段的取值范围可以限制为某个省或者国家内的城市名。
范围型(OGRRangeFieldDomain),用于对某个字段的取值范围进行限定,例如一个人的年龄字段必须在0到120岁之间。
全局型(OGRGlobFieldDomain),使用通配符来匹配某个字段的取值范围,例如一个邮箱字段可以通过通配符限定只能使用某个公司的邮箱地址。
时间型(OGRTemporalFieldDomain),用于对时间字段的取值范围进行限定。
几何型(OGRGeometryFieldDomain),用于对几何字段的取值范围进行限定,例如一个几何字段的取值必须是一个点、线或者面。
自定义型(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);