Получение данных для определенного местоположения из файла GRIB - PullRequest
1 голос
/ 28 марта 2019

Я хочу извлечь данные из файла GRIB, предоставленного из ECMWF, для определенного местоположения, используя R.

На данный момент я могу получить данные и экспортировать их в .csv, но местоположение кажетсянеправильно.Я пытаюсь получить его для юга Ирландии (широта / долгота около 50 / -8).

Когда я читаю файл GRIB в ArcGIS, данные, извлеченные из R, не совпадают с увиденнымив ГИС, поэтому я предполагаю, что я что-то не так с координатами.

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

Ответы [ 2 ]

2 голосов
/ 28 марта 2019

Каждый раз, когда я имею дело с файлами grib, я предпочитаю конвертировать их в netCDF с помощью cdo (cdo -f nc copy infile.grib outfile.nc). Затем вы можете использовать пакет raster в R. У меня были проблемы с файлами grib и растровым пакетом в R до этого.

0 голосов
/ 08 мая 2019

Вы также можете извлечь значение для определенного местоположения непосредственно из файла grib с помощью сопоставления ближайшего соседа CDO с помощью оператора местоположения lon / lat:

cdo remapnn,lon=X/lat=Y input.grb point.grb

Если вы предпочитаете вывод в формате netcdf, вы можете передать ответ в команду копирования, используя опцию -f format:

cdo -f nc copy -remapnn,lon=X/lat=Y input.grb point.nc
...