GDAL C++ API Learning Path (6) Autoestudo de tradução de exemplo de código de conjunto de dados

GetNextFeature

virtual  OGRFeature  * GetNextFeatureOGRLayer  **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  TestCapabilityconst  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;
    }

Acho que você gosta

Origin blog.csdn.net/qq_69574549/article/details/132040078
Recomendado
Clasificación