GDAL C++ API Learning Road (4) Sistema de referencia espacial OGRSpatialReference Class

clase OGRSpatialReference #include <ogr_spatialref.h>

OGRSpatialReference es una clase importante en la biblioteca GDAL/OGR, que se utiliza para administrar y operar el sistema de referencia espacial (Sistema de referencia espacial, SRS) de datos geoespaciales. Proporciona un conjunto de funciones que permiten a los usuarios definir, consultar, analizar y transformar el sistema de coordenadas y la información de proyección para datos geoespaciales.

Funciones Publicas

IsSameGeogCS

int IsSameGeogCS(const  OGRSpatialReference *) const 

Coincide GeogCS

parámetro:

poOther  : el SRS que se está comparando.

Devuelve: VERDADERO si son iguales, FALSO en caso contrario

    // 定义两个 WGS 84 经纬度坐标系的WKT字符串
    const char* wktString1 = "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\"]]";
    const char* wktString2 = "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 srs1;
    srs1.importFromWkt(&wktString1);
    OGRSpatialReference srs2;
    srs2.importFromWkt(&wktString2);
    
    // 判断两个空间参考系统是否具有相同的地理坐标系
    int isSameGeogCS = srs1.IsSameGeogCS(&srs2);

    // 输出判断结果
    if (isSameGeogCS) {
        printf("两个空间参考系统具有相同的地理坐标系。\n");
    } else {
        printf("两个空间参考系统具有不同的地理坐标系。\n");
    }

IsSameVertCS

int IsSameVertCS(const  OGRSpatialReference *) const

¿VertCS coincide

parámetro:

poOther  : el SRS que se está comparando.

Devuelve: VERDADERO si son iguales, FALSO en caso contrario

Es lo mismo

int IsSame(const  OGRSpatialReference *) const 

¿Describen las dos referencias espaciales el mismo sistema?

parámetro:

pootherSRS  : el SRS con el que comparar.

Devuelve: VERDADERO si es equivalente, FALSO en caso contrario

   // 定义两个相同的 WGS 84 经纬度坐标系的WKT字符串
    const char* wktString1 = "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\"]]";
    const char* wktString2 = "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 srs1;
    srs1.importFromWkt(&wktString1);
    OGRSpatialReference srs2;
    srs2.importFromWkt(&wktString2);
    
    // 判断两个空间参考系统是否完全相同
    int isSame = srs1.IsSame(&srs2);

Es lo mismo

int IsSame(const  OGRSpatialReference *, const char *const *papszOptions) const

¿Describen las dos referencias espaciales el mismo sistema?

parámetro:

  • pootherSRS  : el SRS con el que comparar.

  • papszOptions – Opciones. lista de opciones vacía o terminada en nulo

Devuelve: VERDADERO si es equivalente, FALSO en caso contrario

Claro

vacío  Limpiar ( )

borrar definición actual

EstablecerProyección

OGRErr  SetProjection ( const  char * )

establecer el nombre de la proyección

parámetro:

pszProjection  : el nombre de la proyección debe elegirse de las macros en ogr_srs_api.h, por ejemplo, SRS_PT_TRANSVERSE_MERCATOR.

Devolución: OGRERR_NONE éxito

    // 定义一个 UTM 投影的 WKT 字符串
    const char* wktString = "PROJCS[\"WGS 84 / UTM zone 18N\",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\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-75],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],AUTHORITY[\"EPSG\",\"32618\"]]";
    
    // 创建一个 OGRSpatialReference 对象
    OGRSpatialReference srs;
    
    // 设置空间参考系统的投影信息
    OGRErr err = srs.SetProjection(wktString);

EstablecerGeocCS

OGRErr  SetGeocCS ( const  char *pszGeocName )

Establecer nombre GEOCCS visible para el usuario

parámetro:

pszName  : el nombre visible para el usuario que se va a asignar. No se utiliza como llave.

Devolución: OGRERR_NONE éxito

    // 定义一个地心坐标系的 WKT 字符串
    const char* wktString = "GEOCCS[\"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[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],AXIS[\"Geocentric X\",OTHER],AXIS[\"Geocentric Y\",EAST],AXIS[\"Geocentric Z\",NORTH],AUTHORITY[\"EPSG\",\"4984\"]]";
    
    // 创建一个 OGRSpatialReference 对象
    OGRSpatialReference srs;
    
    // 设置空间参考系统的地心坐标系名称
    OGRErr err = srs.SetGeocCS(wktString);

