WKT、SRID、EPSG概念

之前一直对WKT、EPSG、SRID不是很理解,总是混淆,今天看了一下,清晰了很多,顺便总结一下。

EPSG:European Petroleum Survey Group (EPSG), http://www.epsg.org/,它成立于1986年,并在2005年重组为OGP(Internation Association of Oil & Gas Producers),它负责维护并发布坐标参照系统的数据集参数,以及坐标转换描述,该数据集被广泛接受并使用,通过一个Web发布平台进行分发,同时提供了微软Acess数据库的存储文件,通过SQL 脚本文件,mySQL, Oracle 和PostgreSQL等数据库也可使用。
目前已有的椭球体,投影坐标系等不同组合都对应着不同的ID号,这个号在EPSG中被称为EPSG code,它代表特定的椭球体、单位、地理坐标系或投影坐标系等信息。

SRID:OGC标准中的参数SRID,也是指的空间参考系统的ID,与EPSG一致;
WMS 1.1.1以前用SRS参数(空间参考系)表示坐标系统,WMS1.3开始用CRS参数(坐标参考系统)来表示。

A Spatial Reference System Identifier(SRID) is a unique value used to unambiguously identify projected, unprojected, and local spatial coordinate system definitions. These coordinate systems form the heart of all GIS applications.

Virtually all major spatial vendors have created their own SRID implementation or refer to those of an authority, such as the European Petroleum Survey Group (EPSG). (NOTE: As of 2005 the EPSG SRID values are now maintained by the International Association of Oil & Gas Producers (OGP) Surveying & Positioning Committee).

以OGC请求为例:
http://localhost/IS/WebServices/wms.ashx?map=World&SERVICE=WMS&REQUEST=GetMap&LAYERS=&STYLES=&SRS=EPSG:4326&BBOX=-3,44,10,53&WIDTH=600&HEIGHT=300&FORMAT=image/gif&BGCOLOR=&VERSION=1.1.1

SRS=EPSG:4326代表地理坐标系WGS1984

WKT:空间参考系统的文字描述;
无论是参考椭球、基准面、投影方式、坐标单位等,都有相应 的EPSG值表示:

Beijing 1954地理坐标系,高斯–克吕格投影(横轴等角切圆柱投影)

下面为投影相关信息:
投影方式 Gauss_Kruger
中央经线 75.000000
原点纬线 0.000000
标准纬线(1) 0.000000
标准纬线(2) 0.000000
水平偏移量 13500000.000000
垂直偏移量 0.000000
比例因子 1.000000
方位角 0.000000
第一点经线 0.000000
第二点经线 0.000000
地理坐标系 GCS_Beijing_1954
大地参照系 D_Beijing_1954
参考椭球体 Krasovsky_1940
椭球长半轴 6378245.000000
椭球扁率 0.0033523299
本初子午线 0.000000

WKT形式表示该投影坐标系:
PROJCS[“Gauss_Kruger”,
GEOGCS[“GCS_Beijing_1954”,
DATUM[“D_Beijing_1954”, SPHEROID[“Krasovsky_1940”,6378245.000000,298.299997264589]]
]
PEIMEM[“Greenwich”,0]
UNIT[“degree”,0.0174532925199433]//地理单位:0.0174532925199433代表与米之间的转换
],
PROJECTION[“Gauss_Kruger”],
PARAMETER[“False_Easting”,13500000.000000],
PARAMETER[“False_Northing”,0],
PARAMETER[“Central_Meridian”,75.000000],
PARAMETER[“Scale_Factor”,1.0],
PARAMETER[“Latitude_Of_Origin”,0.0],
UNIT[“Meter”,1.0]] ;
]

最后,我们可以在http://spatialreference.org/查询EPSG等参数的信息!

