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

クラス OGRSpatialReference #include <ogr_spatialref.h>

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

公的行事

ユーザー入力から設定

OGRErr  SetFromUserInput ( const  char * )

さまざまなテキスト形式から空間参照を設定する

パラメータ:

pszDefinition  -- SRS の推論を試行するテキスト定義。

戻り値: 成功した場合は OGRERR_NONE、名前が認識されない場合、定義が破損している場合、または EPSG 値を正常に検索できない場合はエラー コード

    // 创建一个 OGRSpatialReference 对象
    OGRSpatialReference srs;
    
    // 定义一个字符串,包含空间参考系统的信息
    const char* user_input = "+proj=utm +zone=48 +datum=WGS84 +units=m +no_defs";
    
    // 使用 SetFromUserInput() 函数设置空间参考系统
    OGRErr result = srs.SetFromUserInput(user_input);

SetTOWGS84

OGRErr  SetTOWGS84 (double、double、double、double = 0.0、double = 0.0、double = 0.0、double = 0.0 )

Bursa-Wolf 変換を WGS84 に設定します。これにより、TOWGS84 ノードがデータムの子として作成されます。

パラメータ:

  • dfDX  -- メートル単位の X 細分化。

  • dfDY  -- Y 子 (メートル単位)。

  • dfDZ  -- メートル単位の Z サブクラス。

  • dfEX  – アーク秒単位の X 回転 (オプション、デフォルトはゼロ)。

  • dfEY  -- Y 回転 (秒単位) (オプション、デフォルトはゼロ)。

  • dfEZ  -- 秒角単位の Z 回転 (オプション、デフォルトはゼロ)。

  • dfPPM  -- スケール係数 (100 万分の 1)。

戻り値: OGRERR_NONE 成功

    // 创建一个 OGRSpatialReference 对象
    OGRSpatialReference srs;
    
    // 设置空间参考系统的转换参数到 WGS 84
    double dx = -84.0;
    double dy = -97.0;
    double dz = -119.0;
    double ex = 0.0;
    double ey = 0.0;
    double ez = 0.0;
    double ppm = 0.0;
    OGRErr result = srs.SetTOWGS84(dx, dy, dz, ex, ey, ez, ppm);

GetTOWGS84

OGRErr  GetTOWGS84(double *padfCoef, int nCoeff = 7) const

TOWGS84 パラメータを取得します (利用可能な場合)

パラメータ:

  • PadfCoeff  -- 最大 7 つの係数を配置する配列。

  • nCoeffCount  -- PadfCoeff のサイズ -- デフォルトは 7 です。

戻り値: 成功した場合は OGRERR_NONE、使用可能な TOWGS84 ノードがない場合は OGRERR_FAILURE

    // 创建一个 OGRSpatialReference 对象
    OGRSpatialReference srs;
    
    // 设置空间参考系统的转换参数到 WGS 84
    double dx = -84.0;
    double dy = -97.0;
    double dz = -119.0;
    double ex = 0.0;
    double ey = 0.0;
    double ez = 0.0;
    double ppm = 0.0;
    srs.SetTOWGS84(dx, dy, dz, ex, ey, ez, ppm);
    
    // 获取空间参考系统的转换参数
    double transformationParams[7];
    OGRErr result = srs.GetTOWGS84(transformationParams, 7);

追加推測TOWGS84

OGRErr  AddGuessedTOWGS84 ( )

3 パラメータまたは 7 パラメータの Helmert 変換を WGS84 に追加してみてください

戻り値: 成功した場合は OGRERR_NONE、失敗した場合はエラー コード (CRS が WGS84 に変換されたか、一致が見つからなかった)

    // 创建一个 OGRSpatialReference 对象
    OGRSpatialReference srs;
    
    // 定义一个字符串,包含空间参考系统的信息
    const char* user_input = "+proj=utm +zone=48 +datum=WGS84 +units=m +no_defs";
    
    // 使用 SetFromUserInput() 函数设置空间参考系统
    OGRErr result = srs.SetFromUserInput(user_input);
    
    // 检查是否设置成功
    if (result != OGRERR_NONE) {
        printf("空间参考系统设置失败!\n");
        return 1;
    }
    
    // 尝试添加转换参数
    OGRErr guessResult = srs.AddGuessedTOWGS84();

