GDAL C++ API ラーニング パス (1) 空間参照システム OGRSpatialReference クラス

空間参照システム        <ogr_spatialref.h>

空間参照システム (SRS) は、地理座標系、投影情報、地球楕円体パラメーターを記述するために地理空間データで使用されるクラスまたはデータ構造です。GIS (地理情報システム) では、SRS は地理空間データの幾何学的特性と位置を定義するため、非常に重要な概念です。

SRS には次の情報を含めることができます。

  1. 座標参照系 (CRS): 地理データを記述する座標系で、通常は座標軸と原点で構成されます。座標参照系は、地球の表面上の点を 2 次元マップ上の座標にマッピングする方法を定義します。

  2. 投影情報: 地球の表面は 3 次元の球体ですが、地図は通常 2 次元の平面で表されます。投影法は、地図作成のために地球の 3 次元表面を平面上にマッピングする方法を定義します。

  3. 地球楕円体パラメータ: 地球は完全な球体ではなく、楕円体です。地球楕円体のパラメータには、地球の形状をより正確に記述するために使用される、楕円体の長半径、短半径、平坦度およびその他の情報が含まれます。

OGRSpatialReferenceこのクラスを使用すると、次のことが可能になります。

  • 地理座標系と投影情報を設定します。
  • 座標変換は、ある CRS から別の CRS に座標点を変換するために実行されます。
  • CRSのパラメータ情報を解析して取得します。
  • 2 つの CRS が等しいかどうかを比較します。
  • 地理空間データに同じ CRS があるかどうかを確認します。

パブリックメンバー関数

OGRCreate座標変換

