OGRSpatialReference 是 GDAL/OGR 库中的一个重要类,用于管理和操作地理空间数据的空间参考系统(Spatial Reference System,SRS)。它提供了一系列功能,允许用户定义、查询、解析和转换地理空间数据的坐标系统和投影信息
Public Functions
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(&wkt));
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);
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);
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(&esriString));
OGRErr importFromPCI(const char*, const char* = nullptr, const double* = nullptr)
从 PCI 投影定义导入坐标系
参数:
pszProj -- 包含定义的 NULL 终止字符串。看起来像“pppppp Ennn”或“pppppp Dnnn”,其中“pppppp”是投影代码,“Ennn”是椭球体代码,“Dnnn”是基准码。
pszUnits -- 网格单位代码(“DEGREE”或“METRE”)。如果将使用空“METRE”。
padfPrjParams -- 17 个坐标系参数的数组:
返回: OGRERR_NONE成功或失败时的错误代码
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);
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);
OGRErr importVertCSFromPanorama(int)
从“全景”GIS 投影定义导入垂直坐标系
参数:
iVCS -- 输入垂直坐标系 ID
// 定义 Panorama 垂直坐标系参数
int vertCS = 3; // 垂直坐标系编号
// 创建一个空的 OGRSpatialReference 对象
OGRSpatialReference srs;
// 从 Panorama 垂直坐标系参数中导入垂直坐标系信息
OGRErr err = srs.importVertCSFromPanorama(vertCS);
OGRErr importFromXML(const char*)
从 XML 格式导入坐标系(目前仅限 GML)
参数:
pszXML -- 要导入的 XML 字符串
返回: OGRERR_NONE成功或OGRERR_CORRUPT_DATA失败
// 定义 XML 格式的字符串,表示 WGS 84 经纬度坐标系
const char* xmlString =
"WGS 84 "
"urn:ogc:def:crs:EPSG::4326 "
""
""
""
" ";
// 创建一个空的 OGRSpatialReference 对象
OGRSpatialReference srs;
// 从 XML 字符串中导入空间参考系统
OGRErr err = srs.importFromXML(xmlString);
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);
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);
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");
}
int EPSGTreatsAsNorthingEasting() const
如果 EPSG 认为应将此投影坐标系视为具有北向/东向坐标排序,则此方法返回 TRUE