Está en la página 1de 5

#----------------------------------------------------------------------------------

-----------------------------------
# Name: cigom_test.py
# Purpose: Script para descarga de información desde el Servidor OPeNDAP de NOAA
#
# Author: Rubersy Ramos García
#
# Created: 04/09/2021
#
# NOTA 1: véase path_base (por defecto path_base =
"C:/Users/root/Desktop/CIGOM/Output")

# NOTA 2: falta la sección de código para realizar las descargas para cada uno
de los incrementos de 3 horas,
# por ahora solo se realiza la descarga para el último incremento:
(sufix_hours[32] ='00_00960000.nc')
#----------------------------------------------------------------------------------
------------------------------------

#Importar librerias que se utilizarán


#-------------------------------------------
import pandas as pd
from pandas.core.indexes.datetimes import date_range
import xarray as xr
import os
import numpy as np
import datetime
import netCDF4
from netCDF4 import Dataset

#Construir la URL de descarga del dataset


#--------------------------------------------
date = datetime.date.today().strftime("%Y%m%d")

url_base =
"https://www.ncei.noaa.gov/thredds-coastal/dodsC/amseas/amseas_20201218_to_current/
"

url_today = url_base + str(date)

sufix_hours = ('00_00000000.nc', '00_00030000.nc', '00_00060000.nc',


'00_00090000.nc', '00_00120000.nc', '00_00150000.nc', '00_00180000.nc',
'00_00210000.nc', '00_00240000.nc', '00_00270000.nc', '00_00300000.ncv',
'00_00330000.nc', '00_00360000.nc', '00_00390000.nc', '00_00420000.nc',
'00_00450000.nc', '00_00480000.nc', '00_00510000.nc', '00_00540000.nc',
'00_00570000.nc', '00_00600000.nc', '00_00630000.nc', '00_00660000.nc',
'00_00690000.nc', '00_00720000.nc', '00_00750000.nc', '00_00780000.nc',
'00_00810000.nc', '00_00840000.nc', '00_00870000.nc', '00_00900000.nc',
'00_00930000.nc', '00_00960000.nc')

sufix = "/coamps_ncom_amseas_u_1_" + str(date) + sufix_hours[32]

#url_today_last = url_today + sufix