OGRCoownedTransformation  * OGRCreateCooperativeTransformation(const OGRSpatialReference *poSource、  const  OGRSpatialReference  *poTarget

変換オブジェクトの作成

入力空間参照システム オブジェクトはコピー (clone() メソッドの呼び出し) によって割り当てられ、所有権の移転は発生しません。

パラメータ:

  • poSource  -- ソース空間参照系。

  • poTarget  -- ターゲットの空間参照系。

戻り値: NULL、または失敗時にすぐに使用できる変換オブジェクト

    // 创建源空间参考对象
    OGRSpatialReference *sourceSRS = new OGRSpatialReference();
    sourceSRS->importFromEPSG(4326); // WGS 84 经纬度坐标系

    // 创建目标空间参考对象
    OGRSpatialReference *targetSRS = new OGRSpatialReference();
    targetSRS->importFromEPSG(32633); // UTM Zone 33N 投影坐标系

    // 创建坐标转换对象
    OGRCoordinateTransformation *transform = OGRCreateCoordinateTransformation(sourceSRS, targetSRS);
    
    if (transform) {
        // 要进行转换的坐标点
        double x = 10.0; // 经度
        double y = 50.0; // 纬度

        // 进行坐标转换
        if (transform->Transform(1, &x, &y)) {
            // 输出转换后的坐标
            printf("转换后的坐标:%.3f, %.3f\n", x, y);
        } else {
            printf("坐标转换失败!\n");
        }

        // 释放坐标转换对象
        OGRCoordinateTransformation::DestroyCT(transform);
    } else {
        printf("创建坐标转换对象失败!\n");
    }

    // 释放空间参考对象
    delete sourceSRS;
    delete targetSRS;

OGRCreate座標変換

OGRCoownedTransformation  * OGRCreateCooperativeTransformation(const OGRSpatialReference *poSource、  const  OGRSpatialReference  *poTarget、  const  OGRCoownedTransformationOptions  &options

変換オブジェクトの作成

パラメータ:

  • poSource  -- ソース空間参照系。

  • poTarget  -- ターゲットの空間参照系。

  • オプション– 座標変換オプション。

戻り値: NULL、または失敗時にすぐに使用できる変換オブジェクト

    // 创建源空间参考对象
    OGRSpatialReference *sourceSRS = new OGRSpatialReference();
    sourceSRS->importFromEPSG(4326); // WGS 84 经纬度坐标系

    // 创建目标空间参考对象
    OGRSpatialReference *targetSRS = new OGRSpatialReference();
    targetSRS->importFromEPSG(32633); // UTM Zone 33N 投影坐标系

    // 创建坐标转换选项对象
    OGRCoordinateTransformationOptions transformOptions;
    transformOptions.SetOption("METHOD", "GEOCENTRIC"); // 设置转换方法为 GEODETIC

    // 创建坐标转换对象
    OGRCoordinateTransformation *transform = OGRCreateCoordinateTransformation(sourceSRS, targetSRS, transformOptions);

    if (transform) {
        // 要进行转换的坐标点
        double x = 10.0; // 经度
        double y = 50.0; // 纬度

        // 进行坐标转换
        if (transform->Transform(1, &x, &y)) {
            // 输出转换后的坐标
            printf("转换后的坐标:%.3f, %.3f\n", x, y);
        } else {
            printf("坐标转换失败!\n");
        }

        // 释放坐标转换对象
        OGRCoordinateTransformation::DestroyCT(transform);
    } else {
        printf("创建坐标转换对象失败!\n");
    }

    // 释放空间参考对象
    delete sourceSRS;
    delete targetSRS;

クラス OGRSpatialReference         #include <ogr_spatialref.h>

OGRSpatialReferenceこれは、GDAL/OGR ライブラリの重要なクラスであり、地理空間データの空間参照系 (Spatial Reference System、SRS) を管理および操作するために使用されます。ユーザーが地理空間データの座標系と投影情報を定義、クエリ、解析、変換できる一連の関数を提供します。

公的行事

OGRS空間参照

明示的な OGRSpatialReference ( const  char* =  nullptr )

コンストラクタ

OGRS空間参照

OGRSpatialReference ( const  OGRSpatialReference & )

パラメータ:

pszWKT  – オブジェクトを初期化する必要がある既知のテキスト定義、または NULL (デフォルト)

int 参照( )

参照カウントを 1 増やす

戻り値: 更新された参照カウント

int 参照( )

参照カウントを 1 減らします

戻り値: 更新された参照カウント

int GetReferenceCount() const

現在の参照カウントを取得する

戻り値: 現在の参照カウント

void リリース( )

参照カウントを 1 ずつ減らし、0 の場合は破棄します。

GetName

const char *GetName() const

戻り値: CRS 名

OGRSpatialReference srs; srs.importFromEPSG(4326);
// WGS 84 经纬度坐标系 

// 使用 GetName() 函数获取空间参考系统的名称 
const char *srsName = srs.GetName();

// 输出空间参考系统的名称 

printf("空间参考系统名称:%s\n", srsName);


空间参考系统名称:WGS 84

クローン

OGRSpatialReference  *Clone() const

この OGRSpatialReferenceをコピーします

戻り値: 新しい SRS。呼び出し側の責任になります。

エクスポートまでの時間

OGRErrexportToWkt  (char**)const

この SRS を WKT 形式に変換します

パラメータ:

ppszResult  -- このポインタに結果文字列を返します。

戻り値: 成功した場合は OGRERR_NONE

​    OGRSpatialReference srs;
    srs.importFromEPSG(4326); // WGS 84 经纬度坐标系

    // 导出空间参考系统为 WKT 字符串
    char* srsWkt = NULL;
    OGRErr err = srs.exportToWkt(&srsWkt);

    if (err == OGRERR_NONE) {
        // 输出导出的 WKT 字符串
        printf("导出的 WKT 字符串:\n%s\n", srsWkt);

        // 释放内存,避免内存泄漏
        CPLFree(srsWkt);
    } else {
        printf("导出失败!\n");
    }



导出的 WKT 字符串:
GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]]

エクスポートまでの時間

OGRErr  exportToWkt(char **ppszWKT、const char *const *papszOptions) 

この SRS を WKT 文字列に変換します

パラメータ:

  • ppszResult  -- このポインタに結果文字列を返します。

  • papszOptions  – NULL で終わるオプションのリスト、または NULL。

戻り値: 成功した場合は OGRERR_NONE。

