GDAL OGR C++ API ruta de aprendizaje (5) Ejemplo de código OGRLayer

ObtenerTablaEstilo

 OGRStyleTable virtual  * GetStyleTable  ( )

Volver a la hoja de estilo de capa

Devuelve: un puntero a una hoja de estilo que la persona que llama no debe modificar ni desasignar

// 假设图层对象为 poLayer
OGRStyleTable* poStyleTable = poLayer->GetStyleTable();
if (poStyleTable != nullptr) {
    // 处理样式表信息
    // ...
} else {
    // 图层没有关联样式表
    // ...
}

EstablecerEstiloTableDirect

 vacío  virtual SetStyleTableDirectOGRStyleTable  *poStyleTable  )

Establecer hoja de estilo de capa

parámetro:

poStyleTable  -- puntero a la tabla de estilo para establecer

// 假设图层对象为 poLayer,样式表对象为 poStyleTable
poLayer->SetStyleTableDirect(poStyleTable);

Iniciar transacción

 Transacción de inicio de OGRErr  virtual ( )

Para las fuentes de datos que admiten transacciones, StartTransaction crea una transacción

Devolución: OGRERR_NONE éxito

// 假设图层对象为 poLayer
if (poLayer->StartTransaction() == OGRERR_NONE) {
    // 在事务中进行一系列操作
    // ...
    
    // 提交事务
    poLayer->CommitTransaction();
} else {
    // 处理事务启动失败的情况
}

En OGR, las capas pueden admitir transacciones y StartTransaction()se puede iniciar una transacción en la capa llamando a . En una transacción, se pueden realizar una serie de operaciones de capa, como agregar características, modificar características, eliminar características, etc. Cuando se completan todas las operaciones, puede llamar CommitTransaction()para confirmar la transacción, lo que indica que todas las operaciones se han ejecutado con éxito. Si ocurre un error durante la transacción, puede llamar RollbackTransaction()para revertir la transacción, lo que significa deshacer todas las operaciones anteriores.

 

Confirmar transacción

 OGRErr  virtual CommitTransaction ( )

Para las fuentes de datos que admiten transacciones, confirme la transacción para confirmar la transacción

Devolución: OGRERR_NONE éxito

RollbackTransaction

Virtual  OGRErr  RollbackTransaction ( )

Para las fuentes de datos que admiten transacciones, RollbackTransaction revertirá la fuente de datos al estado anterior al inicio de la transacción actual.

Devolución: OGRERR_NONE éxito

    // 获取第一个图层
    OGRLayer* poLayer = poDS->GetLayer(0);

    // 开始事务
    poDS->StartTransaction();

    // 创建新要素
    OGRFeature* poFeature = new OGRFeature(poLayer->GetLayerDefn());

    // 设置要素属性
    poFeature->SetField("name", "New Feature");
    poFeature->SetField("population", 10000);

    // 创建新几何图形并设置为要素的几何图形
    OGRPoint point(100, 200);
    poFeature->SetGeometry(&point);

    // 将新要素添加到图层中
    if (poLayer->CreateFeature(poFeature) != OGRERR_NONE) {
        printf("添加要素失败!\n");

        poDS->RollbackTransaction(); // 回滚事务,撤销之前的操作

        OGRDataSource::DestroyDataSource(poDS);
        delete poFeature;
        exit(1);
    }

    // 提交事务,保存更改
    poDS->CommitTransaction();

​

ObtenerColumnaFID

 carácter constante virtual  * GetFIDColumn ( )

Este método devuelve el nombre de la columna de la base de datos subyacente para usar como columna FID, o "" si no se admite

Devuelve: nombre de columna FID

    // 获取第一个图层
    OGRLayer* poLayer = poDS->GetLayer(0);

    // 获取用于唯一标识要素的字段的名称
    const char* fid_column = poLayer->GetFIDColumn();
    if (fid_column != nullptr) {
        printf("用于唯一标识要素的字段名称:%s\n", fid_column);
    } else {
        printf("图层中没有用于唯一标识要素的字段。\n");
    }

ObtenerColumnaGeometría

 carácter constante virtual  * GetGeometryColumn ( )

Este método devuelve el nombre de la columna de la base de datos subyacente para usar como columna de geometría, o "" si no se admite

Para capas con múltiples campos de geometría, este método devuelve solo el nombre de la primera columna de geometría

Devuelve: nombre de columna de geometría

    // 获取第一个图层
    OGRLayer* poLayer = poDS->GetLayer(0);

    // 获取存储几何信息的字段的名称
    const char* geometry_column = poLayer->GetGeometryColumn();
    if (geometry_column != nullptr) {
        printf("存储几何信息的字段名称:%s\n", geometry_column);
    } else {
        printf("图层中没有存储几何信息的字段。\n");
    }

