在R中用sp、terra、raster包将阿尔伯斯等面积投影转经纬度
从AEA投影转换为经纬度(WGS84)的解决方法
先明确:AEA(阿尔伯斯等面积)投影不需要UTM那样的zone编号,它依赖中央经线、标准纬线等核心参数。既然terra已经识别出你的数据是AEA_WGS_1984,直接基于这个信息处理即可。
第一步:获取准确的原投影参数
用terra加载文件后,直接提取完整的CRS信息,这是最可靠的来源:
library(terra) r <- rast("2017001D.tif") # 打印完整的PROJ投影字符串 cat(crs(r))
输出内容会包含AEA投影的所有关键参数,比如常见格式:+proj=aea +lat_0=0 +lon_0=105 +lat_1=25 +lat_2=47 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs
第二步:用sp包完成坐标转换
如果你的数据是RasterLayer类,先转成sp支持的Spatial对象,再执行转换:
方式1:复用terra识别的CRS
library(sp) library(raster) # 加载raster对象并设置正确CRS r_raster <- raster("2017001D.tif") # 把terra识别的CRS赋值给raster对象 crs(r_raster) <- crs(r) # 转换为SpatialPixelsDataFrame sp_obj <- as(r_raster, "SpatialPixelsDataFrame") # 定义目标经纬度CRS(WGS84,EPSG:4326) target_crs <- CRS("+init=epsg:4326") # 也可以用PROJ字符串替代:target_crs <- CRS("+proj=longlat +datum=WGS84 +no_defs") # 执行投影转换 sp_obj_wgs84 <- spTransform(sp_obj, target_crs) # 提取经纬度坐标 coords <- coordinates(sp_obj_wgs84)
方式2:手动指定AEA参数(当terra识别不完整时)
如果打印的CRS参数缺失,可根据研究区域补充常用的WGS84 Albers参数(比如中国区域常用中央经线105°,标准纬线25°和47°):
# 手动设置原数据的CRS aea_crs <- CRS("+proj=aea +lat_0=0 +lon_0=105 +lat_1=25 +lat_2=47 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs") crs(r_raster) <- aea_crs # 后续步骤和方式1一致 sp_obj <- as(r_raster, "SpatialPixelsDataFrame") sp_obj_wgs84 <- spTransform(sp_obj, CRS("+init=epsg:4326")) coords <- coordinates(sp_obj_wgs84)
注意事项
- 优先使用terra读取的CRS参数,这是从tif文件元数据中直接获取的,准确性最高。
- EPSG:4326是WGS84经纬度的标准编码,和对应的PROJ字符串功能完全一致。
- 如果转换后坐标明显不合理,检查原投影的中央经线、标准纬线是否与你的研究区域匹配。
内容的提问来源于stack exchange,提问作者T.L.
相关产品推荐
相关产品推荐

