GetNextFeature
virtual OGRFeature *GetNextFeature(OGRLayer **ppoBelongingLayer, double *pdfProgressPct, GDALProgressFunc pfnProgress, void *pProgressData)
从此数据集中获取下一个可用要素
参数:
-
ppoBelongingLayer -- 指向 OGRLayer* 变量的指针,用于接收对象所属的层或 NULL。尽管特征不是 NULL,但 *ppoBelongingLayer 的输出可能是 NULL。
-
pdfProgressPct -- 指向双精度变量的指针,用于接收进度百分比(在 [0,1] 范围内)或 NULL。返回时,如果无法确定进度,则指向值可能为负数。
-
pfnProgress -- 用于报告进度的进度回调(对于可能持续时间较长的 GetNextFeature() 调用)并提供取消可能性或 NULL。
-
pProgressData -- 提供给 pfnProgress 或 NULL 的用户数据
返回: 一个功能,如果没有其他功能可用,则为 NULL
GDALDataset* poDataset = (GDALDataset*)GDALOpenEx("your_dataset_file_path", GDAL_OF_VECTOR, NULL, NULL, NULL); // 定义变量存储获取的要素和进度OGRFeature* poFeature;OGRLayer* pBelongingLayer;double dfProgressPct;GDALProgressFunc pfnProgress = GDALTermProgress;void* pProgressData = NULL;// 遍历数据集中的所有要素while ((poFeature = poDataset->GetNextFeature(&pBelongingLayer, &dfProgressPct, pfnProgress, pProgressData)) != NULL){// 处理要素,例如获取属性值等操作// 释放要素OGRFeature::DestroyFeature(poFeature);}// 关闭数据集GDALClose(poDataset);
GetFeatures
Features GetFeatures()
在数据集图层中的要素上返回可迭代对象的函数
// 假设Features是一个包含特征图层和特征的容器类型的类型别名
using Features = std::vector<std::pair<OGRLayer*, OGRFeature*>>;// 获取Features对象,其中包含了特征图层和特征的信息
Features features = poDS->GetFeatures();for( auto&& oFeatureLayerPair: poDS->GetFeatures() )
{std::cout << "Feature of layer " <<oFeatureLayerPair.layer->GetName() << std::endl;oFeatureLayerPair.feature->DumpReadable();
}
TestCapability
virtual int TestCapability(const char*)
测试功能是否可用
可以将以下数据集功能名称之一传递到此方法中,并将返回 TRUE 或 FALSE 值,指示该功能是否可用于此对象。
ODsCCreateLayer:如果此数据源可以创建新图层,则为 True。
ODsCDeleteLayer:如果此数据源可以删除现有图层,则为 True。
ODsCCreateGeomFieldAfterCreateLayer:如果此数据源的层在创建层后支持 CreateGeomField(),则为 True。
ODsCCurve几何:如果此数据源支持曲线几何,则为 True。
ODsCTransactions:如果此数据源支持(高效)事务,则为 True。
ODsCEmulatedTransactions:如果此数据源支持通过仿真进行事务,则为 true。
ODsCRandomLayerRead:如果此数据源具有专用的 GetNextFeature() 实现,则为 True,可能以非顺序方式从层返回特征。
ODsCRandomLayerWrite:如果此数据源支持以非顺序方式在层上调用 CreateFeature(),则为 True。
参数:
pszCap -- 测试能力。
返回: 如果功能可用,则为 TRUE,否则为 FALSE
// 打开数据源GDALDataset* poDataset = (GDALDataset*)GDALOpenEx("your_dataset_file_path", GDAL_OF_VECTOR, NULL, NULL, NULL);// 测试数据源是否支持写入能力if (poDataset->TestCapability(ODsCCreateLayer) == TRUE){std::cout << "Dataset supports creating layers." << std::endl;}else{std::cout << "Dataset does not support creating layers." << std::endl;}// 关闭数据源GDALClose(poDataset);
GetFieldDomainNames
virtual std::vector<std::string> GetFieldDomainNames(CSLConstList papszOptions = NULLPTR) const
返回数据集中存储的所有字段属性域的名称列表
参数:
papszOptions -- 确定应如何检索属性的特定于驱动程序的选项。传递默认行为的空点。
返回: 字段域名列表
// 打开数据源GDALDataset* poDataset = (GDALDataset*)GDALOpenEx("your_dataset_file_path", GDAL_OF_VECTOR, NULL, NULL, NULL);// 获取所有字段属性域的名称列表std::vector<std::string> fieldDomainNames;fieldDomainNames = poDataset->GetFieldDomainNames();// 输出域名称列表std::cout << "Field Domains: ";for (const std::string& domainName : fieldDomainNames){std::cout << domainName << ", ";}std::cout << std::endl;// 关闭数据源GDALClose(poDataset);
GetFieldDomain
virtual const OGRFieldDomain *GetFieldDomain(const std::string &name) const
从字段名称中获取字段域
// 打开数据集GDALAllRegister();GDALDataset* dataset = static_cast<GDALDataset*>(GDALOpen("path_to_your_dataset", GA_ReadOnly));// 获取指定字段的域信息std::string fieldName = "your_field_name"; // 替换为你想查询的字段名const OGRFieldDomain* fieldDomain = dataset->GetFieldDomain(fieldName);if (fieldDomain == nullptr){// 如果字段没有定义域,返回空指针std::cout << "Field '" << fieldName << "' has no domain defined." << std::endl;}
AddFieldDomain
virtual bool AddFieldDomain(std::unique_ptr<OGRFieldDomain> &&domain, std::string &failureReason)
将字段属性域添加到数据集
参数:
-
domain -- 域定义。
-
failureReason -- 输出参数。如果发生错误,将包含错误消息。
返回: 在成功的情况下为TURE
GDALDataset* dataset = static_cast<GDALDataset*>(GDALOpen("path_to_your_dataset", GA_Update));// 创建字段属性域对象std::unique_ptr<OGRFieldDomain> domain = std::make_unique<OGRFieldDomain>();// 设置字段属性域信息domain->SetName("your_domain_name"); // 替换为您要设置的域名称domain->SetType(OFTInteger); // 替换为您要设置的域类型,这里设置为整数类型domain->SetMin("1"); // 替换为您要设置的最小值domain->SetMax("10"); // 替换为您要设置的最大值// 添加字段属性域到数据集std::string failureReason;bool success = dataset->AddFieldDomain(std::move(domain), failureReason);if (success){std::cout << "Field domain added successfully." << std::endl;}else{std::cout << "Failed to add field domain. Reason: " << failureReason << std::endl;}
DeleteFieldDomain
virtual bool DeleteFieldDomain(const std::string &name, std::string &failureReason)
从数据集中移除字段属性域
参数:
-
domain -- 域名。
-
failureReason -- 输出参数。如果发生错误,将包含错误消息。
返回: 在成功的情况下为TURE
// 打开数据集GDALAllRegister();GDALDataset* dataset = static_cast<GDALDataset*>(GDALOpen("path_to_your_dataset", GA_Update));// 要移除的字段属性域的名称std::string fieldName = "your_domain_name"; // 替换为您要移除的字段属性域的名称// 移除字段属性域从数据集std::string failureReason;bool success = dataset->DeleteFieldDomain(fieldName, failureReason);if (success){std::cout << "Field domain '" << fieldName << "' removed successfully." << std::endl;}else{std::cout << "Failed to remove field domain. Reason: " << failureReason << std::endl;}// 释放资源并关闭数据集GDALClose(dataset);
UpdateFieldDomain
virtual bool UpdateFieldDomain(std::unique_ptr<OGRFieldDomain> &&domain, std::string &failureReason)
通过替换现有字段属性域的定义来更新其定义
参数:
-
domain -- 域名。
-
failureReason -- 输出参数。如果发生错误,将包含错误消息。
返回: 在成功的情况下为TURE
GDALDataset* dataset = static_cast<GDALDataset*>(GDALOpen("path_to_your_dataset", GA_Update));// 创建字段属性域对象并设置要更新的信息std::unique_ptr<OGRFieldDomain> domain = std::make_unique<OGRFieldDomain>();domain->SetName("your_domain_name"); // 替换为您要更新的字段属性域的名称domain->SetType(OFTInteger); // 替换为您要更新的域类型,这里设置为整数类型domain->SetMin("5"); // 替换为您要更新的最小值domain->SetMax("20"); // 替换为您要更新的最大值// 更新字段属性域信息std::string failureReason;bool success = dataset->UpdateFieldDomain(std::move(domain), failureReason);if (success){std::cout << "Field domain updated successfully." << std::endl;}else{std::cout << "Failed to update field domain. Reason: " << failureReason << std::endl;}
GetRelationshipNames
virtual std::vector<std::string> GetRelationshipNames(CSLConstList papszOptions = NULLPTR) const
返回数据集中存储的所有关系的名称列表
参数:
papszOptions -- 确定应如何检索关系的驱动程序特定选项。传递默认行为的空点。
返回: 关系名称列表
// 获取数据集中所有关系的名称列表std::vector<std::string> relationshipNames = dataset->GetRelationshipNames();// 输出关系的名称列表if (!relationshipNames.empty()){std::cout << "Relationship names in the dataset:" << std::endl;for (const auto& relationshipName : relationshipNames){std::cout << " " << relationshipName << std::endl;}}else{std::cout << "No relationships found in the dataset." << std::endl;}
GetRelations
virtual const GDALRelationship *GetRelations(const std::string &name) const
从其名称中获取关系
返回: 返回关系,如果未找到,则为 nullPTR
// 要获取的关系的名称std::string relationshipName = "your_relationship_name"; // 替换为您要获取的关系的名称// 获取指定名称的关系的信息const GDALRelationship* relationship = dataset->GetRelations(relationshipName);if (relationship != nullptr){// 输出关系的信息std::cout << "Relationship Name: " << relationship->GetName() << std::endl;std::cout << "Source Dataset: " << relationship->GetSourceDataset() << std::endl;std::cout << "Target Dataset: " << relationship->GetTargetDataset() << std::endl;// 可以根据需要获取其他关系信息}else{std::cout << "Relationship with name '" << relationshipName << "' not found in the dataset." << std::endl;}
AddRelationship
virtual bool AddRelationship(std::unique_ptr<GDALRelationship> &&relationship, std::string &failureReason)
向数据集添加关系
参数:
-
relationship -- 关系定义
-
failureReason -- 输出参数。如果发生错误,将包含错误消息
返回: 在成功的情况下为TURE
// 创建关系对象并设置要添加的信息std::unique_ptr<GDALRelationship> relationship = std::make_unique<GDALRelationship>();relationship->SetName("your_relationship_name"); // 替换为您要添加的关系的名称relationship->SetSourceDataset("source_dataset_name"); // 替换为源数据集的名称relationship->SetTargetDataset("target_dataset_name"); // 替换为目标数据集的名称// 可以根据需要设置其他关系信息// 向数据集添加关系std::string failureReason;bool success = dataset->AddRelationship(std::move(relationship), failureReason);if (success){std::cout << "Relationship added successfully." << std::endl;}else{std::cout << "Failed to add relationship. Reason: " << failureReason << std::endl;}
DeleteRelationship
virtual bool DeleteRelationship(const std::string &name, std::string &failureReason)
从数据集中删除关系
参数:
-
name -- 关系名称
-
failureReason -- 输出参数。如果发生错误,将包含错误消息
返回: 在成功的情况下为TURE
// 要删除的关系的名称std::string relationshipName = "your_relationship_name"; // 替换为您要删除的关系的名称// 从数据集中删除指定名称的关系std::string failureReason;bool success = dataset->DeleteRelationship(relationshipName, failureReason);if (success){std::cout << "Relationship '" << relationshipName << "' deleted successfully." << std::endl;}else{std::cout << "Failed to delete relationship. Reason: " << failureReason << std::endl;}
UpdateRelationship
virtual bool UpdateRelationship(std::unique_ptr<GDALRelationship> &&relationship, std::string &failureReason)
通过替换现有关系的定义来更新现有关系 将替换具有匹配名称的现有关系
参数:
-
relationship -- 关系定义
-
failureReason -- 输出参数。如果发生错误,将包含错误消息
返回: 在成功的情况下为TURE
// 创建关系对象并设置要更新的信息std::unique_ptr<GDALRelationship> relationship = std::make_unique<GDALRelationship>();relationship->SetName("your_relationship_name"); // 替换为您要更新的关系的名称relationship->SetSourceDataset("new_source_dataset_name"); // 替换为新的源数据集的名称relationship->SetTargetDataset("new_target_dataset_name"); // 替换为新的目标数据集的名称// 可以根据需要设置其他关系信息// 更新数据集中现有关系的信息std::string failureReason;bool success = dataset->UpdateRelationship(std::move(relationship), failureReason);if (success){std::cout << "Relationship updated successfully." << std::endl;}else{std::cout << "Failed to update relationship. Reason: " << failureReason << std::endl;}