Establecer campos ignorados

 OGRErr  virtual SetIgnoredFields ( const  char **papszFields )

Establece campos que se pueden omitir al recuperar entidades de una capa

parámetro:

papszFields  : matriz de nombres de campo terminada en NULL. Si se pasa NULL, se borra la lista ignorada.

Devuelve: OGRERR_NONE si se han resuelto todos los nombres de campo (incluso si el controlador no admite este método)

   // 获取第一个图层
    OGRLayer* poLayer = poDS->GetLayer(0);

    // 定义要忽略的字段数组
    const char* papszFields[] = {"field1", "field2"};

    // 设置要忽略的字段
    OGRErr err = poLayer->SetIgnoredFields(papszFields);

    if (err != OGRERR_NONE) {
        // 处理设置忽略字段时发生的错误
    }

    // 其他处理代码...

 GetIgnoredFields puede obtener una lista de campos ignorados

    // 获取当前设置的忽略字段列表
    char** papszIgnoredFields = poLayer->GetIgnoredFields();

    // 打印忽略字段列表
    for (int i = 0; papszIgnoredFields[i] != nullptr; i++) {
        printf("Ignored Field: %s\n", papszIgnoredFields[i]);
    }

Obtener tipos de geometría

 OGRGeometryTypeCounter virtual  * GetGeometryTypes (int iGeomField, int nFlagsGGT, int &nEntryCountOut,  GDALProgressFunc  pfnProgress, void *pProgressData )

Obtener el tipo de geometría real que se encuentra en la entidad

parámetro:

  • iGeomField  -- índice de campo de geometría.

  • nFlagsGGT  -- Banderas de sugerencias. 0 o una combinación de OGR_GGT_COUNT_NOT_NEEDED, OGR_GGT_STOP_IF_MIXED, OGR_GGT_GEOMCOLLECTIONZ_TINZ

  • nEntryCountOut  --  [out]  Devuelve el número de entradas en la matriz.

  • pfnProgress : devolución de llamada de cancelación. Puede estar vacío.

  • pProgressData  : datos de usuario para la devolución de llamada de cancelación. Puede estar vacío.

Devuelve: una matriz de nEntryCount, que debe liberarse con CPLFree()  o NULL si se produce un error 

Intersección

Intersección OGRErr  OGRLayer  *pLayerMethod,  OGRLayer  *pLayerResult, char **papszOptions = nullptr,  GDALProgressFunc  pfnProgress = nullptr, void *pProgressArg =  nullptr )

intersección de dos capas

parámetro:

  • pLayerMethod  -- capa de método. No debe ser NULL.

  • pLayerResult  : la capa de las entidades producidas por la operación de inserción. no debe ser NULL

  • papszOptions  : lista de opciones terminada en NULL (puede ser NULL).

  • pfnProgress  : una función de devolución de llamada compatible con GDALProgressFunc() para informar el progreso o NULL.

  • pProgressArg  -- Argumentos para pasar a pfnProgress. Puede estar vacío.

devolver:

Código de error si se produjo un error o se interrumpió la ejecución, de lo contrario OGRERR_NONE

Unión

 Unión OGRErrOGRLayer  *pLayerMethod,  OGRLayer  *pLayerResult, char **papszOptions = nullptr,  GDALProgressFunc  pfnProgress = nullptr, void *pProgressArg =  nullptr )

Unión de dos capas

parámetro:

  • pLayerMethod  -- capa de método. No debe ser NULL.

  • pLayerResult  : la capa de las entidades producidas por la operación de inserción. No debe ser NULL.

  • papszOptions  : lista de opciones terminada en NULL (puede ser NULL).

  • pfnProgress  : una función de devolución de llamada compatible con GDALProgressFunc() para informar el progreso o NULL.

  • pProgressArg  -- Argumentos para pasar a pfnProgress. Puede estar vacío.

devolver:

Código de error si se produjo un error o se interrumpió la ejecución, de lo contrario OGRERR_NONE

// 获取输入图层和输出图层
OGRLayer* pLayer1 = poInputDS->GetLayer(0);
OGRLayer* pLayer2 = poInputDS->GetLayer(1);
OGRLayer* pLayerResult = poOutputDS->CreateLayer("SymDifference_Result", nullptr, wkbUnknown, nullptr);

// 计算几何形状的对称差并将结果写入输出图层
OGRErr err = pLayer1->Union(pLayer2, pLayerResult, nullptr, nullptr, nullptr);