SetProjCS

OGRErr  SetProjCS ( const  char * );

Establecer el nombre de PROJCS visible para el usuario

parámetro:

pszName  : el nombre visible para el usuario que se va a asignar. No se utiliza como llave.

Devolución: OGRERR_NONE éxito

    // 定义一个墨卡托投影坐标系的 WKT 字符串
    const char* wktString = "PROJCS[\"Mercator\",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\"]],PROJECTION[\"Mercator_1SP\"],PARAMETER[\"central_meridian\",0],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",0],PARAMETER[\"false_northing\",0],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],AXIS[\"Easting\",EAST],AXIS[\"Northing\",NORTH],AUTHORITY[\"EPSG\",\"3395\"]]";
    
    // 创建一个 OGRSpatialReference 对象
    OGRSpatialReference srs;
    
    // 设置空间参考系统的投影坐标系名称
    OGRErr err = srs.SetProjCS(wktString);

EstablecerGeogCS

OGRErr SetGeogCS ( const  char *pszGeogName,  const  char *pszDatumName,  const  char *pszEllipsoidName, double dfSemiMajor, double dfInvFlattening,  const  char *pszPMName =  nullptr

doble dfPMOffset = 0.0,  const  char *pszUnits =  nullptr , doble dfConvertToRadians = 0.0 )

Establecer sistema de coordenadas geográficas

Este método se utiliza para establecer las unidades de referencia, elipsoide, primer meridiano y angular del sistema de coordenadas geográficas. Se puede utilizar solo para establecer una referencia geoespacial o se puede aplicar a un sistema de coordenadas proyectadas para establecer un sistema de coordenadas geográficas básico.

parámetro:

  • pszGeogName  : el nombre visible para el usuario del sistema de coordenadas geográficas (no se usa como clave).

  • pszDatumName  : el nombre clave para este dato. La especificación OpenGIS enumera algunos valores conocidos; de lo contrario, los nombres de datos EPSG con transformaciones estándar se consideran claves legales.

  • pszSpheroidName  : nombre de esferoide visible para el usuario (no se usa como clave)

  • dfSemiMajor  : el semieje mayor del elipsoide.

  • dfInvFlattening  : aplanamiento inverso del elipsoide. Esto se puede calcular a partir del eje semi-menor como 1/f = 1.0 / (1.0 - semi-menor/semi-largo).

  • pszPMName  : el nombre del primer meridiano (no se usa como clave) Si es NULL, se usará el valor predeterminado "Greenwich".

  • dfPMOffset  : longitud de Greenwich en relación con el primer meridiano. siempre en grados

  • pszAngularUnits  : nombres de unidades angulares (consulte ogr_srs_api.h para conocer algunos nombres estándar). Si es NULL, se asumirá el valor "grados".

  • dfConvertToRadians  : multiplica las unidades angulares por un valor para convertirlas a radianes. Si pszAngularUnits es NULL, se utilizará el valor SRS_UA_DEGREE_CONV.

Devolución: OGRERR_NONE éxito

    // 创建一个 OGRSpatialReference 对象
    OGRSpatialReference srs;
    
    // 设置地理坐标系的属性
    OGRErr err = srs.SetGeogCS("WGS 84", "WGS_1984", "WGS 84", 6378137, 298.257223563);

ConjuntoBienConocidoGeogCS

OGRErr  SetWellKnownGeogCS ( const  char * )

Configurar GeogCS basado en nombres conocidos

parámetro:

pszName  : el nombre del sistema de coordenadas geográficas conocido.

Devuelve: OGRERR_NONE en caso de éxito o OGRERR_FAILURE si el nombre no se reconoció, el objeto de destino se inicializó o el valor EPSG no se pudo buscar correctamente

    // 创建一个 OGRSpatialReference 对象
    OGRSpatialReference srs;
    
    // 设置为 WGS 84 地理坐标系
    OGRErr err = srs.SetWellKnownGeogCS("WGS84");

Copiar GeogCSFrom

OGRErr  CopyGeogCSFrom ( const  OGRSpatialReference  *poSrcSRS )

 Copie GEOGCS de otra  OGRSpatialReference

parámetro:

poSrcSRS  : la referencia espacial desde la que copiar la información de GEOGCS.

Devuelve: OGRERR_NONE en caso de éxito o un código de error

    // 定义一个源空间参考系统,用于复制地理坐标系信息
    const char* srcWktString = "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 srcSRS;
    srcSRS.importFromWkt(&srcWktString);
    
    // 创建一个目标空间参考系统
    OGRSpatialReference dstSRS;
    
    // 复制源空间参考系统中的地理坐标系信息到目标空间参考系统
    OGRErr err = dstSRS.CopyGeogCSFrom(&srcSRS);

EstablecerCompuestoCS

OGRErr  SetCompoundCS (const char *pszName, const  OGRSpatialReference  *poHorizSRS,  const  OGRSpatialReference  *poVertSRS )

Establecer sistema de coordenadas compuesto Este método reemplaza el SRS actual con el sistema de coordenadas COMPD_CS que consta de sistemas de coordenadas horizontales y verticales

parámetro:

  • pszName  : el nombre del sistema de coordenadas compuesto.

  • poHorizSRS  - SRS horizontal (PROJCS o GEOGCS).

  • poVertSRS: SRS vertical  (VERT_CS).

Devolución: OGRERR_NONE éxito

    // 创建一个 OGRSpatialReference 对象
    OGRSpatialReference srs;
    
    // 设置复合坐标系
    const char* compoundCSName = "WGS 84 + EGM96";
    
    // 创建水平坐标系(地理或投影)和垂直坐标系的空间参考系统
    OGRSpatialReference horizSRS, vertSRS;
    horizSRS.SetWellKnownGeogCS("WGS84");
    vertSRS.importFromEPSG(5773); // EGM96 - Earth Gravitational Model 1996
    
    // 设置复合坐标系
    OGRErr err = srs.SetCompoundCS(compoundCSName, &horizSRS, &vertSRS);

SetCoordinateEpoch

void  SetCoordinateEpoch (doble  dfCoordinateEpoch )

Establece la época de coordenadas en un año decimal

parámetro:

dfCoordinateEpoch  -- Coordina la época como un año decimal (por ejemplo, 2021.3)

    // 创建一个 OGRSpatialReference 对象
    OGRSpatialReference srs;
    
    // 设置坐标时期为 2000.0 年
    double coordinateEpoch = 2000.0;
    srs.SetCoordinateEpoch(coordinateEpoch);
    
    // 输出设置结果
    printf("成功设置空间参考系统的坐标时期为 %.1f 年。\n", coordinateEpoch);
空间参考系统的坐标时期为 2000.0 年。

Si el período de coordenadas es 2000.0 y el tiempo es 1998, entonces la diferencia de tiempo es de -2.0 años en relación con el período de coordenadas 2000.0.

La diferencia de tiempo se calcula como el tiempo objetivo menos el período de coordenadas. Si el tiempo objetivo es posterior a la época de coordenadas, la diferencia de tiempo es positiva y si el tiempo objetivo es anterior a la época de coordenadas, la diferencia de tiempo es negativa.

En este ejemplo, si el tiempo es 1998, la diferencia de tiempo es de -2,0 años en relación con el período de coordenadas 2000,0. Esto significa que la información de ubicación en sus datos espaciales es relativa al año 2000. Si desea convertir esta información de ubicación a una ubicación relativa a 1998, puede realizar la transformación de coordenadas correspondiente según la diferencia horaria -2,0 años. De esta manera, puede tener en cuenta los pequeños cambios en la tierra durante este período de 2 años y obtener información de posición más precisa.

GetCoordinateEpoch

doble GetCoordinateEpoch() const

Devuelve: Coordinate Epoch Coordina la época como un año decimal (por ejemplo, 2021.3), o 0 si no está establecido o no es relevante

    // 创建一个 OGRSpatialReference 对象
    OGRSpatialReference srs;
    
    // 设置坐标时期为 2000.0 年
    double coordinateEpoch = 2000.0;
    srs.SetCoordinateEpoch(coordinateEpoch);
    
    // 获取坐标时期并输出结果
    double retrievedEpoch = srs.GetCoordinateEpoch();
    printf("空间参考系统的坐标时期为 %.1f 年。\n", retrievedEpoch);
空间参考系统的坐标时期为 2000.0 年。

Supongo que te gusta

Origin blog.csdn.net/qq_69574549/article/details/132068599
Recomendado
Clasificación