空間参照システム <ogr_spatialref.h>
空間参照システム (SRS) は、地理座標系、投影情報、地球楕円体パラメーターを記述するために地理空間データで使用されるクラスまたはデータ構造です。GIS (地理情報システム) では、SRS は地理空間データの幾何学的特性と位置を定義するため、非常に重要な概念です。
SRS には次の情報を含めることができます。
座標参照系 (CRS): 地理データを記述する座標系で、通常は座標軸と原点で構成されます。座標参照系は、地球の表面上の点を 2 次元マップ上の座標にマッピングする方法を定義します。
投影情報: 地球の表面は 3 次元の球体ですが、地図は通常 2 次元の平面で表されます。投影法は、地図作成のために地球の 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
戻り値: 新しい 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()
メソッドは次のエクスポート オプションをサポートしています。
SPACING
: エクスポートされた WKT 文字列内のパラメータ間のスペース文字を設定します。デフォルトはスペースです。
INDENT
: エクスポートされた WKT 文字列のインデント文字を設定します。デフォルトは 4 つのスペースです。
SINGLE_LINE
: に設定すると"YES"
、エクスポートされた WKT 文字列は折り返しなしで 1 行になります。それ以外の場合は複数行形式を使用します。デフォルトでは、複数行形式が使用されます。
SIMPLE_IRREGULAR
: に設定すると"YES"
、エクスポートされた WKT 文字列は、簡略化された不規則な楕円体の記述を使用しようとします。デフォルトでは、簡略化された記述は使用されません。
WKT_FORMAT_ISO
: に設定すると"ON"
、エクスポートされた WKT 文字列は ISO 19162 正規形式を使用します。デフォルトでは ISO 19162 正規形式は使用されません。
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