You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在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.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 21:10:35