クラス 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 SetProjParm(const 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 SetNormProjParm(const 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);