Source code for pastas.read.dinoloket

"""This file contains the classes that can be used to import groundwater level
data from dinoloket.nl.

TODO: Get rid of filternummer en opmerking in self.series
"""

import warnings


import numpy as np
from pandas import Series, read_csv

from ..timeseries import TimeSeries


[docs]def read_dino(fname, variable='Stand_cm_tov_NAP', factor=0.01): """This method can be used to import files from Dinoloket that contain groundwater level measurements (https://www.dinoloket.nl/) Parameters ---------- variable factor fname: str Filename and path to a Dino file. Returns ------- ts: pastas.TimeSeries returns a Pastas TimeSeries object or a list of objects. """ warnings.warn("The read module of pastas is deprecated please use hydropandas instead -> https://hydropandas.readthedocs.io", DeprecationWarning) # Read the file dino = DinoGrondwaterstand(fname) ts = [] if variable not in dino.data.keys(): raise ( ValueError("variable %s is not in this dataset. Please use one of " "the following keys: %s" % ( variable, dino.data.keys()))) series = dino.data[variable] * factor # To make it meters) if len(dino.meta) > 0: metadata = dino.meta[-1] else: metadata = None metadata['x'] = dino.x metadata['y'] = dino.y metadata['z'] = np.mean((dino.bovenkant_filter, dino.onderkant_filter)) metadata['projection'] = 'epsg:28992' ts.append(TimeSeries(series, name=dino.locatie + '_' + str(dino.filternummer), metadata=metadata, settings='oseries')) if len(ts) == 1: ts = ts[0] return ts
[docs]def read_dino_level_gauge(fname, variable='Stand_cm_tov_NAP', factor=0.01): """This method can be used to import files from Dinoloket that contain surface water level measurements (https://www.dinoloket.nl/) Parameters ---------- fname: str filename and path to a Dino file. variable : str, optional name of the variable to read, default is 'Stand_cm_tov_NAP' factor : float, optional multiply values by factor (usually for conversion to m), default is 0.01 Returns ------- ts: pastas.TimeSeries returns a Pastas TimeSeries object or a list of objects. """ warnings.warn("The read module of pastas is deprecated please use hydropandas instead -> https://hydropandas.readthedocs.io", DeprecationWarning) # Read the file dino = DinoPeilschaal(fname) ts = [] if variable not in dino.data.keys(): raise ( ValueError("variable %s is not in this dataset. Please use one of " "the following keys: %s" % ( variable, dino.data.keys()))) series = dino.data[variable] * factor # To make it meters) if len(dino.meta) > 0: metadata = dino.meta[-1] else: metadata = None metadata['x'] = dino.x metadata['y'] = dino.y metadata['z'] = np.nan metadata['projection'] = 'epsg:28992' ts.append(TimeSeries(series, name=dino.locatie, metadata=metadata, settings='oseries')) if len(ts) == 1: ts = ts[0] return ts
class DinoGrondwaterstand: def __init__(self, fname): warnings.warn("The read module of pastas is deprecated please use hydropandas instead -> https://hydropandas.readthedocs.io", DeprecationWarning) with open(fname, 'r') as f: # lees de header line = f.readline() header = dict() while line not in ['\n', '', '\r\n']: propval = line.split(',') prop = propval[0] prop = prop.replace(':', '') prop = prop.strip() val = propval[1] if propval[2] != '': val = val + ' ' + propval[2].replace(':', '') + ' ' + \ propval[3] header[prop] = val line = f.readline() # lees gat while (line == '\n') or (line == '\r\n'): line = f.readline() # lees referentieniveaus ref = dict() while line not in ['\n', '', '\r\n']: propval = line.split(',') prop = propval[0] prop = prop.replace(':', '') prop = prop.strip() if len(propval) > 1: val = propval[1] ref[prop] = val line = f.readline() # lees gat while (line == '\n') or (line == '\r\n'): line = f.readline() # lees meta-informatie metaList = list() line = line.strip() properties = line.split(',') line = f.readline() while line not in ['\n', '', '\r\n']: meta = dict() line = line.strip() values = line.split(',') for i, value in enumerate(values): meta[properties[i]] = value metaList.append(meta) line = f.readline() # lees gat while (line == '\n') or (line == '\r\n'): line = f.readline() line = line.strip() titel = line.split(',') while '' in titel: titel.remove('') # lees reeksen if line != '': # Validate if titles are valid names validator = np.lib._iotools.NameValidator() titel = validator(titel) dtype = [np.float64] * (len(titel)) dtype[0] = "S11" dtype[1] = np.int32 dtype[2] = "S10" dtype[titel.index('Bijzonderheid')] = object dtype[titel.index('Opmerking')] = object dtype = list(zip(titel, dtype)) usecols = range(0, len(titel)) # # usecols.remove(2) measurements = read_csv(f, header=None, names=titel, parse_dates=['Peildatum'], index_col='Peildatum', dayfirst=True, usecols=usecols) ts = measurements['Stand_cm_tov_NAP'] else: measurements = None ts = Series() # %% kies welke invoer opgeslagen wordt self.meta = metaList if self.meta: self.locatie = self.meta[-1]['Locatie'] self.filternummer = int(float(self.meta[-1]['Filternummer'])) self.x = float(self.meta[-1]['X-coordinaat']) self.y = float(self.meta[-1]['Y-coordinaat']) meetpunt = self.meta[-1]['Meetpunt (cm t.o.v. NAP)'] if meetpunt == '': self.meetpunt = np.nan else: self.meetpunt = float(meetpunt) / 100 maaiveld = self.meta[-1]['Maaiveld (cm t.o.v. NAP)'] if maaiveld == '': self.maaiveld = np.nan else: self.maaiveld = float(maaiveld) / 100 bovenkant_filter = self.meta[-1][ 'Bovenkant filter (cm t.o.v. NAP)'] if bovenkant_filter == '': self.bovenkant_filter = np.nan else: self.bovenkant_filter = float(bovenkant_filter) / 100 self.onderkant_filter = self.meta[-1][ 'Onderkant filter (cm t.o.v. NAP)'] if self.onderkant_filter == '': self.onderkant_filter = np.nan else: self.onderkant_filter = float(self.onderkant_filter) / 100 else: # de metadata is leeg self.locatie = '' self.filternummer = np.nan self.x = np.nan self.y = np.nan self.meetpunt = np.nan self.maaiveld = np.nan self.bovenkant_filter = np.nan self.onderkant_filter = np.nan self.data = measurements self.stand = ts f.close() class DinoPeilschaal: def __init__(self, fname): warnings.warn("The read module of pastas is deprecated please use hydropandas instead -> https://hydropandas.readthedocs.io", DeprecationWarning) with open(fname, 'r') as f: # lees de header line = f.readline() header = dict() while line not in ['\n', '', '\r\n']: propval = line.split(',') prop = propval[0] prop = prop.replace(':', '') prop = prop.strip() val = propval[1] if (len(propval) > 2) and (propval[2] != ''): val = val + ' ' + propval[2].replace(':', '') + ' ' + \ propval[3] header[prop] = val line = f.readline() # lees gat while (line == '\n') or (line == '\r\n'): line = f.readline() # lees gat while (line == '\n') or (line == '\r\n'): line = f.readline() # lees meta-informatie metaList = list() line = line.strip() properties = line.split(',') line = f.readline() while line not in ['\n', '', '\r\n']: meta = dict() line = line.strip() values = line.split(',') for i, value in enumerate(values[:-1]): meta[properties[i]] = value metaList.append(meta) line = f.readline() # lees gat while (line == '\n') or (line == '\r\n'): line = f.readline() line = line.strip() titel = line.split(',') while '' in titel: titel.remove('') # lees reeksen if line != '': # Validate if titles are valid names validator = np.lib._iotools.NameValidator() titel = validator(titel) dtype = [np.float64] * (len(titel)) dtype[0] = "S11" dtype[1] = np.int32 dtype[2] = "S10" dtype[titel.index('Bijzonderheid')] = object dtype = list(zip(titel, dtype)) usecols = range(0, len(titel)) # # usecols.remove(2) measurements = read_csv(f, header=None, names=titel, parse_dates=['Peildatum'], index_col='Peildatum', dayfirst=True, usecols=usecols) ts = measurements['Stand_cm_tov_NAP'] else: measurements = None ts = Series() # %% kies welke invoer opgeslagen wordt self.meta = metaList if self.meta: self.locatie = self.meta[-1]['Locatie'] self.x = float(self.meta[-1]['X-coordinaat']) self.y = float(self.meta[-1]['Y-coordinaat']) else: # de metadata is leeg self.locatie = '' self.x = np.nan self.y = np.nan self.data = measurements self.stand = ts f.close()