.asc转.tif栅格失败求助:ERSST数据集转换报错及投影疑问
解决ERSST ASCII文件转栅格的问题
问题根源
你遇到的错误不是投影问题,而是这个ERSST的.asc文件并非标准的ESRI ASCII栅格格式——它没有标准ASC文件必需的头信息(比如ncols、nrows、cellsize等),只有纯数值数据,所以terra::rast调用GDAL读取时会解析失败。
解决方案
根据README里的网格信息,我们可以手动构建栅格:
- 计算行列数:
- 纬度范围-88°到88°,步长2°,共
(88 - (-88))/2 + 1 = 89行 - 经度范围0°到358°,步长2°,共
(358 - 0)/2 + 1 = 180列
- 纬度范围-88°到88°,步长2°,共
- 读取纯数据并转换为栅格,手动设置地理参数
完整R代码
library(terra) # 下载文件 url <- "https://www.ncei.noaa.gov/pub/data/cmb/ersst/v5/ascii/ersst.v5.1854.asc" f <- basename(url) download.file(url, f, mode="wb") # 读取纯数据,处理缺失值 data <- scan(f, na.strings = "-9999") # 转换为矩阵并调整行列顺序匹配地理方向 mat <- matrix(data, ncol=180, byrow=TRUE) mat <- t(mat) mat <- mat[, ncol(mat):1] # 创建SpatRaster并设置地理属性 r <- rast(mat) ext(r) <- c(0, 360, -88, 88) res(r) <- c(2, 2) # 设置标准经纬度投影WGS84 crs(r) <- "EPSG:4326" # 转换单位:原始数据是100×℃,需除以100 r <- r / 100 # 绘图验证 plot(r, main="1854年ERSST海表温度")
关于投影的说明
这个全球海温数据集是经纬度地理坐标,最适合用WGS84(EPSG:4326)投影,这也是大多数全球气候数据集的默认投影。如果需要和其他NOAA数据集匹配,也可以使用NAD83(EPSG:4269),两者差异极小,对全球尺度数据几乎没有影响。
内容的提问来源于stack exchange,提问作者Pengcheng Lai
相关产品推荐
相关产品推荐