url_today_last =
"C:/Users/root/Desktop/CIGOM/coamps_ncom_amseas_u_1_2021090300_00960000.nc"
#Realizar la descarga de los datos del dataset
#---------------------------------------------------------------------------------
print("----------------------------------------------------------------------------
-----------------------------------")
print("Descargando datos desde el Servidor OPeNDAP de NOAA...")
print("Catálogo:
https://www.ncei.noaa.gov/thredds-coastal/catalog/amseas/amseas_20201218_to_current
/catalog.html")
print("----------------------------------------------------------------------------
-----------------------------------")

dataset = Dataset(url_today_last, mode = "r")

#print("----------------------TESTEO-----------------------------")
#Imprimir formato y dimensiones del dataset
#-------------------------------------------
#print(dataset.file_format)
#print(dataset.dimensions.keys())

#Imprimir variables de interés


#-----------------------------------
#print(dataset.variables.keys())
#print(dataset.variables["water_u"])
#print(dataset.variables["water_v"])
#print(dataset.variables["lon"])
#print(dataset.variables["lat"])
#print(dataset.variables["depth"])
#print(dataset.variables["time"])
#print(dataset.variables["water_u"][:])
#print(dataset.variables["water_v"][:])
#------------------------------------------------------------------

#Realizar copia de los datos de las variables de interés


#---------------------------------------------------------
all_vars = list(dataset.variables.keys())
water_u_data = dataset.variables["water_u"][:]
water_v_data = dataset.variables["water_v"][:]
lon_data = dataset.variables["lon"][:]
lat_data = dataset.variables["lat"][:]
depth_data = dataset.variables["depth"][:]
time_data = dataset.variables["time"][:]

#print("----------------------TESTEO-----------------------------")
#print(all_vars)
#print(lon_data)
#print(lat_data)
#print(depth_data)
#print(time_data)
#print(water_u_data)
#print(water_v_data)
#-----------------------------------------------------------------

#Crear fichero de salida personalizado


#------------------------------------------
#definir el camino donde se almacenará el dataset de salida
path_base = "C:/Users/root/Desktop/CIGOM/Output"
path_today_last = path_base + sufix
dataset_out=Dataset(path_today_last, mode="w", format="NETCDF4_CLASSIC")

#Crear dimensiones del fichero de salida


#------------------------------------------
dataset_out.createDimension("lon",len(lon_data) )
dataset_out.createDimension("lat",len(lat_data))
dataset_out.createDimension("depth",len(depth_data))
dataset_out.createDimension("time",None)

#Crear variables del fichero de salida


#-----------------------------------------
lon = dataset_out.createVariable("lon",np.float64,("lon",))
lat = dataset_out.createVariable("lat",np.float64,("lat",))
depth = dataset_out.createVariable("depth",np.float64,("depth",))
time = dataset_out.createVariable("time",np.float64,("time",))
water_u = dataset_out.createVariable("water_u",np.int16,
("time","depth","lat","lon",),fill_value=-32768)
water_v = dataset_out.createVariable("water_v",np.int16,
("time","depth","lat","lon",),fill_value=-32768)

#Copiar los atributos de las variables desde el dataset de entrada


#------------------------------------------------------------------
lon_attrib = dataset.variables["lon"].ncattrs()
for attr in lon_attrib:
value = dataset.variables['lon'].getncattr(attr)
dataset_out.variables["lon"].setncattr(attr, value )

lat_attrib = dataset.variables["lat"].ncattrs()
for attr in lat_attrib:
value = dataset.variables['lat'].getncattr(attr)
dataset_out.variables["lat"].setncattr(attr, value )

depth_attrib = dataset.variables["depth"].ncattrs()
for attr in depth_attrib:
value = dataset.variables['depth'].getncattr(attr)
dataset_out.variables["depth"].setncattr(attr, value )

time_attrib = dataset.variables["time"].ncattrs()
for attr in time_attrib:
value = dataset.variables['time'].getncattr(attr)
dataset_out.variables["time"].setncattr(attr, value )

water_u_attrib = dataset.variables["water_u"].ncattrs()
for attr in water_u_attrib:
if attr != "_FillValue":
value = dataset.variables['water_u'].getncattr(attr)
dataset_out.variables["water_u"].setncattr(attr, value )

water_v_attrib = dataset.variables["water_v"].ncattrs()
for attr in water_v_attrib:
if attr != "_FillValue":
value = dataset.variables['water_v'].getncattr(attr)
dataset_out.variables["water_v"].setncattr(attr, value )

#Copiar los atributos globales desde el dataset de entrada


#------------------------------------------------------------------
global_attrib = dataset.ncattrs()
for attr in global_attrib:
value = dataset.getncattr(attr)
dataset_out.setncattr(attr, value )

#Crear nuevos atributos para las variables


#----------------------------------------------
lon.axis = "X"
lon.standard_name = "longitude"
lat.axis = "Y"
lat.standard_name = "latitude"
depth.axis = "Z"
depth.standard_name = "depth"
time.axis = "T"
water_u.standard_name = "x_sea_water_velocity"
water_v.standard_name = "y_sea_water_velocity"

#Asignar valores a las variables del dataset de salida


#----------------------------------------------------------
time[:] = time_data[:]
depth[:] = depth_data[:]
lat[:] = lat_data[:]
lon[:] = lon_data[:]
water_u[:] = water_u_data[:]
water_v[:] = water_v_data[:]

#print("----------------------TESTEO-----------------------------")
#print(dataset_out.variables["time"][:])
#print(dataset_out.variables["depth"][:])
#print(dataset_out.variables["lat"][:])
#print(dataset_out.variables["lon"][:])
#print(dataset_out.variables["water_u"][:])
#print(dataset_out.variables["water_u"])
#print(dataset_out.variables["water_v"][:])

#print(time_attrib)
#print(depth_attrib)
#print(lat_attrib)
#print(lon_attrib)
#print(water_u_attrib)
#print(water_v_attrib)

#print(dataset_out.variables["time"].ncattrs())
#print(dataset_out.variables["depth"].ncattrs())
#print(dataset_out.variables["lat"].ncattrs())
#print(dataset_out.variables["lon"].ncattrs())
#print(dataset_out.variables["water_u"].ncattrs())
#print(dataset_out.variables["water_v"].ncattrs())
#------------------------------------------------------------------
#Cierre de los dataset
#------------------------------------------
dataset.close()
dataset_out.close()

#Notificaciones
#------------------------------------------
print("Los datos de las variables fueron importados correctamente y estan
disponibles en:")
print(path_today_last)
print("----------------------------------------------------------------------------
-----------------------------------")

También podría gustarte