GetSemiMajor

double GetSemiMajor(OGRErr * = nullptr)const

楕円体の長半径を取得します(GDAL 3.0以降、メートル単位)。

   // 创建一个 OGRSpatialReference 对象
    OGRSpatialReference srs;
    
    // 定义一个字符串,包含空间参考系统的信息
    const char* user_input = "+proj=utm +zone=48 +datum=WGS84 +units=m +no_defs";
    
    // 使用 SetFromUserInput() 函数设置空间参考系统
    OGRErr result = srs.SetFromUserInput(user_input);
    
    // 获取椭球体的长半轴值
    OGRErr err;
    double semiMajor = srs.GetSemiMajor(&err);

GetSemiMinor

double GetSemiMinor(OGRErr * = nullptr)const

球の短半径を取得します。

パラメータ:

pnErr  -- NULL 以外の場合、短半径が見つかると OGRERR_FAILURE に設定されます。

戻り値: 準短軸、または見つからない場合は WGS84 の準短軸

GetInvFlattening

double GetInvFlattening(OGRErr * = nullptr) const

球面逆平坦化の取得

偏心率を取得する

double GetEccentricity() const

戻り値: 偏心率 (またはエラーの場合は -1)

GetSquared偏心度

double GetSquaredEccentricity() const

楕円体の二乗離心率を取得します

戻り値: 離心率の 2 乗 (誤差の場合は -1)

GetEPSGGeogCS

int GetEPSGGeogCS() const

この座標系 GEOGCS の EPSG コードを取得します

戻り値: EPSG コード

    // 获取地理坐标系的 EPSG 代码
    int epsgCode = srs.GetEPSGGeogCS();
地理坐标系的 EPSG 代码为: 4326

GetAuthorityCode

const char *GetAuthorityCode(const char *pszTargetKey) const

ノードの権限コードを取得する

パラメータ:

pszTargetKey  -- 権限を取得するノードへの部分パスまたは完全パス。つまり、ルート要素の権限ノードを検索するには、「PROJCS」、「GEOGCS」、「GEOGCS|UNIT」または NULL を使用します。

戻り値: 認可ノードからの値コード、または失敗した場合は NULL。戻り値は内部値であるため、解放または変更しないでください。

    // 获取地理坐标系的标识代码
    const char* authorityCode = srs.GetAuthorityCode("GEOGCS");
地理坐标系的标识代码为: EPSG:4326

 

GetAuthorityName

const char *GetAuthorityName(const char *pszTargetKey) const 

ノードの権限名を取得します

パラメータ:

pszTargetKey  -- 権限を取得するノードへの部分パスまたは完全パス。つまり、ルート要素の権限ノードを検索するには、「PROJCS」、「GEOGCS」、「GEOGCS|UNIT」または NULL を使用します。

戻り値: 認可ノードからの値コード、または失敗した場合は NULL。戻り値は内部値であるため、解放または変更しないでください。

GetAreaOfUse

bool GetAreaOfUse(double *pdfWestLongitudeDeg、double *pdfSouthLatitudeDeg、double *pdfEastLongitudeDeg、double *pdfNorthLatitudeDeg、const char **ppszAreaName) const

CRSの使用エリアを返します

パラメータ:

  • pdfWestLongitudeDeg  -- 度単位で表される最西経度を受け取る double へのポインタ。空いているかもしれません。戻り値が -1000 の場合、境界ボックスは不明です。

  • pdfSouthLatitudeDeg  -- 度で表された最南端の緯度を受け取る double へのポインタ。空いているかもしれません。戻り値が -1000 の場合、境界ボックスは不明です。

  • pdfEastLongitudeDeg  -- 度単位で表される最東端の経度を受け取る double へのポインタ。空いているかもしれません。戻り値が -1000 の場合、境界ボックスは不明です。

  • pdfNorthLatitudeDeg  -- 度単位で表された最北緯度を受け取る double へのポインタ。空いているかもしれません。戻り値が -1000 の場合、境界ボックスは不明です。

  • ppszAreaName  -- 使用領域名を受け取る文字列へのポインタ。空いているかもしれません。*ppszAreaName の有効期間は短く、その後の呼び出しによって無効になる可能性があることに注意してください。

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

   // 定义变量用于接收使用范围信息
    double westLongitude, southLatitude, eastLongitude, northLatitude;
    const char* areaName;
    
    // 获取使用范围信息
    bool success = srs.GetAreaOfUse(&westLongitude, &southLatitude, &eastLongitude, &northLatitude, &areaName);
    
    // 检查是否获取成功
    if (success) {
        printf("使用范围信息:\n");
        printf("西边界经度: %.6f\n", westLongitude);
        printf("南边界纬度: %.6f\n", southLatitude);
        printf("东边界经度: %.6f\n", eastLongitude);
        printf("北边界纬度: %.6f\n", northLatitude);
        printf("使用范围名称: %s\n", areaName);
    } else {
        printf("获取使用范围信息失败!\n");
    }

