GDAL OGR C++ API ラーニング パス (5) OGRLayer コード例

GetStyleTable

仮想 OGRStyleTable  * GetStyleTable  ( )

レイヤースタイルシートに戻る

戻り値: 呼び出し元によって変更または割り当て解除されるべきではないスタイルシートへのポインター

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

SetStyleTableDirect

virtual  void  SetStyleTableDirect ( OGRStyleTable  *poStyleTable  )

レイヤースタイルシートの設定

パラメータ:

poStyleTable  -- 設定するスタイル テーブルへのポインタ

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

トランザクションの開始

仮想 OGRErr  StartTransaction ( )

トランザクションをサポートするデータ ソースの場合、StartTransaction はトランザクションを作成します。

戻り値: OGRERR_NONE 成功

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

OGR では、レイヤーはトランザクションをサポートでき、 をStartTransaction()呼び出すことでレイヤー内でトランザクションを開始できます。トランザクションでは、フィーチャの追加、フィーチャの変更、フィーチャの削除などの一連のレイヤー操作を実行できます。すべての操作が完了したら、 を呼び出してCommitTransaction()トランザクションをコミットし、すべての操作が正常に実行されたことを示します。トランザクション中にエラーが発生した場合は、呼び出してRollbackTransaction()トランザクションをロールバックできます。これは、以前のすべての操作を元に戻すことを意味します。

 

コミットトランザクション

仮想 OGRErr  CommitTransaction ( )

トランザクションをサポートするデータ ソースの場合、トランザクションをコミットしてトランザクションをコミットします。

戻り値: OGRERR_NONE 成功

ロールバックトランザクション

仮想 OGRErr  RollbackTransaction ( )

トランザクションをサポートするデータ ソースの場合、RollbackTransaction はデータ ソースを現在のトランザクションが開始される前の状態にロールバックします。

戻り値: OGRERR_NONE 成功

    // 获取第一个图层
    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();

​

GetFIDColumn

仮想 const  char * GetFIDColumn ( )

このメソッドは、FID 列として使用する基になるデータベース列の名前を返します。サポートされていない場合は「」を返します。

戻り値: FID列名

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

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

GetGeometryColumn

仮想 const  char * GetGeometryColumn ( )

このメソッドは、ジオメトリ列として使用する基礎となるデータベース列の名前を返します。サポートされていない場合は「」を返します。

複数のジオメトリ フィールドを持つレイヤーの場合、このメソッドは最初のジオメトリ列の名前のみを返します。

戻り値: ジオメトリ列名

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

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

SetIgnoredFields

仮想 OGRErr  SetIgnoredFields ( const  char **papszFields )

レイヤーからフィーチャを取得するときに省略できるフィールドを設定します

パラメータ:

papszFields  – NULL で終わるフィールド名の配列。NULL が渡された場合、無視されたリストはクリアされます。

戻り値: OGRERR_NONE すべてのフィールド名が解決されたかどうか (ドライバーがこのメソッドをサポートしていない場合でも)

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

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

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

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

    // 其他处理代码...

 GetIgnoredFields は無視されるフィールドのリストを取得できます

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

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

GetGeometryTypes

virtual  ORGGeometryTypeCounter  * GetGeometryTypes(int iGeomField、 int nFlagsGGT、 int &nEntryCountOut、  GDALProgressFunc  pfnProgress、 void *pProgressData )

フィーチャ内で見つかった実際のジオメトリ タイプを取得します

パラメータ:

  • iGeomField  -- ジオメトリ フィールドのインデックス。

  • nFlagsGGT  -- ヒント フラグ。0、または OGR_GGT_COUNT_NOT_NEEDED、OGR_GGT_STOP_IF_MIXED、OGR_GGT_GEOMCOLLECTIONZ_TINZ の組み合わせ

  • nEntryCountOut  --  [out] 配列内のエントリの数を返します。

  • pfnProgress -- キャンセルのコールバック。空いているかもしれません。

  • pProgressData  -- キャンセル コールバックのユーザー データ。空いているかもしれません。

戻り値: nEntryCount の配列。エラーが発生した場合は CPLFree() または NULLで解放する必要があります。

交差点

OGRErr 交差点OGRLayer  *pLayerMethod、  OGRLayer  *pLayerResult、char **papszOptions = nullptr、  GDALProgressFunc  pfnProgress = nullptr、void *pProgressArg =  nullptr )

2つの層の交差

パラメータ:

  • pLayerMethod  -- メソッド層。NULLであってはなりません。

  • pLayerResult  -- 挿入操作によって生成されたフィーチャのレイヤー。NULLであってはなりません

  • papszOptions  – NULL で終わるオプションのリスト (NULL の場合もあります)。

  • pfnProgress  -- 進行状況または NULL を報告するための GDALProgressFunc() と互換性のあるコールバック関数。

  • pProgressArg  -- pfnProgress に渡す引数。空いているかもしれません。

戻る:

エラーが発生したか実行が中断された場合はエラー コード、それ以外の場合は OGRERR_NONE

連合

OGRErr  Union ( OGRLayer  *pLayerMethod、  OGRLayer  *pLayerResult、char **papszOptions = nullptr、  GDALProgressFunc  pfnProgress = nullptr、void *pProgressArg =  nullptr )

2つの層の結合

