我想使用R从ECMWF提供的GRIB文件中提取特定位置的数据。
目前,我能够获取数据并将其导出到.csv,但位置似乎不对。 我正在尝试将它带到爱尔兰南部(纬度/经度大约为50 / -8)。
当我在ArcGIS中读取GRIB文件时,从R中提取的数据与GIS中看到的数据不匹配,因此我认为我对坐标做错了。
library(raster)
library(tidyverse)
library(lubridate)
s.area <- extent(c(-10.0,-8.5,51.0,51.5))
s.area@xmin <- s.area@xmin + 180
s.area@xmax <- s.area@xmax + 180
output_as_csv <- function(x, ext, var_name="wave_period", start_date,
output_filename) {
x.out <- data.frame(lon=NA, lat=NA, var_name=NA, date_time=NA)
x.out <- x.out[FALSE,]
for(i in 1:nlayers(x)) {
x.temp <- x[[i]] %>%
crop(ext) %>%
rasterToPoints() %>%
as.data.frame() %>%
mutate(date_time=start_date + hours(i) - hours(1),
lat=x - 180,
lon=y) %>%
dplyr::select(-x, -y)
names(x.temp)[1] <- var_name
x.out <- rbind(x.out, x.temp)
}
x.out <- x.out %>%
unite(lon_lat, lon, lat, remove=TRUE) %>%
spread(lon_lat, var_name)
write.csv(x.out, output_filename, row.names=FALSE)
}
output_as_csv(x=s, ext=s.area, start_date=start.date, output_filename="Wave period.csv")
答案 0 :(得分:2)
每次处理grib文件时,我都希望使用cdo(cdo -f nc copy infile.grib outfile.nc)
将它们转换为netCDF。然后您可以使用R中的raster
包。我在处理grib文件和R之前的光栅包。
答案 1 :(得分:0)
您还可以直接从grib文件中提取特定位置的值,并使用lon / lat位置运算符重新映射CDO最近的邻居:
cdo remapnn,lon=X/lat=Y input.grb point.grb
如果您希望使用netcdf格式的输出,则可以使用-f format选项将答案通过管道传递给copy命令:
cdo -f nc copy -remapnn,lon=X/lat=Y input.grb point.nc