GDAL C++ API 学习之路 (2) Spatial Reference System篇 OGRSpatialReference类

class OGRSpatialReference        #include <ogr_spatialref.h>

OGRSpatialReference 是 GDAL/OGR 库中的一个重要类,用于管理和操作地理空间数据的空间参考系统(Spatial Reference System,SRS)。它提供了一系列功能,允许用户定义、查询、解析和转换地理空间数据的坐标系统和投影信息

Public Functions

importFromWkt

OGRErr importFromWkt(char**)

从 WKT 字符串导入

参数:

ppszInput -- 指向输入的指针。指针将更新为指向剩余的未使用的输入文本。

返回:  OGRERR_NONE导入是否成功,如果导入失败,则OGRERR_CORRUPT_DATA导入是否因任何原因失败

    // WGS 84 经纬度坐标系的 WKT 字符串
    const char* 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\"]]";

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

    // 从 WKT 字符串中导入空间参考系统
    OGRErr err = srs.importFromWkt(const_cast<char**>(&wkt));

importFromProj4

OGRErr importFromProj4const char*)

导入 PROJ 坐标字符串

参数:

pszProj4 -- PROJ 样式字符串。

返回: OGRERR_NONE成功或OGRERR_CORRUPT_DATA失败

    // Proj.4 格式的字符串,表示 WGS 84 经纬度坐标系
    const char* proj4String = "+proj=longlat +datum=WGS84 +no_defs";

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

    // 从 Proj.4 字符串中导入空间参考系统
    OGRErr err = srs.importFromProj4(proj4String);

importFromEPSG

OGRErr importFromEPSG(int)

根据 EPSG 地理、投影或垂直 CRS 代码初始化 SRS

参数:

nCode -- 水平坐标系表中的 GCS 或 PCS 代码。

返回: 从 ESRI .prj 格式导入坐标系成功时OGRERR_NONE,失败时错误代码

    // 定义 EPSG 代码,例如,4326 表示 WGS 84 经纬度坐标系
    int epsgCode = 4326;

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

    // 从 EPSG 代码中导入空间参考系统
    OGRErr err = srs.importFromEPSG(epsgCode);

importFromESRI

OGRErr importFromESRI(char**)

从 ESRI .prj 格式导入坐标系

参数:

papszPrj -- 包含定义的字符串列表的 NULL 终止列表。

返回:  OGRERR_NONE成功或失败时的错误代码

    // ESRI 格式的字符串,表示 WGS 84 经纬度坐标系
    const char* esriString = "GEOGCS[\"GCS_WGS_1984\",DATUM[\"D_WGS_1984\",SPHEROID[\"WGS_1984\",6378137.0,298.257223563]],PRIMEM[\"Greenwich\",0.0],UNIT[\"Degree\",0.0174532925199433]]";

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

    // 从 ESRI 字符串中导入空间参考系统
    OGRErr err = srs.importFromESRI(const_cast<char**>(&esriString));

importFromPCI

OGRErr importFromPCI(const char*, const char* = nullptrconst double* = nullptr)

从 PCI 投影定义导入坐标系

参数:

  • pszProj -- 包含定义的 NULL 终止字符串。看起来像“pppppp Ennn”或“pppppp Dnnn”,其中“pppppp”是投影代码,“Ennn”是椭球体代码,“Dnnn”是基准码。

  • pszUnits -- 网格单位代码(“DEGREE”或“METRE”)。如果将使用空“METRE”。

  • padfPrjParams -- 17 个坐标系参数的数组:

返回: OGRERR_NONE成功或失败时的错误代码

importFromUSGS

OGRErr importFromUSGS(long iProjSys, long iZone, double *padfPrjParams, long iDatum, int nUSGSAngleFormat = USGS_ANGLE_PACKEDDMS)

从 USGS 投影定义导入坐标系

参数:

  • iProjSys -- 输入投影系统代码,用于 GCTP。

  • iZone -- UTM 和美国国家平面投影系统的输入区域。对于南半球UTM,请使用负区域代码。对于所有其他投影,iZone 被忽略。

  • padfPrjParams -- 15 个坐标系参数的数组。对于不同的投影,这些参数会有所不同。

  • iDatum -- 输入椭球体。

  • nUSGSAngleFormat -- USGS_ANGLE_DECIMALDEGREES、USGS_ANGLE_PACKEDDMS 或 USGS_ANGLE_RADIANS 之一(默认值为 USGS_ANGLE_PACKEDDMS)。

返回: OGRERR_NONE成功或失败时的错误代码

    // 定义 USGS 参数
    long iProjSys = 3; // 3 表示 UTM 投影
    long iZone = 10;   // UTM 投影的带号为 10
    double padfPrjParams[7] = {500000.0, 0.0, 0.9996, 0.0, 0.0, 0.0, 0.0}; // UTM 投影的参数
    long iDatum = 6326; // WGS 84 椭球

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

    // 从 USGS 参数中导入空间参考系统
    OGRErr err = srs.importFromUSGS(iProjSys, iZone, padfPrjParams, iDatum);