// 保存并关闭结果图层
pLayerResult->SyncToDisk();

SymDiferencia

OGRErr  SymDifference (OGRLayer *pLayerMethod,  OGRLayer  *pLayerResult, char **papszOptions,  GDALProgressFunc  pfnProgress, void *pProgressArg )

Dos capas de diferencia simétrica (negación de intersección)

parámetro:

  • pLayerMethod  -- capa de método. No debe ser NULL.

  • pLayerResult  : la capa de las entidades producidas por la operación de inserción. No debe ser NULL.

  • papszOptions  : lista de opciones terminada en NULL (puede ser NULL).

  • pfnProgress  : una función de devolución de llamada compatible con GDALProgressFunc() para informar el progreso o NULL.

  • pProgressArg  -- Argumentos para pasar a pfnProgress. Puede estar vacío.

devolver:

Código de error si se produjo un error o se interrumpió la ejecución, de lo contrario OGRERR_NONE

// 获取输入图层和输出图层
OGRLayer* pLayer1 = poInputDS->GetLayer(0);
OGRLayer* pLayer2 = poInputDS->GetLayer(1);
OGRLayer* pLayerResult = poOutputDS->CreateLayer("SymDifference_Result", nullptr, wkbUnknown, nullptr);

// 计算几何形状的对称差并将结果写入输出图层
OGRErr err = pLayer1->SymDifference(pLayer2, pLayerResult, nullptr, nullptr, nullptr);

// 保存并关闭结果图层
pLayerResult->SyncToDisk();

Identidad

 Identidad de OGRErr (OGRLayer *pLayerMethod,  OGRLayer  *pLayerResult, char **papszOptions = nullptr,  GDALProgressFunc  pfnProgress = nullptr, void *pProgressArg =  nullptr )

Identifique las características de esta capa con las características de la capa de identidad

parámetro:

  • pLayerMethod  -- capa de método. No debe ser NULL.

  • pLayerResult  : la capa de las entidades producidas por la operación de inserción. No debe ser NULL.

  • papszOptions  : lista de opciones terminada en NULL (puede ser NULL).

  • pfnProgress  : una función de devolución de llamada compatible con GDALProgressFunc() para informar el progreso o NULL.

  • pProgressArg  -- Argumentos para pasar a pfnProgress. Puede estar vacío.

devolver:

Código de error si se produjo un error o se interrumpió la ejecución, de lo contrario OGRERR_NONE

// 获取输入图层和输出图层
OGRLayer* pLayer1 = poInputDS->GetLayer(0);
OGRLayer* pLayer2 = poInputDS->GetLayer(1);
OGRLayer* pLayerResult = poOutputDS->CreateLayer("Identity_Result", nullptr, wkbUnknown, nullptr);

// 计算几何形状的恒等并将结果写入输出图层
OGRErr err = pLayer1->Identity(pLayer2, pLayerResult, nullptr, nullptr, nullptr);

// 保存并关闭结果图层
pLayerResult->SyncToDisk();

Actualizar

 Actualización de OGRErr (OGRLayer *pLayerMethod,  OGRLayer  *pLayerResult, char **papszOptions = nullptr,  GDALProgressFunc  pfnProgress = nullptr, void *pProgressArg =  nullptr )

Actualice esta capa con entidades de la capa de actualización

parámetro:

  • pLayerMethod  -- capa de método. No debe ser NULL.

  • pLayerResult  : la capa de las entidades producidas por la operación de inserción. No debe ser NULL.

  • papszOptions  : lista de opciones terminada en NULL (puede ser NULL).

  • pfnProgress  : una función de devolución de llamada compatible con GDALProgressFunc() para informar el progreso o NULL.

  • pProgressArg  -- Argumentos para pasar a pfnProgress. Puede estar vacío.

devolver:

Código de error si se produjo un error o se interrumpió la ejecución, de lo contrario OGRERR_NONE

// 获取输入图层和输出图层
OGRLayer* pLayer1 = poInputDS->GetLayer(0);
OGRLayer* pLayer2 = poInputDS->GetLayer(1);
OGRLayer* pLayerResult = poOutputDS->CreateLayer("SymDifference_Result", nullptr, wkbUnknown, nullptr);

// 计算几何形状的对称差并将结果写入输出图层
OGRErr err = pLayer1->Update(pLayer2, pLayerResult, nullptr, nullptr, nullptr);

// 保存并关闭结果图层
pLayerResult->SyncToDisk();

Acortar

