R语言 .asc转换为.tif文件(光栅)

dced5bon  于 2023-02-26  发布在  其他
关注(0)|答案(1)|浏览(365)

我不熟悉. asc文件,尝试将其转换为栅格。Extended Reconstructed Sea Surface Temperature (ERSST) dataset是从ERSST repo下载的
数据集的自述文件中包含一些信息:

filename convention:

(1) ERSST 

ersst.VERSION.yyyy.asc
yyyy=year

Units: isst=100 degree C
Missing value=-9999

(2) grid information
latitude: -88.0, increase northward per 2 degree, to +88.0
longitude:  0.0, increase eastward per 2 degree, to 358.0

以下是我的尝试:

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")

a<- terra::rast(f)
plot(a)

例如,使用a=terra::rast(f)plot(a)时,我收到警告消息:

1: Failed to read scanline 672. (GDAL error 3) 
2: ersst.v5.1854.asc, band 1: IReadBlock failed at X offset 0, Y offset 672: Failed to read scanline 672. (GDAL error 1) 
3: [plot] SpatRaster has no cell values

不确定是否与投影系统有关。如果是这样,我应该为这个全局数据集使用哪个投影引用?

yfjy0ee7

yfjy0ee71#

asc数据使用了非标准格式,如果您必须读取的话,它会非常容易,但是在这种情况下,您可以使用NetCDF文件来代替;那就简单多了
下载示例文件

url <- "https://www.ncei.noaa.gov/pub/data/cmb/ersst/v5/netcdf/ersst.v5.185401.nc"
f <- basename(url)
download.file(url, f, mode="wb")

将其作为散布栅格打开

library(terra)
x <- rast(f)
x
#class       : SpatRaster 
#dimensions  : 89, 180, 2  (nrow, ncol, nlyr)
#resolution  : 2, 2  (x, y)
#extent      : -1, 359, -89, 89  (xmin, xmax, ymin, ymax)
#coord. ref. : lon/lat WGS 84 
#sources     : ersst.v5.185401.nc:sst  
#              ersst.v5.185401.nc:ssta  
#varnames    : sst (Extended reconstructed sea surface temperature) 
#              ssta (Extended reconstructed SST anomalies) 
#names       : sst_lev=0, ssta_lev=0 
#unit        :  degree_C,   degree_C 
#time (raw)  : 0

注意经度从-1到359。您可以使用rotate获取更多的标准经度;你可以同时把它写到一个GeoTiff上。

rotate(x, filename="ersst.v5.185401.tif")

#class       : SpatRaster 
#dimensions  : 89, 180, 2  (nrow, ncol, nlyr)
#resolution  : 2, 2  (x, y)
#extent      : -181, 179, -89, 89  (xmin, xmax, ymin, ymax)
#coord. ref. : lon/lat WGS 84 
#source      : ersst.v5.185401.tif 
#names       : sst_lev=0, ssta_lev=0 
#min values  :  -1.80000,  -4.958618 
#max values  :  32.09937,   2.676313 
#time (raw)  : 0

但是请注意,它仍然不是它应该是的样子(-180,180),您可以使用resample来修复它。

相关问题