SetProjParm

OGRErr  SetProjParmconst  char* 、 double

投影パラメータ値を設定する 指定された名前と値を持つ新しいパラメータを PROJCS の下に追加します

パラメータ:

  • pszParamName  -- パラメータ名。ogr_srs_api.h のマクロから選択する必要があります (SRS_PP_CENTRAL_MERIDIAN など)。

  • dfValue  – 割り当てる値。

戻り値: OGRERR_NONE 成功

   // 创建一个 OGRSpatialReference 对象
    OGRSpatialReference srs;

    // 设置投影坐标系为 Transverse Mercator 投影
    srs.SetUTM(48, TRUE);

    // 设置投影坐标系的中央经线参数值为 80.0 度
    OGRErr result = srs.SetProjParm("central_meridian", 80.0);

GetProjParm

double GetProjParm(const char*, double = 0.0,  OGRErr * = nullptr) const

射影パラメータ値を取得する

パラメータ:

  • pszName  -- ogr_srs_api.h に設定された SRS_PP コードから取得されるパラメータの名前。

  • dfDefaultValue  – このパラメータが存在しない場合に返される値。

  • pnErr  – 失敗時のエラー コードを配置する場所。NULL の場合は無視されます。

戻り値: パラメータの値

SetNormProjParm

OGRErr  SetNormProjParmconst  char* 、 double

正規化された値を使用して投影パラメータを設定する

パラメータ:

  • pszName  -- パラメータ名。ogr_srs_api.h のマクロから選択する必要があります (SRS_PP_CENTRAL_MERIDIAN など)。

  • dfValue  – 割り当てる値。

戻り値: OGRERR_NONE 成功

   // 创建一个 OGRSpatialReference 对象
    OGRSpatialReference srs;

    // 设置投影坐标系为 Transverse Mercator 投影
    srs.SetUTM(48, TRUE);

    // 设置投影坐标系的中央经线参数值为 80.0 度
    OGRErr result = srs.SetProjParm("central_meridian", 80.0);

地理空間データ処理における「正規化」または「標準化」とは、比較、分析、処理を容易にするために、データを統一された標準範囲または単位に変換することを指します。地理空間データは、さまざまな投影法、座標系、または単位を使用するさまざまなソースから取得されることが多いため、その値の範囲と表現は大きく異なる可能性があります。正規化の目的は、これらの差異を排除して、異なるデータ ソース間でデータを効果的に比較および分析できるようにすることです。

GetNormProjParm

double GetNormProjParm(const char*, double = 0.0,  OGRErr * = nullptr) const

正規化された射影パラメータ値を取得します

パラメータ:

  • pszName  -- ogr_srs_api.h に設定された SRS_PP コードから取得されるパラメータの名前。

  • dfDefaultValue  – このパラメータが存在しない場合に返される値。

  • pnErr  – 失敗時のエラー コードを配置する場所。NULL の場合は無視されます。

戻り値: パラメータの値

   // 创建一个 OGRSpatialReference 对象
    OGRSpatialReference srs;

    // 设置投影坐标系为 Transverse Mercator 投影
    srs.SetUTM(48, TRUE);

    // 设置投影坐标系的中央经线参数值为 80.0 度
    OGRErr result = srs.SetProjParm("central_meridian", 80.0);

Je suppose que tu aimes

Origine blog.csdn.net/qq_69574549/article/details/132069108
conseillé
Classement