Skip to content

Añadir función de descarga de datos de la NOAA #53

@gbellidoprieto

Description

@gbellidoprieto

Estaría bien incluir el código de descarga de los datos de la NOAA. Yo tengo varias funciones que descargan 'waves', 'sea level', y otros parámetros.

Te adjunto la función para descargar el fichero de viento.

def download_waves_forecast(date: str = date.today().strftime('%Y%m%d'),region: list = default_region,p_f: str = p_down_waves,clean: bool = False):
# This function downloads waves forecast data from NOAA database.

# date   - (string) date of the forecast, in format 'yyyymmdd'.
#    p_f    - (str) path to save the data.
# region - (list) Region to load and plot the data.
#         [lat_center, lon_center, lat_range, lon_range].
# clean  - (bool) clean folder before initializing download.

# Returns:
# waves  - (xarray Dataset) waves forecast.


# NOAA u,v 10m wind:
url_base = 'https://nomads.ncep.noaa.gov/dods/gfs_0p25_1hr'
dbn = 'gfs_0p25_1hr'
url = '{0}/gfs{1}/{2}_00z'.format(url_base, date, dbn)

# Prepare folder
if not op.isdir(p_f):
    os.makedirs(p_f)
if clean:
    clean_folder(p_f, '*.nc')

# File path for local storage
p_nm = op.join(p_f, '{0}{1}_00z.nc'.format(dbn, date))

# Check if file exists
if op.isfile(p_nm):
    print(f'File already exists: {p_nm}. Loading from local storage.')
    data = xr.open_dataset(p_nm)
else:
    print(f'Downloading and cropping forecast data from:\n{url}')
    # Crop dataset (simple xarray)
    data = xr.open_dataset(url).sel(
        lat=slice(region[0] - region[2], region[0] + region[2]),
        lon=slice(region[1] - region[3], region[1] + region[3])
    )
    
    data_select = data[['ugrd10m', 'vgrd10m']] # select only wind data


    print(f'Storing local copy at:\n{p_nm}')
    
    # Save the dataset locally
    data_select.to_netcdf(p_nm)
    
    
    
    
    # Crear un nuevo dataset
wind_data_forecast = xr.Dataset(
    {
        "u10": (("time", "lat", "lon"), data.ugrd10m.values),
        "v10": (("time", "lat", "lon"), data.vgrd10m.values)
    },
    coords={
        "time": data.time.values,
        "lat": data.lat.values,
        "lon": data.lon.values,
},
)
wind_data_forecast['time'] = wind_data_forecast.time.dt.round('min')
wind_data_forecast

# Return the dataset
return wind_data_forecast`

Metadata

Metadata

Labels

enhancementNew feature or request

Type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions