GDAL C++ API Learning Road (3) Système de référence spatiale Classe OGR SpatialReference

class OGRSpatialReference #include <ogr_spatialref.h>

OGRSpatialReference est une classe importante de la bibliothèque GDAL/OGR, qui est utilisée pour gérer et exploiter 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

GetAxesCount

int GetAxesCount() const

Renvoie le numéro d'axe du système de coordonnées SCR

    // 定义一个 WGS 84 经纬度坐标系的WKT字符串
    const char* wktString = "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.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4326\"]]";
    
    // 创建一个 OGRSpatialReference 对象,并从WKT字符串中导入空间参考系统
    OGRSpatialReference srs;
    srs.importFromWkt(&wktString);
    
    // 获取空间参考系统中坐标轴的数量
    int axesCount = srs.GetAxesCount();
    
    // 输出坐标轴的数量
    printf("坐标轴的数量:%d\n", axesCount);

ObtenirAxe

const char *GetAxis(const char *pszTargetKey, int iAxis,  OGRAxisOrientation  *peOrientation, double *pdfConvFactor = nullptr) const

obtenir l'orientation d'un axe

paramètre:

  • pszTargetKey  -- La partie du système de coordonnées ("PROJCS" ou "GEOGCS") à interroger.

  • iAxis  -- Axe à interroger (0 pour le premier, 1 pour le deuxième, 2 pour le troisième).

  • peOrientation - où placer l'orientation, peut être NULL.

  • pdfConvUnit  -- (GDAL >= 3.4) Où placer les facteurs de conversion des axes. Peut être vide. Défini uniquement si pszTargetKey == NULL

Renvoie : le nom de l'axe en cas d'échec ou NULL

    // 定义一个 WGS 84 经纬度坐标系的WKT字符串
    const char* wktString = "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.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4326\"]]";
    
    // 创建一个 OGRSpatialReference 对象,并从WKT字符串中导入空间参考系统
    OGRSpatialReference srs;
    srs.importFromWkt(&wktString);
    
    // 获取指定坐标轴的信息
    const char* targetKey = "GEOGCS";
    int axisIndex = 0; // 纬度的索引为0,经度的索引为1
    OGRAxisOrientation orientation;
    double convFactor;
    const char* axisInfo = srs.GetAxis(targetKey, axisIndex, &orientation, &convFactor);

    if (axisInfo != nullptr) {
        printf("指定坐标轴的信息:%s\n", axisInfo);
        printf("坐标轴的方向:%s\n", (orientation == OAO_East || orientation == OAO_North) ? "正向" : "反向");
        printf("坐标轴的转换因子:%f\n", convFactor);
    } else {
        printf("未找到指定坐标轴的信息。\n");
    }

DéfinirAxes

OGRErr  SetAxes(const char *pszTargetKey,  const  char *pszXAxisName,  OGRAxisOrientation  eXAxisOrientation,  const  char *pszYAxisName, OGRAxisOrientation eYAxisOrientation  )

Définir les axes du système de coordonnées

Définir le nom du système de coordonnées projetées (PROJCS) ou géographiques (GEOGCS) et l'orientation de l'axe

paramètre:

  • pszTargetKey  - "PROJCS" ou "GEOGCS", doit déjà exister dans le SRS.

  • pszXAxisName  -- Le nom du premier axe, généralement "Long" ou "Est".

  • eXAxisOrientation—— généralement OAO_East.

  • pszYAxisName  -- Le nom du deuxième axe, généralement "Latitude" ou "Nord".

  • eYAxisOrientation - généralement OAO_North.

Renvoie : OGRERR_NONE en cas de succès ou un code d'erreur

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

    // 设置地理坐标系的坐标轴信息
    const char* targetKey = "GEOGCS";
    const char* xAxisName = "Longitude";
    OGRAxisOrientation xAxisOrientation = OAO_East; // 东经方向为正向
    const char* yAxisName = "Latitude";
    OGRAxisOrientation yAxisOrientation = OAO_North; // 北纬方向为正向

    OGRErr err = srs.SetAxes(targetKey, xAxisName, xAxisOrientation, yAxisName, yAxisOrientation);

GetAxisMappingStrategy

OSRAxisMappingStrategy  GetAxisMappingStrategy() const

Retourner l'axe de données à la stratégie de mappage de l'axe CRS

Renvoie : stratégie de mappage de l'axe de données à l'axe CRS

    // 定义一个 WGS 84 经纬度坐标系的WKT字符串
    const char* wktString = "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.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4326\"]]";
    
    // 创建一个 OGRSpatialReference 对象,并从WKT字符串中导入空间参考系统
    OGRSpatialReference srs;
    srs.importFromWkt(&wktString);
    
    // 获取坐标轴映射策略
    OSRAxisMappingStrategy axisMappingStrategy = srs.GetAxisMappingStrategy();
    
    // 输出坐标轴映射策略
    switch (axisMappingStrategy) {
        case OAMS_TRADITIONAL_GIS_ORDER:
            printf("坐标轴映射策略:传统GIS顺序\n");
            break;
        case OAMS_AUTHORITY_COMPLIANT:
            printf("坐标轴映射策略:符合权威机构要求\n");
            break;
        case OAMS_AUTO_COMPLIANT:
            printf("坐标轴映射策略:自动符合\n");
            break;
        case OAMS_NONE:
            printf("坐标轴映射策略:无映射\n");
            break;
        default:
            printf("未知的坐标轴映射策略\n");
            break;
    }

SetAxisMappingStrategy

annuler  SetAxisMappingStrategyOSRAxisMappingStrategy )

Définir l'axe de données sur la stratégie de mappage de l'axe CRS

    // 定义一个 WGS 84 经纬度坐标系的WKT字符串
    const char* wktString = "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.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4326\"]]";
    
    // 创建一个 OGRSpatialReference 对象,并从WKT字符串中导入空间参考系统
    OGRSpatialReference srs;
    srs.importFromWkt(&wktString);

    // 设置坐标轴映射策略为符合权威机构要求
    srs.SetAxisMappingStrategy(OAMS_AUTHORITY_COMPLIANT);

    // 导出设置后的空间参考系统的WKT格式字符串并打印
    char* srsWKT = NULL;
    srs.exportToWkt(&srsWKT);
    printf("设置后的空间参考系统:\n%s\n", srsWKT);

    // 释放内存,避免内存泄漏
    CPLFree(srsWKT);

OSRAxisMappingStrategyEst un type énuméré utilisé pour représenter la stratégie de mappage des axes. Dans GDAL/OGR, OSRAxisMappingStrategyles valeurs d'énumération suivantes sont définies :

  1. OAMS_TRADITIONAL_GIS_ORDER: Ordre SIG traditionnel, généralement utilisé dans les logiciels SIG traditionnels. Autrement dit, l'axe X (longitude) est devant et l'axe Y (latitude) est derrière.

  2. OAMS_AUTHORITY_COMPLIANT: Conforme aux exigences de l'autorité, généralement utilisé pour les systèmes de coordonnées qui répondent aux normes de l'autorité. La séquence exacte et les exigences peuvent être définies par l'autorité.

  3. OAMS_AUTO_COMPLIANT: correspond automatiquement, indiquant que la bibliothèque sélectionne automatiquement l'ordre des axes de coordonnées qui répond aux exigences. Normalement, si le système de référence spatiale comprend un ordre des axes spécifié par une autorité, l'ordre requis est automatiquement adopté.

  4. OAMS_NONE: Pas de mappage, indiquant que l'axe de coordonnées n'est pas mappé. Dans ce cas, l'ordre des axes de coordonnées peut être indéfini et doit être confirmé par l'utilisateur.

SetLinearUnitsAndUpdateParameters

OGRErr  SetLinearUnitsAndUpdateParameters(const char *pszName, double dfInMeters,  const  char *pszUnitAuthority = nullptr,  const  char *pszUnitCode =  nullptr )

définir l'unité linéaire de la projection

paramètre:

  • pszName  -- Le nom de l'unité à utiliser. Certains noms d'unités préférés peuvent être trouvés dans ogr_srs_api.h, tels que SRS_UL_METER, SRS_UL_FOOT et SRS_UL_US_FOOT.

  • dfInMeter  -- le multiple de la longueur à convertir de l'unité indiquée en mètres. Certains facteurs de conversion standard peuvent être trouvés dans ogr_srs_api.h.

  • pszUnitAuthority  -- Nom de l'autorité de l'unité. ou vide

  • pszUnitCode  -- Code d'unité. ou vide

Retour : OGRERR_NONE succès

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

    // 设置线性单位为“米”(meters),并更新相关参数
    const char* unitName = "Meter";
    double unitInMeters = 1.0; // 1 米
    const char* unitAuthority = "EPSG"; // 单位的权威机构(EPSG)
    const char* unitCode = "9001"; // 单位的代码(EPSG代码:9001代表Meter)

    OGRErr err = srs.SetLinearUnitsAndUpdateParameters(unitName, unitInMeters, unitAuthority, unitCode);

    if (err == OGRERR_NONE) {
        printf("线性单位设置成功!\n");

        // 导出设置后的空间参考系统的WKT格式字符串并打印
        char* srsWKT = NULL;
        srs.exportToWkt(&srsWKT);
        printf("设置后的空间参考系统:\n%s\n", srsWKT);

        // 释放内存,避免内存泄漏
        CPLFree(srsWKT);
    } else {
        printf("线性单位设置失败!\n");
    }