現在、GDAL/OGR ライブラリでは、exportToWkt()メソッドは次のエクスポート オプションをサポートしています。

  1. SPACING: エクスポートされた WKT 文字列内のパラメータ間のスペース文字を設定します。デフォルトはスペースです。

  2. INDENT: エクスポートされた WKT 文字列のインデント文字を設定します。デフォルトは 4 つのスペースです。

  3. SINGLE_LINE: に設定すると"YES"、エクスポートされた WKT 文字列は折り返しなしで 1 行になります。それ以外の場合は複数行形式を使用します。デフォルトでは、複数行形式が使用されます。

  4. SIMPLE_IRREGULAR: に設定すると"YES"、エクスポートされた WKT 文字列は、簡略化された不規則な楕円体の記述を使用しようとします。デフォルトでは、簡略化された記述は使用されません。

  5. WKT_FORMAT_ISO: に設定すると"ON"、エクスポートされた WKT 文字列は ISO 19162 正規形式を使用します。デフォルトでは ISO 19162 正規形式は使用されません。

  6. AXIS_ORDER: エクスポートする軸の順序を設定します。オプションの値"EAST_NORTH"、、、、、などです"NORTH_EAST"デフォルトでは、EPSG コードの規則に従って軸の順序が決定されます。"OTHER""LAT_LONG""LONG_LAT"

    OGRSpatialReference srs;
    srs.importFromEPSG(4326); // WGS 84 经纬度坐标系

    // 导出选项数组,设置导出选项
    const char *papszOptions[] = {"SINGLE_LINE=YES", "WKT_FORMAT_ISO=ON", NULL};

    // 导出空间参考系统为 WKT 字符串
    char* srsWkt = NULL;
    OGRErr err = srs.exportToWkt(&srsWkt, papszOptions);

    if (err == OGRERR_NONE) {
        // 输出导出的 WKT 字符串
        printf("导出的 WKT 字符串:\n%s\n", srsWkt);

        // 释放内存,避免内存泄漏
        CPLFree(srsWkt);
    } else {
        printf("导出失败!\n");
    }

エクスポート先PrettyWkt

OGRErr  exportToPrettyWkt(char**, int = FALSE) const

この SRS を整形式の WKT 文字列に変換します。        

このエクスポートされた関数のexportToWkt(char**) constこの関数に対する主な利点は、エクスポートされた WKT 文字列が読みやすいようにフォーマットされていることです。書式設定された文字列により、適切な位置にインデントと改行が追加されるため、可読性が向上し、人間が読みやすくなります。

パラメータ:

  • ppszResult  -- このポインタに結果文字列を返します。

  • bSimplify  -- AXIS、AUTHORITY、および EXTENSION ノードを削除する必要がある場合は TRUE。

戻り値: 成功した場合は OGRERR_NONE

    OGRSpatialReference srs;
    srs.importFromEPSG(4326); // WGS 84 经纬度坐标系

    // 导出格式化的 WKT 字符串
    char* srsWkt = NULL;
    OGRErr err = srs.exportToPrettyWkt(&srsWkt, TRUE); // 设置为 TRUE 进行格式化

    if (err == OGRERR_NONE) {
        // 输出导出的格式化的 WKT 字符串
        printf("导出的格式化的 WKT 字符串:\n%s\n", srsWkt);

        // 释放内存,避免内存泄漏
        CPLFree(srsWkt);
    } else {
        printf("导出失败!\n");
    }
导出的格式化的 WKT 字符串:
GEOGCS["WGS 84",    DATUM["WGS_1984",        SPHEROID["WGS 84", 6378137, 298.257223563, AUTHORITY["EPSG", "7030"]],
        TOWGS84[0, 0, 0, 0, 0, 0, 0],
        AUTHORITY["EPSG", "6326"]
    ],
    PRIMEM["Greenwich", 0, AUTHORITY["EPSG", "8901"]],
    UNIT["degree", 0.0174532925199433, AUTHORITY["EPSG", "9122"]],
    AUTHORITY["EPSG", "4326"]
]

プロジェクトへエクスポート

OGRErrexportToPROJJSON  (char**,const char *const *papszOptions) const 

この SRS を PROJJSON 文字列に変換します

パラメータ:

  • ppszResult  -- このポインタに結果文字列を返します。

  • papszOptions  – NULL で終わるオプションのリスト、または NULL。

戻り値: 成功した場合は OGRERR_NONE

    OGRSpatialReference srs;
    srs.importFromEPSG(4326); // WGS 84 经纬度坐标系

    // 导出选项数组,可以设置一些导出的配置选项(在这个例子中为空)
    const char *const *papszOptions = NULL;

    // 导出空间参考系统为 PROJJSON 字符串
    char* srsJson = NULL;
    OGRErr err = srs.exportToPROJJSON(&srsJson, papszOptions);

    if (err == OGRERR_NONE) {
        // 输出导出的 PROJJSON 字符串
        printf("导出的 PROJJSON 字符串:\n%s\n", srsJson);

        // 释放内存,避免内存泄漏
        CPLFree(srsJson);
    } else {
        printf("导出失败!\n");
    }