importFromPanorama

OGRErr importFromPanorama(long, long, long, double*, bool bNorth = true)

从“全景”GIS 投影定义导入坐标系

参数:

  • iProjSys -- 输入投影系统代码,用于 GIS“全景”。

  • iDatum -- 输入坐标系。

  • iEllips -- 输入椭球体。

  • padfPrjParams -- 8 个坐标系参数的数组:

  • bNorth -- 如果北半球为真,则为假。默认值为 true。

返回: OGRERR_NONE成功或失败时的错误代码

    // 定义 Panorama 参数
    long linearUnits = 104; // 线性单位的编号
    long angularUnits = 0;  // 角度单位的编号
    long primeMeridian = 0; // 本初子午线的编号
    double parameters[7] = {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0}; // 参数数组
    bool bNorth = true; // 是否为北半球(默认为 true)

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

    // 从 Panorama 参数中导入空间参考系统
    OGRErr err = srs.importFromPanorama(linearUnits, angularUnits, primeMeridian, parameters, bNorth);

importVertCSFromPanorama

OGRErr importVertCSFromPanorama(int)

从“全景”GIS 投影定义导入垂直坐标系

参数:

iVCS -- 输入垂直坐标系 ID

   // 定义 Panorama 垂直坐标系参数
    int vertCS = 3; // 垂直坐标系编号

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

    // 从 Panorama 垂直坐标系参数中导入垂直坐标系信息
    OGRErr err = srs.importVertCSFromPanorama(vertCS);

importFromXML

OGRErr importFromXMLconst char*)

从 XML 格式导入坐标系(目前仅限 GML)

参数:

pszXML -- 要导入的 XML 字符串

返回: OGRERR_NONE成功或OGRERR_CORRUPT_DATA失败

    // 定义 XML 格式的字符串,表示 WGS 84 经纬度坐标系
    const char* xmlString =
        "<SRS xmlns=\"http://www.opengis.net/gml\"><gml:name>WGS 84</gml:name>"
        "<gml:srsID srsName=\"EPSG:4326\">urn:ogc:def:crs:EPSG::4326</gml:srsID>"
        "<gml:usedBy xlink:href=\"urn:ogc:def:extent-polygon:EPSG::4326\"/>"
        "<gml:usesEllipsoidalCS xlink:href=\"urn:ogc:def:cs:EPSG::6422\"/>"
        "<gml:usesGeodeticDatum xlink:href=\"urn:ogc:def:datum:EPSG::6326\"/>"
        "</SRS>";

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

    // 从 XML 字符串中导入空间参考系统
    OGRErr err = srs.importFromXML(xmlString);

importFromUrl

OGRErr importFromUrlconst char*)

从 URL 设置空间参考

参数:

pszUrl -- 尝试从中推断出 SRS 的文本定义。

返回: 成功时OGRERR_NONE,如果无法下载数据,则显示带有 curl 错误消息的错误代码

    // 定义 URL 地址,表示空间参考系统信息的来源
    const char* url = "http://example.com/srs_info.xml"; // 替换为实际的 URL 地址

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

    // 从 URL 地址中导入空间参考系统
    OGRErr err = srs.importFromUrl(url);

importFromMICoordSys

OGRErr importFromMICoordSysconst char*)

导入地图信息样式坐标系统定义

参数:

pszCoordSys -- Mapinfo style CoordSys definition string.

返回: OGRERR_NONE成功时,OGRERR_FAILURE失败时,OGRERR_UNSUPPORTED_OPERATION MITAB 库是否未链接

    // 定义 MICoordSys 格式的字符串,表示 WGS 84 经纬度坐标系
    const char* miCoordSysString = "CoordSys Earth Projection 1, 104";

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

    // 从 MICoordSys 字符串中导入空间参考系统
    OGRErr err = srs.importFromMICoordSys(miCoordSysString);

EPSGTreatsAsLatLong

int EPSGTreatsAsLatLong() const

如果 EPSG 认为应将此地理坐标系视为具有经度/经度坐标排序,则此方法返回 TRUE

    // 定义一个 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 treatsAsLatLong = srs.EPSGTreatsAsLatLong();
    
    if (treatsAsLatLong) {
        printf("该空间参考系统被视为经纬度坐标系。\n");
    } else {
        printf("该空间参考系统不是经纬度坐标系。\n");
    }

EPSGTreatsAsNorthingEasting

int EPSGTreatsAsNorthingEasting() const

如果 EPSG 认为应将此投影坐标系视为具有北向/东向坐标排序,则此方法返回 TRUE

猜你喜欢

转载自blog.csdn.net/qq_69574549/article/details/132066506