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

28 篇文章 13 订阅

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 importFromProj4(const 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 importFromXML(const 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 importFromUrl(const 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 importFromMICoordSys(const 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

 

 

 

 

 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

场主不吃鍋巴

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值