导出的 PROJJSON 字符串:
{
    "type": "GeographicCRS",
    "name": "WGS 84",
    "datum_ensemble": {
        "name": "World Geodetic System 1984",
        "identifiers": [
            {
                "name": "EPSG",
                "code": 6326
            }
        ],
        "ellipsoid": {
            "name": "WGS 84",
            "semi_major_axis": 6378137,
            "inverse_flattening": 298.257223563
        }
    },
    "coordinate_system": {
        "subtype": "ellipsoidal",
        "axis": [
            {
                "name": "Latitude",
                "abbreviation": "lat",
                "direction": "north",
                "unit": "degree"
            },
            {
                "name": "Longitude",
                "abbreviation": "lon",
                "direction": "east",
                "unit": "degree"
            }
        ]
    },
    "area": "World",
    "bbox": {
        "west_longitude": -180,
        "east_longitude": 180,
        "south_latitude": -90,
        "north_latitude": 90
    }
}

エクスポートToProj4

OGRErrexportToProj4  (char**)const

座標系を PROJ.4 レガシー形式でエクスポート

パラメータ:

ppszProj4  -- 割り当て先となる動的に割り当てられた PROJ 定義へのポインタ。

戻り値: 成功した場合は OGRERR_NONE、失敗した場合はエラー コード

    OGRSpatialReference srs;
    srs.importFromEPSG(4326); // WGS 84 经纬度坐标系

    // 导出空间参考系统为 Proj.4 字符串
    char* proj4String = NULL;
    OGRErr err = srs.exportToProj4(&proj4String);

    if (err == OGRERR_NONE) {
        // 输出导出的 Proj.4 字符串
        printf("导出的 Proj.4 字符串:%s\n", proj4String);

        // 释放内存,避免内存泄漏
        CPLFree(proj4String);
    } else {
        printf("导出失败!\n");
    }
导出的 Proj.4 字符串:+proj=longlat +datum=WGS84 +no_defs

PCI へのエクスポート

OGRErr  exportToPCI(char**、char**、double**) const

PCI投影定義での座標系のエクスポート

パラメータ:

  • ppszProj  -- 動的に割り当てられる PCI プロジェクション定義が割り当てられるポインター。

  • ppszUnits  -- 動的割り当てユニット定義が割り当てられるポインター。

  • ppadfPrjParams  -- 動的に割り当てられる 17 個の投影パラメータの配列へのポインタ。パラメータのリストについては、importFromPCI() を参照してください 。

戻り値: 成功した場合は OGRERR_NONE、失敗した場合はエラー コード

USGSへ輸出

OGRErr  exportToUSGS(long*、long*、double**、long*) const

USGS GCTP 投影定義の座標系をエクスポートする

パラメータ:

  • piProjSys  -- 投影システム コードが返される変数へのポインタ。

  • piZone  -- UTM および米国国土平面投影システムのゾーンを返す変数へのポインタ。

  • ppadfPrjParams  -- 動的に割り当てられた 15 個の射影パラメータの配列を割り当てるポインタ。パラメータのリストについては、importFromUSGS()を参照してください 。この配列を解放する責任のある呼び出し元。

  • piDatum  – データム コードが返される変数へのポインタ。

戻り値: 成功した場合は OGRERR_NONE、失敗した場合はエラー コード

XML にエクスポート

OGRErr  exportToXML(char**,const char* = nullptr) const 

座標系を XML 形式でエクスポートする

パラメータ:

  • ppszRawXML  -- 割り当て先となる動的に割り当てられた XML 定義へのポインタ。

  • pszDialect  - 現在無視されています。使用される方言は GML に基づいています。

戻り値: 成功した場合は OGRERR_NONE、失敗した場合はエラー コード

    OGRSpatialReference srs;
    srs.importFromEPSG(4326); // WGS 84 经纬度坐标系

    // 导出选项,这里不设置任何选项,传入 nullptr 表示使用默认选项
    const char* pszOptions = nullptr;

    // 导出空间参考系统为 XML 字符串
    char* xmlString = nullptr;
    OGRErr err = srs.exportToXML(&xmlString, pszOptions);

    if (err == OGRERR_NONE) {
        // 输出导出的 XML 字符串
        printf("导出的 XML 字符串:\n%s\n", xmlString);

        // 释放内存,避免内存泄漏
        CPLFree(xmlString);
    } else {
        printf("导出失败!\n");
    }
导出的 XML 字符串:
<GEOGCS>
  <DATUM>
    <SPHEROID AUTHORITY="EPSG" CODE="7030">WGS 84</SPHEROID>
    <TOWGS84 DX="0" DY="0" DZ="0" EX="0" EY="0" EZ="0" PPM="0"/>
    <AUTHORITY EPSG="6326"/>
  </DATUM>
  <PRIMEM AUTHORITY="EPSG" CODE="8901">Greenwich</PRIMEM>
  <UNIT AUTHORITY="EPSG" CODE="9122">degree</UNIT>
  <AUTHORITY EPSG="4326"/>
