Système de référence spatiale <ogr_spatialref.h>
Un système de référence spatiale (SRS) est une classe ou une structure de données utilisée dans les données géospatiales pour décrire les systèmes de coordonnées géographiques, les informations de projection et les paramètres de l'ellipsoïde terrestre. Dans les SIG (Système d'Information Géographique), le SRS est un concept très important car il définit les propriétés géométriques et la localisation des données géospatiales.
Le SRS peut contenir les informations suivantes :
Système de coordonnées de référence (CRS) : système de coordonnées décrivant des données géographiques, généralement composé d'un axe de coordonnées et d'une origine. Un système de référence de coordonnées définit la manière dont les points à la surface de la Terre sont mappés aux coordonnées sur une carte en deux dimensions.
Informations de projection : la surface de la Terre est une sphère tridimensionnelle, tandis que les cartes sont généralement représentées sur un plan bidimensionnel. Une projection définit la manière dont la surface tridimensionnelle de la Terre est mappée sur une surface plane pour la cartographie.
Paramètres de l'ellipsoïde terrestre : La Terre n'est pas une sphère parfaite, mais un ellipsoïde. Les paramètres de l'ellipsoïde terrestre comprennent le demi-grand axe, le demi-petit axe, l'aplatissement et d'autres informations sur l'ellipsoïde, qui sont utilisées pour décrire plus précisément la forme de la Terre.
En utilisant OGRSpatialReference
la classe, vous pouvez effectuer les opérations suivantes :
- Définissez le système de coordonnées géographiques et les informations de projection.
- La transformation de coordonnées est effectuée pour convertir un point de coordonnées d'un CRS à un autre CRS.
- Analyser et obtenir des informations sur les paramètres de CRS.
- Compare deux CRS pour l'égalité.
- Déterminez si les données géospatiales ont le même SCR.
Fonctions des membres publics
OGRCreateCoordinateTransformation
OGRCoordinateTransformation * OGRCreateCoordinateTransformation(const OGRSpatialReference *poSource, const OGRSpatialReference *poTarget )
Créer un objet de transformation
Les objets du système de référence spatiale d'entrée sont alloués par copie (en appelant la méthode clone()), aucun transfert de propriété ne se produit
paramètre:
-
poSource -- Le système de référence spatiale source.
-
poTarget -- Le système de référence spatiale cible.
Renvoie : NULL ou un objet de conversion prêt à l'emploi en cas d'échec
// 创建源空间参考对象
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;
OGRCreateCoordinateTransformation
OGRCoordinateTransformation * OGRCreateCoordinateTransformation(const OGRSpatialReference *poSource, const OGRSpatialReference *poTarget, const OGRCoordinateTransformationOptions &options )
Créer un objet de transformation
paramètre:
-
poSource -- Le système de référence spatiale source.
-
poTarget -- Le système de référence spatiale cible.
-
options – options de transformation de coordination.
Renvoie : NULL ou un objet de conversion prêt à l'emploi en cas d'échec
// 创建源空间参考对象
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;
class OGRSpatialReference #include <ogr_spatialref.h>
OGRSpatialReference
C'est une classe importante dans la bibliothèque GDAL/OGR, qui est utilisée pour gérer et manipuler le système de référence spatiale (Spatial Reference System, SRS) des données géospatiales. Il fournit un ensemble de fonctions qui permettent aux utilisateurs de définir, interroger, analyser et transformer des informations de système de coordonnées et de projection pour les données géospatiales.
Fonctions publiques
OGRSpatialReference
explicite OGRSpatialReference ( const char* = nullptr )
Constructeur
OGRSpatialReference
OGRSpatialReference(const OGRSpatialReference & )
paramètre:
pszWKT - la définition de texte bien connue avec laquelle l'objet doit être initialisé, ou NULL (valeur par défaut)
int Référence ( )
Incrémenter le compteur de références de 1
Renvoie : le nombre de références mis à jour
int Référence ( )
Décrémente le nombre de références de 1
Renvoie : le nombre de références mis à jour
int GetReferenceCount() const
Obtenir le nombre de références actuel
Renvoie : le nombre de références actuel
annuler la libération ( )
Décrémente le nombre de références de 1, détruit si zéro
ObtenirNom
const char *GetName() const
Renvoie : le nom du SCR
OGRSpatialReference srs; srs.importFromEPSG(4326);
// WGS 84 经纬度坐标系
// 使用 GetName() 函数获取空间参考系统的名称
const char *srsName = srs.GetName();
// 输出空间参考系统的名称
printf("空间参考系统名称:%s\n", srsName);
空间参考系统名称:WGS 84
Cloner
OGRSpatialReference *Clone() const
Copiez cette référence OGR Spatial
Retours : le nouveau SRS, qui devient la responsabilité de l'appelant
exportToWkt
OGRErr exportToWkt(car**) const
Convertissez ce format SRS au format WKT
paramètre:
ppszResult -- Renvoie la chaîne de résultat dans ce pointeur.
Renvoie : OGRERR_NONE en cas de succès
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"]]
exportToWkt
OGRErr exportToWkt(char **ppszWKT, const char *const *papszOptions)
Convertir cette chaîne SRS en WKT
paramètre:
-
ppszResult -- Renvoie la chaîne de résultat dans ce pointeur.
-
papszOptions - liste d'options terminée par NULL, ou NULL.
Renvoie : OGRERR_NONE en cas de succès.
Actuellement dans la bibliothèque GDAL/OGR, exportToWkt()
les méthodes prennent en charge les options d'exportation suivantes :
SPACING
: définit le caractère d'espacement entre les paramètres dans la chaîne WKT exportée, la valeur par défaut est un espace.
INDENT
: définissez le caractère d'indentation dans la chaîne WKT exportée, la valeur par défaut est de quatre espaces.
SINGLE_LINE
: Si défini sur"YES"
, la chaîne WKT exportée sera sur une ligne sans retour à la ligne, sinon utilisez le format multiligne, la valeur par défaut est d'utiliser le format multiligne.
SIMPLE_IRREGULAR
: Si défini sur"YES"
, la chaîne WKT exportée essaiera d'utiliser une description simplifiée d'ellipsoïde irrégulier, et la valeur par défaut est de ne pas utiliser de description simplifiée.
WKT_FORMAT_ISO
: Si défini sur"ON"
, la chaîne WKT exportée utilisera le format canonique ISO 19162, la valeur par défaut est de ne pas utiliser le format canonique ISO 19162.
AXIS_ORDER
: Définir l'ordre des axes pour l'exportation. Les valeurs facultatives sont"EAST_NORTH"
,"NORTH_EAST"
,"OTHER"
,"LAT_LONG"
,"LONG_LAT"
etc. La valeur par défaut est de déterminer l'ordre des axes selon la convention du code EPSG.
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");
}
exportToPrettyWkt
OGRErr exportToPrettyWkt(char**, int = FALSE) const
Convertir ce SRS en une chaîne WKT bien formée
Le principal avantage de cette fonction exportée par rapport à exportToWkt(char**) const
la fonction est que la chaîne WKT exportée est formatée pour la rendre plus lisible. La chaîne formatée ajoutera une indentation et des sauts de ligne aux positions appropriées, augmentant ainsi la lisibilité et facilitant la lecture humaine.
paramètre:
-
ppszResult -- Renvoie la chaîne de résultat dans ce pointeur.
-
bSimplify -- TRUE si les nœuds AXIS, AUTHORITY et EXTENSION doivent être supprimés.
Renvoie : OGRERR_NONE en cas de succès
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"]
]
exportToPROJJSON
OGRErr exportToPROJJSON(char**, const char *const *papszOptions) const
Convertir cette chaîne SRS en PROJJSON
paramètre:
-
ppszResult -- Renvoie la chaîne de résultat dans ce pointeur.
-
papszOptions - liste d'options terminée par NULL, ou NULL.
Renvoie : OGRERR_NONE en cas de succès
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
}
}
exportToProj4
OGRErr exportToProj4(car**) const
Exporter le système de coordonnées au format hérité PROJ.4
paramètre:
ppszProj4 -- Un pointeur vers une définition PROJ allouée dynamiquement à laquelle attribuer.
Renvoie : OGRERR_NONE en cas de succès ou code d'erreur en cas d'échec
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
exportVersPCI
OGRErr exportToPCI(char**, char**, double**) const
Exporter le système de coordonnées dans la définition de projection PCI
paramètre:
-
ppszProj -- Pointeur auquel la définition de projection PCI allouée dynamiquement sera allouée.
-
ppszUnits -- Un pointeur auquel la définition d'unité d'allocation dynamique sera allouée.
-
ppadfPrjParams -- Pointeur vers un tableau de 17 paramètres de projection qui seront alloués dynamiquement. Voir importFromPCI() pour une liste de paramètres.
Renvoie : OGRERR_NONE en cas de succès ou code d'erreur en cas d'échec
exportToUSGS
OGRErr exportToUSGS(long*, long*, double**, long*) const
Exporter le système de coordonnées dans la définition de projection USGS GCTP
paramètre:
-
piProjSys -- Pointeur vers la variable où le code du système de projection sera renvoyé.
-
piZone -- Pointeur vers la variable dans laquelle renvoyer la zone pour UTM et le système US National Plane Projection.
-
ppadfPrjParams -- Pointeur auquel attribuer dynamiquement un tableau de 15 paramètres de projection. Voir importFromUSGS() pour une liste de paramètres. L'appelant responsable de la libération de ce tableau.
-
piDatum – Pointeur vers la variable où le code de référence sera renvoyé.
Renvoie : OGRERR_NONE en cas de succès ou code d'erreur en cas d'échec
exportVersXML
OGRErr exportToXML(char**, const char* = nullptr) const
Exporter le système de coordonnées au format XML
paramètre:
-
ppszRawXML -- Un pointeur vers une définition XML allouée dynamiquement à laquelle attribuer.
-
pszDialect - actuellement ignoré. Le dialecte utilisé est basé sur le GML.
Renvoie : OGRERR_NONE en cas de succès ou code d'erreur en cas d'échec
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>
exportToPanorama
OGRErr exportToPanorama(long*, long*, long*, long*, double*) const
Le système de coordonnées dérivé est défini dans la projection SIG "panoramique".
paramètre:
-
piProjSys -- Pointeur vers la variable où le code du système de projection sera renvoyé.
-
piDatum -- pointeur vers la variable dans laquelle le code du système de coordonnées sera renvoyé.
-
piEllips -- pointeur vers la variable dans laquelle le code de l'ellipsoïde sera retourné.
-
piZone -- Pointeur vers la variable dans laquelle la zone du système de projection UTM sera renvoyée.
-
padfPrjParams -- 7 tampons doubles existants où les paramètres de projection seront placés. Voir importFromPanorama() pour une liste de paramètres.
Renvoie : OGRERR_NONE en cas de succès ou code d'erreur en cas d'échec
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");
}
Étant donné que plusieurs paramètres sont impliqués, le contenu de sortie sera plus, donc il n'est pas imprimé ici en entier
exportVertCSToPanorama
OGRErr exportVertCSToPanorama(int*) const
Exporter un système de coordonnées verticales en tant que définition de projection SIG "panoramique"
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");
}
exportVersERM
OGRErr exportToERM(char *pszProj, char *pszDatum, char *pszUnits )
Convertir le système de coordonnées au format ERMapper
paramètre:
-
pszProj -- Tampon de 32 caractères pour recevoir le nom de la projection.
-
pszDatum -- Tampon de 32 caractères pour recevoir le nom de la donnée.
-
pszUnits -- Tampon de 32 caractères pour recevoir les noms d'unités.
Renvoie : OGRERR_NONE en cas de succès, OGRERR_SRS_UNSUPPORTED si aucune traduction n'est trouvée, ou OGRERR_FAILURE en cas d'autre échec
exportToMICoordSys
OGRErr exportToMICoordSys(char**) const
Exporter le système de coordonnées au format de système de coordonnées de style Map Info
paramètre:
ppszResult -- Pointeur auquel la définition Mapinfo CoordSys allouée dynamiquement sera allouée.
Renvoie : OGRERR_NONE en cas de succès, OGRERR_FAILURE en cas d'échec, OGRERR_UNSUPPORTED_OPERATION Si la bibliothèque MITAB n'est pas liée
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