<think>好的,我需要帮助用户解决如何使用GDAL的C++接口来解析EPSGWKT坐标系。首先,用户可能已经了解GDAL的基本功能,但需要具体的代码示例和步骤。根据用户提供的引用,特别是引用[2]和[5],涉及到EPSG代码、WKT格式以及GDAL的相关函数。 首先,我应该回顾GDAL中处理坐标系的主要类,比如OGRSpatialReference。这个类用于管理空间参考系统,包括地理坐标系和投影坐标系。用户需要解析EPSG对应的WKT,所以可能需要使用ImportFromEPSG方法,如引用[2]提到的EPSG代码的使用。 接下来,代码示例是关键。用户需要看到如何初始化GDAL,创建OGRSpatialReference对象,并导入EPSG代码。然后,如何将WKT字符串导出,这样就能看到解析后的结果。同时,错误处理也很重要,比如检查导入是否成功。 另外,用户可能需要了解如何从现有数据源(如GeoTIFF文件)中获取坐标系信息,比如使用GDALDataset的GetProjectionRef方法,如引用[3]提到的GetGCPSpatialRef函数。不过用户的问题更偏向于直接解析EPSGWKT,所以这部分可能作为扩展内容。 还要注意GDAL的数据集初始化,确保在C++代码中正确注册所有驱动,通常使用GDALAllRegister()。此外,内存管理方面,GDAL会管理OGRSpatialReference对象的内存,但用户需要注意在不再需要时正确释放资源,比如使用OGRSpatialReference::DestroySpatialReference()。 最后,需要确认代码的正确性,比如正确的头文件包含(如gdal.h和ogr_spatialref.h),以及链接正确的GDAL库。可能还需要提到编译时的注意事项,比如使用g++编译时需要指定-lgdal等选项。 总结步骤: 1. 初始化GDAL库。 2. 创建OGRSpatialReference对象。 3. 使用ImportFromEPSG导入指定的EPSG代码。 4. 导出为WKT格式并输出。 5. 错误处理和资源释放。 可能的问题点:用户可能遇到EPSG代码无效的情况,需要检查返回值。另外,导出WKT时可能需要不同的格式选项,比如使用MorphToESRI()来转换为ESRI风格的WKT,但用户问题中没有提到,所以暂时不需要涉及。 现在,将这些步骤转化为具体的C++代码示例,并附上详细解释,确保用户能够理解每个部分的作用。同时,根据用户提供的引用,添加相关的引用标注,如引用[2]关于EPSGWKT的内容,引用[5]关于WKT的结构。</think>### 使用GDAL C++解析EPSG WKT坐标系的实现方法 #### 1. 核心步骤说明 1. **初始化GDAL环境**:注册驱动并配置数据目录(可选) 2. **创建空间参考对象**:`OGRSpatialReference`类管理坐标系定义 3. **导入EPSG编码**:使用`ImportFromEPSG()`方法加载指定坐标系 4. **导出WKT格式**:`exportToWkt()`方法获取标准描述 5. **错误处理**:检查返回值确保操作成功[^2] #### 2. 完整代码示例 ```cpp #include <gdal.h> #include <ogr_spatialref.h> #include <iostream> int main() { // 初始化GDAL库 GDALAllRegister(); // 创建空间参考对象 OGRSpatialReference oSRS; // 导入EPSG:4326(WGS84地理坐标系) OGRAxisMappingStrategy strategy = OAMS_TRADITIONAL_GIS_ORDER; // 指定坐标轴顺序 oSRS.SetAxisMappingStrategy(strategy); if (oSRS.ImportFromEPSG(4326) != OGRERR_NONE) { std::cerr << "EPSG导入失败" << std::endl; return 1; } // 导出WKT格式 char* pszWKT = nullptr; if (oSRS.exportToWkt(&pszWKT) != OGRERR_NONE) { std::cerr << "WKT导出失败" << std::endl; return 1; } // 输出结果 std::cout << "EPSG:4326的WKT定义:\n" << pszWKT << std::endl; // 释放内存 CPLFree(pszWKT); return 0; } ``` #### 3. 关键代码解析 - **`GDALAllRegister()`**:初始化GDAL/OGR驱动注册表,必须最先调用 - **`SetAxisMappingStrategy(OAMS_TRADITIONAL_GIS_ORDER)`**:确保坐标轴顺序为经度在前(GIS传统顺序)[^5] - **`ImportFromEPSG(4326)`**:通过EPSG编码加载坐标系定义,返回`OGRERR_NONE`表示成功 - **`exportToWkt()`**:输出符合OGC标准的WKT字符串,需使用`CPLFree()`释放内存 #### 4. 扩展应用场景 ```cpp // 从GeoTIFF文件读取坐标系 GDALDataset* poDataset = (GDALDataset*)GDALOpen("input.tif", GA_ReadOnly); const char* wktFromFile = poDataset->GetProjectionRef(); // 比较两个坐标系是否相同 OGRSpatialReference oSRS_file; oSRS_file.ImportFromWkt(wktFromFile); if (oSRS.IsSame(&oSRS_file)) { std::cout << "坐标系一致" << std::endl; } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值