</GEOGCS>

パノラマにエクスポート

OGRErrexportToPanorama  (long*、long*、long*、long*、double*) const

派生座標系は、「パノラマ」GIS 投影で定義されます。

パラメータ:

  • piProjSys  -- 投影システム コードが返される変数へのポインタ。

  • piDatum  -- 座標系コードが返される変数へのポインタ。

  • piEllips  -- 楕円体コードが返される変数へのポインタ。

  • piZone  -- UTM プロジェクション システムのゾーンが返される変数へのポインタ。

  • PadfPrjParams  -- 投影パラメータが配置される既存の 7 つのダブル バッファ。パラメータのリストについては、importFromPanorama()を参照してください 。

戻り値: 成功した場合は OGRERR_NONE、失敗した場合はエラー コード

    OGRSpatialReference srs;
    srs.importFromEPSG(4326); // WGS 84 经纬度坐标系

    // 初始化变量,用于接收导出的 Panorama 参数
    long linearUnits = 0, angularUnits = 0, primeMeridian = 0, geographicCSType = 0;
    double* parameters = nullptr;

    // 导出空间参考系统为 Panorama 参数
    OGRErr err = srs.exportToPanorama(&linearUnits, &angularUnits, &primeMeridian, &geographicCSType, parameters);

    if (err == OGRERR_NONE) {
        // 输出导出的 Panorama 参数
        printf("导出的 Panorama 参数:\n");
        printf("Linear Units: %ld\n", linearUnits);
        printf("Angular Units: %ld\n", angularUnits);
        printf("Prime Meridian: %ld\n", primeMeridian);
        printf("Geographic CS Type: %ld\n", geographicCSType);

        // 释放内存,避免内存泄漏
        if (parameters != nullptr) {
            CPLFree(parameters);
        }
    } else {
        printf("导出失败!\n");
    }

複数のパラメータが関係するため、出力内容はさらに多くなります。そのため、ここではすべてを表示しません。

エクスポートVertCSToPanorama

OGRErr  exportVertCSToPanorama(int*) const

鉛直座標系を「パノラマ」GIS 投影定義としてエクスポート

    OGRSpatialReference srs;
    srs.importFromEPSG(5703); // EPSG:5703 - NGVD 29 height

    // 初始化变量,用于接收导出的 Panorama 参数
    int vertCS = 0;

    // 导出垂直坐标系为 Panorama 参数
    OGRErr err = srs.exportVertCSToPanorama(&vertCS);

    if (err == OGRERR_NONE) {
        // 输出导出的 Panorama 参数
        printf("导出的 Panorama 参数:%d\n", vertCS);
    } else {
        printf("导出失败!\n");
    }

ERM にエクスポート

OGRErr  exportToERM(char *pszProj、char *pszDatum、char *pszUnits

座標系を ERMapper 形式に変換する

パラメータ:

  • pszProj  -- プロジェクションの名前を受け取る 32 文字のバッファー。

  • pszDatum  -- データ名を受け取る 32 文字のバッファ。

  • pszUnits  -- ユニット名を受信するための 32 文字のバッファ。

戻り値: 成功した場合は OGRERR_NONE、翻訳が見つからなかった場合は OGRERR_SRS_UNSUPPORTED、その他の失敗の場合は OGRERR_FAILURE

MICoorSys にエクスポート

OGRErrexportToMICoordSys  (char**)const

座標系を Map Info スタイルの座標系形式でエクスポートします

パラメータ:

ppszResult  -- 動的に割り当てられる Mapinfo CoordSys 定義が割り当てられるポインター。

戻り値: 成功した場合は OGRERR_NONE、失敗した場合は OGRERR_FAILURE、OGRERR_UNSUPPORTED_OPERATION MITAB ライブラリがリンクされているかどうか

    OGRSpatialReference srs;
    srs.importFromEPSG(4326); // WGS 84 经纬度坐标系

    // 导出空间参考系统为 MapInfo CoordSys 字符串
    char* coordSysString = NULL;
    OGRErr err = srs.exportToMICoordSys(&coordSysString);

    if (err == OGRERR_NONE) {
        // 输出导出的 MapInfo CoordSys 字符串
        printf("导出的 MapInfo CoordSys 字符串:\n%s\n", coordSysString);

        // 释放内存,避免内存泄漏
        CPLFree(coordSysString);
    } else {
        printf("导出失败!\n");
    }
导出的 MapInfo CoordSys 字符串:
CoordSys Earth Projection 1, 104
Units "degree"
Origin 0, 0

おすすめ

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