パラメータ:

  • pLayerMethod  -- メソッド層。NULLであってはなりません。

  • pLayerResult  -- 挿入操作によって生成されたフィーチャのレイヤー。NULLであってはなりません。

  • papszOptions  – NULL で終わるオプションのリスト (NULL の場合もあります)。

  • pfnProgress  -- 進行状況または NULL を報告するための GDALProgressFunc() と互換性のあるコールバック関数。

  • pProgressArg  -- pfnProgress に渡す引数。空いているかもしれません。

戻る:

エラーが発生したか実行が中断された場合はエラー コード、それ以外の場合は 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();

記号の違い

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

2 層の対称差分 (交差否定)

パラメータ:

  • pLayerMethod  -- メソッド層。NULLであってはなりません。

  • pLayerResult  -- 挿入操作によって生成されたフィーチャのレイヤー。NULLであってはなりません。

  • papszOptions  – NULL で終わるオプションのリスト (NULL の場合もあります)。

  • pfnProgress  -- 進行状況または NULL を報告するための GDALProgressFunc() と互換性のあるコールバック関数。

  • pProgressArg  -- pfnProgress に渡す引数。空いているかもしれません。

戻る:

エラーが発生したか実行が中断された場合はエラー コード、それ以外の場合は 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();

身元

OGRErr  ID (OGRLayer *pLayerMethod、  OGRLayer  *pLayerResult、char **papszOptions = nullptr、  GDALProgressFunc  pfnProgress = nullptr、void *pProgressArg =  nullptr )

このレイヤーのフィーチャを ID レイヤーのフィーチャで識別します

パラメータ:

  • pLayerMethod  -- メソッド層。NULLであってはなりません。

  • pLayerResult  -- 挿入操作によって生成されたフィーチャのレイヤー。NULLであってはなりません。

  • papszOptions  – NULL で終わるオプションのリスト (NULL の場合もあります)。

  • pfnProgress  -- 進行状況または NULL を報告するための GDALProgressFunc() と互換性のあるコールバック関数。

  • pProgressArg  -- pfnProgress に渡す引数。空いているかもしれません。

戻る:

エラーが発生したか実行が中断された場合はエラー コード、それ以外の場合は 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();

アップデート

OGRErr 更新(OGRLayer *pLayerMethod、  OGRLayer  *pLayerResult、char **papszOptions = nullptr、  GDALProgressFunc  pfnProgress = nullptr、void *pProgressArg =  nullptr )

更新レイヤーのフィーチャでこのレイヤーを更新します

パラメータ:

  • pLayerMethod  -- メソッド層。NULLであってはなりません。

  • pLayerResult  -- 挿入操作によって生成されたフィーチャのレイヤー。NULLであってはなりません。

  • papszOptions  – NULL で終わるオプションのリスト (NULL の場合もあります)。

  • pfnProgress  -- 進行状況または NULL を報告するための GDALProgressFunc() と互換性のあるコールバック関数。

  • pProgressArg  -- pfnProgress に渡す引数。空いているかもしれません。

戻る:

エラーが発生したか実行が中断された場合はエラー コード、それ以外の場合は 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();

クリップ

OGRErr クリップ(OGRLayer *pLayerMethod、  OGRLayer  *pLayerResult、char **papszOptions = nullptr、  GDALProgressFunc  pfnProgress = nullptr、void *pProgressArg =  nullptr )

メソッドレイヤーで覆われていない領域をクリップします

パラメータ:

  • pLayerMethod  -- メソッド層。NULLであってはなりません。

  • pLayerResult  -- 挿入操作によって生成されたフィーチャのレイヤー。NULLであってはなりません。

  • papszOptions  – NULL で終わるオプションのリスト (NULL の場合もあります)。

  • pfnProgress  -- 進行状況または NULL を報告するための GDALProgressFunc() と互換性のあるコールバック関数。

  • pProgressArg  -- pfnProgress に渡す引数。空いているかもしれません。

戻り値: エラーが発生したか、実行が中断された場合はエラー コード、それ以外の場合は 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();

消去

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

メソッド層で覆われた領域を削除します

パラメータ:

  • pLayerMethod  -- メソッド層。NULLであってはなりません。

  • pLayerResult  -- 挿入操作によって生成されたフィーチャのレイヤー。NULLであってはなりません。

  • papszOptions  – NULL で終わるオプションのリスト (NULL の場合もあります)。

  • pfnProgress  -- 進行状況または NULL を報告するための GDALProgressFunc() と互換性のあるコールバック関数。

  • pProgressArg  -- pfnProgress に渡す引数。空いているかもしれません。

戻り値: エラーが発生した場合、または実行が中断された場合はエラー コード、それ以外の場合は 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();

参照

int 参照( )

レイヤ参照カウントをインクリメントします

戻り値: インクリメントされた参照カウント

逆参照

int 逆参照( )

レイヤ参照カウントをデクリメントします

戻り値: デクリメントされた参照カウント

並べ替えフィールド

OGRErr  ReorderField(int iOldFieldPos、 int iNewFieldPos

レイヤー上の既存のフィールドの順序を変更する

パラメータ:

  • iOldFieldPos  -- 移動するフィールドの前の位置。[0, GetFieldCount() - 1] の範囲内である必要があります。

  • iNewFieldPos  -- 移動するフィールドの新しい位置。[0, GetFieldCount() - 1] の範囲内である必要があります。

戻り値: OGRERR_NONE 成功

// 获取输入图层
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();

おすすめ

転載: blog.csdn.net/qq_69574549/article/details/132024949