Skip to content

Commit

Permalink
Merge pull request #182 from ArtesiaWater/meteobase
Browse files Browse the repository at this point in the history
Small fixes to Meteobase
  • Loading branch information
martinvonk authored May 25, 2023
2 parents 8cbda23 + a1e79e2 commit ea654a7
Showing 1 changed file with 31 additions and 5 deletions.
36 changes: 31 additions & 5 deletions nlmod/read/meteobase.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@

import numpy as np
from pandas import Timestamp
import rioxarray # noqa # pylint: disable=unused-import
from xarray import DataArray


Expand Down Expand Up @@ -177,7 +178,7 @@ def get_xy_from_ascii_meta(


def read_meteobase_ascii(
zfile: ZipFile, foldername: str, meta: Dict[str, str]
zfile: ZipFile, foldername: str, meta: Dict[str, str], replace_na: bool = False
) -> DataArray:
"""Read list of .asc files in a meteobase zipfile.
Expand All @@ -189,20 +190,26 @@ def read_meteobase_ascii(
foldername where specific observation type is stored
meta : Dict[str, str]
relevant metadata for DataArray
replace_na : bool
replace nodata_value with numpy.nan
Returns
-------
DataArray
"""
fnames = [x for x in zfile.namelist() if f"{foldername}/" in x]
fnames = [
x
for x in zfile.namelist()
if f"{foldername}/" in x and x.upper().endswith(".ASC")
]
if meta["Bestandsformaat"] == ".ASC (Arc/Info-raster)":
times = []
for i, fname in enumerate(fnames):
data_array = None
with zfile.open(fname) as fo:
data, ascii_meta = read_ascii(fo)
if data_array is None:
meta = meta | ascii_meta
meta.update(ascii_meta)
data_array = np.zeros(
shape=(len(fnames), ascii_meta["nrows"], ascii_meta["ncols"]),
dtype=float,
Expand All @@ -211,6 +218,12 @@ def read_meteobase_ascii(

times.append(get_timestamp_from_fname(fname))

if "Eenheid gegevens" in meta.keys():
meta["units"] = meta["Eenheid gegevens"]

if "nodata_value" in meta.keys() and replace_na:
data_array[data_array == meta["nodata_value"]] = np.nan

x, y = get_xy_from_ascii_meta(ascii_meta)

da = DataArray(
Expand All @@ -224,14 +237,17 @@ def read_meteobase_ascii(
attrs=meta,
name=foldername,
)

return da

else:
raise ValueError(f"Can't read bestandsformaat '{meta['Bestandsformaat']}'")


def read_meteobase(
path: Union[Path, str], meteobase_type: Optional[str] = None
path: Union[Path, str],
meteobase_type: Optional[str] = None,
replace_na: bool = False,
) -> List[DataArray]:
"""Read Meteobase zipfile with ASCII data.
Expand All @@ -243,6 +259,8 @@ def read_meteobase(
Must be one of 'NEERSLAG', 'MAKKINK', 'PENMAN', 'EVAPOTRANSPIRATIE',
'VERDAMPINGSTEKORT', by default None which reads all data from the
zipfile.
replace_na : bool
replace nodata_value with numpy.nan
Returns
-------
Expand All @@ -258,7 +276,15 @@ def read_meteobase(

da_list = []
for mb_type in meteo_basetype:
da = read_meteobase_ascii(zfile, mb_type.upper(), meta[mb_type.upper()])
da = read_meteobase_ascii(
zfile, mb_type.upper(), meta[mb_type.upper()], replace_na=replace_na
)
if "Projectie" in meta[mb_type.upper()].keys():
if (
meta[mb_type.upper()]["Projectie"]
== "RD new (Amersfoort, rijksdriehoekstelsel)"
):
da.rio.write_crs("EPSG:28992", inplace=True)
da_list.append(da)

return da_list

0 comments on commit ea654a7

Please sign in to comment.