GetNextFeature
virtual OGRFeature * GetNextFeature(OGRLayer **ppoBelongingLayer, double *pdfProgressPct, GDALProgressFunc pfnProgress, void *pProgressData )
Obtenha o próximo recurso disponível deste conjunto de dados
parâmetro:
-
ppoBelongingLayer -- Ponteiro para uma variável OGRLayer* que recebe a camada à qual o objeto pertence ou NULL. A saída de *ppoBelongingLayer pode ser NULL mesmo que o recurso não seja NULL.
-
pdfProgressPct -- Ponteiro para uma variável de precisão dupla para receber a porcentagem de progresso (no intervalo [0, 1]) ou NULL. No retorno, o valor apontado pode ser negativo se o progresso não puder ser determinado.
-
pfnProgress -- retorno de chamada de progresso para relatar o progresso (para chamadas GetNextFeature( ) potencialmente de longa duração ) e fornecer a possibilidade de cancelamento ou NULL.
-
pProgressData -- dados do usuário fornecidos para pfnProgress ou NULL
Retorna: um recurso ou NULL se nenhum outro recurso estiver disponível
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
Recursos GetFeatures ( )
Uma função que retorna um iterável sobre os recursos em uma camada de conjunto de dados
// 假设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();
}
capacidade de teste
virtual int TestCapability(const char * )
Se a função de teste está disponível
Um dos seguintes nomes de recursos do conjunto de dados pode ser passado para este método e retornará um valor TRUE ou FALSE indicando se o recurso está disponível para este objeto.
ODsCCreateLayer : Verdadeiro se esta fonte de dados puder criar novas camadas.
ODsCDeleteLayer : Verdadeiro se esta fonte de dados puder excluir as camadas existentes.
ODsCCreateGeomFieldAfterCreateLayer : Verdadeiro se a camada desta fonte de dados suportar CreateGeomField() após a criação da camada.
ODsCCurveGeometry : True se esta fonte de dados oferecer suporte a geometria curva.
ODsCTransactions : True se esta fonte de dados suportar transações (eficientes).
ODsCEmulatedTransactions : true se esta fonte de dados oferecer suporte a transações por meio de emulação.
ODsCRandomLayerRead : Verdadeiro se esta fonte de dados tiver uma implementação GetNextFeature() dedicada , possivelmente retornando recursos de camadas de maneira não sequencial.
ODsCRandomLayerWrite : Verdadeiro se esta fonte de dados oferecer suporte à chamada de CreateFeature() em camadas de maneira não sequencial.
parâmetro:
pszCap -- Capacidade de teste.
Retorna: TRUE se o recurso estiver disponível, FALSE caso contrário
// 打开数据源
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
Retorna uma lista dos nomes de todos os domínios de campo armazenados no conjunto de dados
parâmetro:
papszOptions -- Opções específicas do driver que determinam como os atributos devem ser recuperados. Um ponto vazio para passar o comportamento padrão.
Retorna: lista de nomes de domínio de campo
// 打开数据源
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
obter campo de campo a partir do nome do campo
// 打开数据集
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 )
Adicionar domínios de campo ao conjunto de dados
parâmetro:
-
domínio – definição de domínio.
-
FailureReason – parâmetro de saída. Se ocorrer um erro, uma mensagem de erro será incluída.
Retorna: TRUE em caso de sucesso
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 )
Remover domínios de campo dos conjuntos de dados
parâmetro:
-
domínio -- nome de domínio.
-
FailureReason – parâmetro de saída. Se ocorrer um erro, uma mensagem de erro será incluída.
Retorna: TRUE em caso de sucesso
// 打开数据集
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 )
Atualiza a definição de um domínio de campo existente substituindo sua definição
parâmetro:
-
domínio -- nome de domínio.
-
FailureReason – parâmetro de saída. Se ocorrer um erro, uma mensagem de erro será incluída.
Retorna: TRUE em caso de sucesso
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
Retorna uma lista dos nomes de todas as relações armazenadas no conjunto de dados
parâmetro:
papszOptions – Opções específicas do driver que determinam como as relações devem ser recuperadas. Um ponto vazio para passar o comportamento padrão.
Retorna: lista de nomes de relacionamento
// 获取数据集中所有关系的名称列表
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
Obter uma relação de seu nome
Retorna: a relação retornada ou nullPTR se não for encontrado
// 要获取的关系的名称
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;
}
AdicionarRelacionamento
virtual bool AddRelationship (std::unique_ptr<GDALRelationship> &&relationship, std::string &failureReason )
Adicionar relacionamentos a conjuntos de dados
parâmetro:
-
relacionamento -- definição de relacionamento
-
FailureReason – parâmetro de saída. Se ocorrer um erro, a mensagem de erro será incluída
Retorna: TRUE em caso de sucesso
// 创建关系对象并设置要添加的信息
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;
}
Excluir Relacionamento
virtual bool DeleteRelationship ( const std::string &name, std::string &failureReason )
remover relação do conjunto de dados
parâmetro:
-
nome -- o nome da relação
-
FailureReason – parâmetro de saída. Se ocorrer um erro, a mensagem de erro será incluída
Retorna: TRUE em caso de sucesso
// 要删除的关系的名称
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
bool virtual UpdateRelationship (std::unique_ptr<GDALRelationship> &&relationship, std::string &failureReason )
Atualizar um relacionamento existente substituindo sua definição substituirá um relacionamento existente por um nome correspondente
parâmetro:
-
relacionamento -- definição de relacionamento
-
FailureReason – parâmetro de saída. Se ocorrer um erro, a mensagem de erro será incluída
Retorna: TRUE em caso de sucesso
// 创建关系对象并设置要更新的信息
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;
}