Parcours d'apprentissage de l'API GDAL C++ (1) Classe OGR SpatialReference du système de référence spatiale

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 :

  1. 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.

  2. 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.

  3. 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 OGRSpatialReferencela 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>

OGRSpatialReferenceC'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

OGRSpatialReferenceconst  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 :

  1. 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.

  2. INDENT: définissez le caractère d'indentation dans la chaîne WKT exportée, la valeur par défaut est de quatre espaces.

  3. 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.

  4. 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.

  5. 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.

  6. 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**) constla 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

Je suppose que tu aimes

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