...
Local machine
We are going to extract data EFAS reforecast's discharge at locations defined by latitude and longitude coordinates , from EFAS reforecast.
Download upstream area:
from a tiny subset of the GRDC dataset.
Info | ||
---|---|---|
| ||
EFAS data's x and y coordinates are not projected coordinates but matrix indexes (i, j), It is necessary to download the upstream area static file that contains the projected coordinates and replace it in EFAS. |
Download EFAS refiorecast:
Code Block | ||||
---|---|---|---|---|
| ||||
retrieve,
class=ce,
date=2020-10-14,
expver=1,
hdate= 20070304/20070307,#20070304/20070307/20070311/20070314/20070318/20070321/20070325/20070328/20070401/20070404/20070408/20070411/20070415/20070418/20070422/20070425/20070429/20070502/20070506/20070509/20070513/20070516/20070520/20070523/20070527/20070530,
levtype=sfc,
model=lisflood,
number=0/1/2/3/4/5/6/7/8/9/10,
origin=ecmf,
param=240023,
step=0/6/12/18,
stream=efrf,
time=00:00:00,
type=pf,
target="mars_efas_reforecast.grib" | ||||
import cdsapi
c = cdsapi.Client()
c.retrieve(
'efas-reforecast',
{
'format': 'grib',
'product_type': 'ensemble_perturbed_reforecasts',
'variable': 'river_discharge_in_the_last_6_hours',
'model_levels': 'surface_level',
'hyear': '2007',
'hmonth': 'march',
'hday': [
'04', '07',
],
'leadtime_hour': [
'0', '12', '18',
'6',
],
},
'efas_reforecast.grib') |
Copy the content into an empty file named "GRDC.csv", the file should reside in the same folder of the efas_reforecast.grib file and the upstream area.The dataset is a small extract from the GRDC, copy the content into a "GRDC.csv"
Code Block | ||||
---|---|---|---|---|
| ||||
grdc_no,wmo_reg,sub_reg,river,station,country,lat,long,area,altitude 6118010,6,18,CLAIE,SAINT-JEAN-BREVELAY,FR,47.824831,-2.703308,137.0,99.98 6118015,6,18,YVEL,LOYAT (PONT D129),FR,47.993815,-2.368849,315.0,88.26 6118020,6,18,"ARON, RUISSEAU D'",GRAND-FOUGERAY (LA BERNADAISE),FR,47.71222,-1.690835,118.0,68.0 6118025,6,18,"CANUT, RUISSEAU DE",SAINT-JUST (LA RIVIERE COLOMBEL),FR,47.775309,-1.979609,37.0,80.22 6118030,6,18,AFF,PAIMPONT (PONT DU SECRET),FR,47.981631,-2.143762,30.2,119.01 6118050,6,18,COET-ORGAN,QUISTINIC (KERDEC),FR,47.904164,-3.201265,47.7,94.42 6118060,6,18,EVEL,GUENIN,FR,47.899928,-2.975167,316.0,95.16 6118070,6,18,STER-GOZ,BANNALEC (PONT MEYA),FR,47.906833,-3.752172,69.7,85.08 6118080,6,18,MOROS,CONCARNEAU (PONT D22),FR,47.882934,-3.875375,20 |
...
Code Block | ||||||
---|---|---|---|---|---|---|
| ||||||
import xarray as xr import pandas as pd from pyproj import Transformer,CRS parameter = "dis06" ds = xr.open_dataset("mars_efas_reforecast.grib", engine="cfgrib") df = pd.read_csv("GRDC.csv") uparea = xr.open_dataset("ec_uparea4.0.nc") # the upstream area # replace x, y ds["x"] = uparea["x"] ds["y"] = uparea["y"] # define reprojection parameters laea_proj = CRS.from_proj4("+proj=laea +lat_0=52 +lon_0=10 +x_0=4321000 +y_0=3210000 +ellps=GRS80 +units=m +no_defs") transformer = Transformer.from_crs('epsg:4326', laea_proj, always_xy=True) total = len(df) rows = [] count = 0 for lon, lat, id in zip(df.long, df.lat, df.grdc_no): x1, y1 = transformer.transform(lon, lat) extracted = ds.sel(x=x1, y=y1, number = 1, method="nearest")[parameter] df_temp = extracted.drop_vars(["surface", "number"]).to_dataframe().reset_index() df_temp["grdc"] = str(id) df_temp = df_temp.drop("step", axis=1) df_temp = df_temp.set_index(["grdc","time"]) rows.append(df_temp) count += 1 print(f"progress: {count/total*100} %") out = pd.concat(rows) out.to_csv("extracted.csv", index="grdc") |
Code Block | ||||
---|---|---|---|---|
| ||||
grdc,time,y,x,latitude,longitude,valid_time,dis06 6118010,2007-03-04,2827500.0,3372500.0,47.82327782578349,-2.7316459165737292,2007-03-04 00:00:00,9.68457 6118010,2007-03-04,2827500.0,3372500.0,47.82327782578349,-2.7316459165737292,2007-03-04 06:00:00,9.5390625 6118010,2007-03-04,2827500.0,3372500.0,47.82327782578349,-2.7316459165737292,2007-03-04 12:00:00,9.783691 6118010,2007-03-04,2827500.0,3372500.0,47.82327782578349,-2.7316459165737292,2007-03-04 18:00:00,9.83252 6118010,2007-03-07,2827500.0,3372500.0,47.82327782578349,-2.7316459165737292,2007-03-07 00:00:00,11.904785 6118010,2007-03-07,2827500.0,3372500.0,47.82327782578349,-2.7316459165737292,2007-03-07 06:00:00,12.73584 6118010,2007-03-07,2827500.0,3372500.0,47.82327782578349,-2.7316459165737292,2007-03-07 12:00:00,12.832031 6118010,2007-03-07,2827500.0,3372500.0,47.82327782578349,-2.7316459165737292,2007-03-07 18:00:00,13.336914 6118015,2007-03-04,2842500.0,3402500.0,48.001715448932764,-2.3682021184138047,2007-03-04 00:00:00,11.508301 6118015,2007-03-04,2842500.0,3402500.0,48.001715448932764,-2.3682021184138047,2007-03-04 06:00:00,11.17334 6118015,2007-03-04,2842500.0,3402500.0,48.001715448932764,-2.3682021184138047,2007-03-04 12:00:00,11.09082 6118015,2007-03-04,2842500.0,3402500.0,48.001715448932764,-2.3682021184138047,2007-03-04 18:00:00,11.20752 6118015,2007-03-07,2842500.0,3402500.0,48.001715448932764,-2.3682021184138047,2007-03-07 00:00:00,14.920898 6118015,2007-03-07,2842500.0,3402500.0,48.001715448932764,-2.3682021184138047,2007-03-07 06:00:00,15.956055 6118015,2007-03-07,2842500.0,3402500.0,48.001715448932764,-2.3682021184138047,2007-03-07 12:00:00,16.127441 6118015,2007-03-07,2842500.0,3402500.0,48.001715448932764,-2.3682021184138047,2007-03-07 18:00:00,15.900879 6118020,2007-03-04,2802500.0,3447500.0,47.71290346585623,-1.6892419697226784,2007-03-04 00:00:00,13.782227 |
...