-
Notifications
You must be signed in to change notification settings - Fork 10
Labels
enhancementNew feature or requestNew feature or request
Description
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
Assignees
Labels
enhancementNew feature or requestNew feature or request