GetLinearUnits

double GetLinearUnits(char**) const

Obtenir des unités de projection linéaire

paramètre:

ppszName  – Le pointeur à mettre à jour avec un pointeur vers le nom du périphérique. La valeur renvoyée reste interne à  OGRSpatialReference  et ne doit pas être libérée ou modifiée. Il peut être invalidé lors du prochain  appel OGR SpatialReference  .

Renvoie : la valeur multipliée par la distance linéaire pour la convertir en mètres

    // 定义一个 WGS 84 经纬度坐标系的WKT字符串
    const char* wktString = "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.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4326\"]]";
    
    // 创建一个 OGRSpatialReference 对象,并从WKT字符串中导入空间参考系统
    OGRSpatialReference srs;
    srs.importFromWkt(&wktString);
    
    // 获取空间参考系统中线性单位的值
    double linearUnits = srs.GetLinearUnits();

    // 输出线性单位的值
    printf("线性单位的值:%f\n", linearUnits);

SetAngularUnits

OGRErr  SetAngularUnits( char const  *pszName, double dfInRadians )

Définit les unités angulaires du système de coordonnées géographiques

paramètre:

  • pszName  -- Le nom de l'unité à utiliser. Certains noms d'unités préférés peuvent être trouvés dans ogr_srs_api.h, par exemple SRS_UA_DEGREE.

  • dfInRadians  -- Multiples des angles convertis en radians dans les unités indiquées. Certains facteurs de conversion standard peuvent être trouvés dans ogr_srs_api.h.

Retour : OGRERR_NONE succès

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

    // 设置角度单位为“度”(degree),并更新相关参数
    const char* unitName = "Degree";
    double unitInRadians = CPLAtof(SRS_UA_DEGREE_CONV);
    
    OGRErr err = srs.SetAngularUnits(unitName, unitInRadians);

GetAngularUnits

double GetAngularUnits(char**) const

Obtenir les unités du système de coordonnées géographiques angulaires

paramètre:

ppszName  – Le pointeur à mettre à jour avec un pointeur vers le nom du périphérique. La valeur renvoyée reste interne à  OGRSpatialReference  et ne doit pas être libérée ou modifiée. Il peut être invalidé lors du prochain  appel OGR SpatialReference  .

Renvoie : la valeur multipliée par la distance angulaire pour la convertir en radians

   // 定义一个 WGS 84 经纬度坐标系的WKT字符串
    const char* wktString = "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.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4326\"]]";
    
    // 创建一个 OGRSpatialReference 对象,并从WKT字符串中导入空间参考系统
    OGRSpatialReference srs;
    srs.importFromWkt(&wktString);
    
    // 获取空间参考系统中的角度单位
    double angularUnits = srs.GetAngularUnits();

    // 输出角度单位的值
    printf("角度单位的值:%f\n", angularUnits);

GetPrimeMeridian

double GetPrimeMeridian(char**) const

Obtenir des informations sur le méridien principal

paramètre:

ppszName  -- Renvoie la position du nom du premier méridien. Si NULL, aucun nom n'est renvoyé.

Renvoie : Décalage de Greenwich au premier méridien GEOGCS en degrés décimaux

    // 定义一个 WGS 84 经纬度坐标系的WKT字符串
    const char* wktString = "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.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4326\"]]";
    
    // 创建一个 OGRSpatialReference 对象,并从WKT字符串中导入空间参考系统
    OGRSpatialReference srs;
    srs.importFromWkt(&wktString);
    
    // 获取空间参考系统中的本初子午线
    double primeMeridian = srs.GetPrimeMeridian();

    // 输出本初子午线的值
    printf("本初子午线的值:%f\n", primeMeridian);

Est vide

bool EstVide() const

Renvoie si SRS n'est pas défini

EstGéographique

int IsGeographic() const

Renvoie : TRUE si cette référence spatiale est une géoréférence

Est projeté

int est projeté() const

Renvoie : VRAI si contient un nœud PROJCS indiquant un système de coordonnées projetées

EstGéocentrique

int IsGeocentric() const

Vérifier le système de coordonnées géocentriques

Renvoie : TRUE s'il contient un nœud GEOCCS indiquant qu'il s'agit d'un système de coordonnées géocentriques

EstLocal

int EstLocal() const

Vérifiez s'il s'agit d'un système de coordonnées local

Renvoie : TRUE si cette référence spatiale est locale... c'est-à-dire que la racine est un nœud LOCAL_CS

EstVertical

int IsVertical() const

Vérifiez si le système de coordonnées verticales

Renvoie : TRUE s'il contient un nœud VERT_CS indiquant qu'il s'agit d'un système de coordonnées verticales

EstComposé

int EstComposé() const

Vérifier si le système de coordonnées est un système de coordonnées composé

Je suppose que tu aimes

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