How to download ERA5 data for specific location via python?

1.6k views Asked by At

I want to download ERA5 data for a specific location (for example: North: 34.15, West: -52.28). I don't have coordinates for all directions; north, east, west and south, only north and west. I am trying to download data via api on python. When I change the area for two values (only north and west), I am getting error below: AREA must have 4 values - Error while processing hidden parameters - Some errors reported

How can I download the data directly for the North: 34.15, West: -52.28 geographic location only?

 import cdsapi
    
    c = cdsapi.Client()
    
    c.retrieve(
        'reanalysis-era5-single-levels',
        {
            'product_type': 'reanalysis',
            'variable': 'maximum_individual_wave_height',
            'year': '2019',
            'month': '12',
            'day': [
                '01', '02', '03',
                '04', '05', '06',
                '07', '08', '09',
                '10', '11', '12',
                '13', '14', '15',
                '16', '17', '18',
                '19', '20', '21',
                '22', '23', '24',
                '25', '26', '27',
                '28', '29', '30',
                '31',
            ],
            'time': [
                '00:00', '01:00', '02:00',
                '03:00', '04:00', '05:00',
                '06:00', '07:00', '08:00',
                '09:00', '10:00', '11:00',
                '12:00', '13:00', '14:00',
                '15:00', '16:00', '17:00',
                '18:00', '19:00', '20:00',
                '21:00', '22:00', '23:00',
            ],
            'area': [
                34.15, -52.28, 34.14,
                -52.27,
            ],
            'format': 'netcdf',
        },
        'download.nc')
2

There are 2 answers

0
ClimateUnboxed On

I seem to remember there is a trick that allows this directly, but I can't find it and may have been thinking of the get_point function in the CDS toolbox. In the meantime, you can perhaps get around this by retrieving a small N,W,S,E box around your location, ensuring the sides are at least twice the ERA5 resolution, and then extract the grid cell that contains your location locally using

cdo remapnn,lon/lat download.nc my_location.nc 

If I manage to find the "trick" in the meantime I will update this answer.

0
arnle On

Just provide a variable with lat lon values and duplicate it as such (example with your code + a loop for downloading data from multiple locations):

import cdsapi
    
COORDS = {
        "Location_1":[-35.696,  -63.758], # randomly chosen lat lon 
        "Location_2":[-34.822, -58.536]   # randomly chosen lat lon
        }


c = cdsapi.Client()
    
for station in COORDS:
  station_point_coord = COORDS[station]*2 # duplicate it
  c.retrieve(
      'reanalysis-era5-single-levels',
      {
          'product_type': 'reanalysis',
          'variable': 'maximum_individual_wave_height',
          'year': '2019',
          'month': '12',
          'day': [
              '01', '02', '03',
              '04', '05', '06',
              '07', '08', '09',
              '10', '11', '12',
              '13', '14', '15',
              '16', '17', '18',
              '19', '20', '21',
              '22', '23', '24',
              '25', '26', '27',
              '28', '29', '30',
              '31',
          ],
          'time': [
              '00:00', '01:00', '02:00',
              '03:00', '04:00', '05:00',
              '06:00', '07:00', '08:00',
              '09:00', '10:00', '11:00',
              '12:00', '13:00', '14:00',
              '15:00', '16:00', '17:00',
              '18:00', '19:00', '20:00',
              '21:00', '22:00', '23:00',
          ],
          'area': station_point_coord,
          'format': 'netcdf',
      },
      f'download_{station}.nc')

Check this website for more info on the cdsapi: https://confluence.ecmwf.int/display/COPSRV/CDS+API