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 SetAxisMappingStrategy(OSRAxisMappingStrategy )
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);
OSRAxisMappingStrategy
Est un type énuméré utilisé pour représenter la stratégie de mappage des axes. Dans GDAL/OGR,OSRAxisMappingStrategy
les valeurs d'énumération suivantes sont définies :
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.
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é.
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é.
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é