OGRErr  Clip(OGRLayer *pLayerMethod,  OGRLayer  *pLayerResult, char **papszOptions = nullptr,  GDALProgressFunc  pfnProgress = nullptr, void *pProgressArg =  nullptr )

Recorte el área no cubierta por la capa de método

parámetro:

  • pLayerMethod  -- capa de método. No debe ser NULL.

  • pLayerResult  : la capa de las entidades producidas por la operación de inserción. No debe ser NULL.

  • papszOptions  : lista de opciones terminada en NULL (puede ser NULL).

  • pfnProgress  : una función de devolución de llamada compatible con GDALProgressFunc() para informar el progreso o NULL.

  • pProgressArg  -- Argumentos para pasar a pfnProgress. Puede estar vacío.

Devuelve: un código de error si se produjo un error o se interrumpió la ejecución, de lo contrario OGRERR_NONE

// 获取输入图层和输出图层
OGRLayer* pLayer1 = poInputDS->GetLayer(0);
OGRLayer* pLayer2 = poInputDS->GetLayer(1);
OGRLayer* pLayerResult = poOutputDS->CreateLayer("SymDifference_Result", nullptr, wkbUnknown, nullptr);

// 计算几何形状的对称差并将结果写入输出图层
OGRErr err = pLayer1->Clip(pLayer2, pLayerResult, nullptr, nullptr, nullptr);

// 保存并关闭结果图层
pLayerResult->SyncToDisk();

Borrar

OGRErr  Erase (OGRLayer *pLayerMethod,  OGRLayer  *pLayerResult, char **papszOptions = nullptr,  GDALProgressFunc  pfnProgress = nullptr, void *pProgressArg =  nullptr )

Eliminar el área cubierta por la capa de método

parámetro:

  • pLayerMethod  -- capa de método. No debe ser NULL.

  • pLayerResult  : la capa de las entidades producidas por la operación de inserción. No debe ser NULL.

  • papszOptions  : lista de opciones terminada en NULL (puede ser NULL).

  • pfnProgress  : una función de devolución de llamada compatible con GDALProgressFunc() para informar el progreso o NULL.

  • pProgressArg  -- Argumentos para pasar a pfnProgress. Puede estar vacío.

Devuelve: un código de error si se produjo un error o se interrumpió la ejecución, de lo contrario OGRERR_NONE

// 获取输入图层和输出图层
OGRLayer* pLayer1 = poInputDS->GetLayer(0);
OGRLayer* pLayer2 = poInputDS->GetLayer(1);
OGRLayer* pLayerResult = poOutputDS->CreateLayer("SymDifference_Result", nullptr, wkbUnknown, nullptr);

// 计算几何形状的对称差并将结果写入输出图层
OGRErr err = pLayer1->Erase(pLayer2, pLayerResult, nullptr, nullptr, nullptr);

// 保存并关闭结果图层
pLayerResult->SyncToDisk();

Referencia

Referencia int  ( )

Incrementar el recuento de referencia de la capa

Devuelve: el recuento de referencia incrementado

Desreferencia

int  Desreferencia ( )

Recuento de referencia de capa decreciente

Devoluciones: recuento de referencia decrementado

ReorderField

OGRErr  ReorderField (int iOldFieldPos, int iNewFieldPos )

Reordenar campos existentes en una capa

parámetro:

  • iOldFieldPos  -- La posición anterior del campo a mover. Debe estar en el rango [0, GetFieldCount() - 1].

  • iNewFieldPos  -- La nueva posición del campo a mover. Debe estar en el rango [0, GetFieldCount() - 1].

Devolución: OGRERR_NONE éxito

// 获取输入图层
OGRLayer* pLayer = poInputDS->GetLayer(0);

// 获取字段总数
int fieldCount = pLayer->GetLayerDefn()->GetFieldCount();

// 假设我们要将第1个字段移动到第3个位置
int oldFieldPos = 0; // 第1个字段的位置(索引从0开始)
int newFieldPos = 2; // 新的位置(索引从0开始)

if (oldFieldPos < 0 || oldFieldPos >= fieldCount || newFieldPos < 0 || newFieldPos >= fieldCount) {
    // 检查字段位置是否有效
    // 可以根据需要添加其他错误处理逻辑
    return OGRERR_FAILURE;
}

// 重新排列字段
OGRErr err = pLayer->ReorderField(oldFieldPos, newFieldPos);
if (err != OGRERR_NONE) {
    // 重新排列失败,可以根据需要添加错误处理逻辑
    return err;
}

// 保存并关闭数据源
pLayer->SyncToDisk();

Supongo que te gusta

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