def bodem_query(x,y): bestandspad = DATA_ROOT x = str(x) y = str(y) bergingscoefficient = float(raster_q(bestandspad + "bergcoef-nzv.tif", x, y)) drainweerstand = float(raster_q(bestandspad + "drainw-nzv.tif", x, y)) qbot = float(raster_q(bestandspad + "kwel-nzv.tif", x, y)) ontwateringsbasis = (float(raster_q(bestandspad + "ontwbas-nzv.tif", x, y))*-1.0) return bergingscoefficient, drainweerstand, qbot, ontwateringsbasis
meteobestand_in = 'data/Waterbalans_METEO' + str(i) + '.csv' dfNettoNeerslag = pd.read_csv(meteobestand_in, header=None, skiprows=1, names=['datum', 'NN1', 'NN2'], delimiter=',', parse_dates=[0]) array_neerslagoverschot = dfNettoNeerslag['NN1'].values lengte = len( array_neerslagoverschot ) #arrays die je samen wilt gebruiken in een tijdserie moeten even lang zijn, anders gaat er van alles mis print str(datetime.now()) + 'inlezen bodem' #bodemdata afkomstig uit de rasters inlezen in een pandas dataframe en dan wegschrijven naar een numpy arrays array_bergingscoefficient = np.array( [float(raster_q("/home/john/ftm/ftm/ftm/data/bergcoef-nzv.tif", x, y))]) array_drainweerstand = np.array( [float(raster_q("/home/john/ftm/ftm/ftm/data/drainw-nzv.tif", x, y))]) array_qbot = np.array( [float(raster_q("/home/john/ftm/ftm/ftm/data/kwel-nzv.tif", x, y))]) array_hgem = np.array([ float(raster_q("/home/john/ftm/ftm/ftm/data/ontwbas-nzv.tif", x, y)) * -1.0 ]) print array_bergingscoefficient print array_drainweerstand print array_qbot print array_hgem print str(datetime.now()) + 'array vullen met nullen' #array grondwaterstand voorbereiden en vullen met nullen, zodoende begint de berekening altijd op 0 cm-mv en gaat python niet klagen over de positieaanduiding in een nog niet bestaande array array_grondwaterstand = np.zeros(shape=(2, lengte), order='C')
if len(sys.argv) == 2: lijst_locaties = sys.argv[1] else: print "gebruik, ", sys.argv[0], " lijst_locaties" with open(lijst_locaties, 'r') as f: line = f.readline() while line: words = [w.strip() for w in line.split(',')] locaties.append(words[0]) x_coords.append(words[1]) y_coords.append(words[2]) line = f.readline() f.close() print locaties, x_coords, y_coords of = open("/home/john/Documenten/Afstuderen_Acacia_water/Data/Noorderzijlvest-gegevens/Noorderzijlvest/DINO/fysische_gegevens.txt", 'w') of.write("Locatie, x_coord, y_coord, berg, drainw, kwel, ontw\n") bestandspad = "/home/john/ftm/ftm/ftm/data/" for i in range(0, len(locaties)-1): berg = raster_q(bestandspad + "bergcoef-nzv.tif", str(x_coords[i]), str(y_coords[i])).rstrip('\r\n') drainw = raster_q(bestandspad + "drainw-nzv.tif", str(x_coords[i]), str(y_coords[i])).rstrip('\r\n') kwel = raster_q(bestandspad + "kwel-nzv.tif", str(x_coords[i]), str(y_coords[i])).rstrip('\r\n') ontw = raster_q(bestandspad + "ontwbas-nzv.tif", str(x_coords[i]), str(y_coords[i])).rstrip('\r\n') of.write('%s, %s, %s, %s, %s, %s, %s\n' % (locaties[i], x_coords[i], y_coords[i], berg, drainw, kwel, ontw)) of.close()
x= "6.5108" y= "53.3847" ################################################################### #hier begint dan het programma #voorbewerkte meteo inlezen in een pandas dataframe en dan wegschrijven naar een numpy array for i in [nummer_meteostation]: meteobestand_in = 'data/Waterbalans_METEO'+str(i)+'.csv' dfNettoNeerslag = pd.read_csv(meteobestand_in, header=None, skiprows=1, names = ['datum', 'NN1', 'NN2' ], delimiter =',', parse_dates=[0]) array_neerslagoverschot = dfNettoNeerslag['NN1'].values lengte = len(array_neerslagoverschot) #arrays die je samen wilt gebruiken in een tijdserie moeten even lang zijn, anders gaat er van alles mis print str(datetime.now()) + 'inlezen bodem' #bodemdata afkomstig uit de rasters inlezen in een pandas dataframe en dan wegschrijven naar een numpy arrays array_bergingscoefficient = np.array([float(raster_q("/home/john/ftm/ftm/ftm/data/bergcoef-nzv.tif", x, y))]) array_drainweerstand = np.array([float(raster_q("/home/john/ftm/ftm/ftm/data/drainw-nzv.tif", x, y))]) array_qbot = np.array([float(raster_q("/home/john/ftm/ftm/ftm/data/kwel-nzv.tif", x, y))]) array_hgem = np.array([float(raster_q("/home/john/ftm/ftm/ftm/data/ontwbas-nzv.tif", x, y))*-1.0]) print array_bergingscoefficient print array_drainweerstand print array_qbot print array_hgem print str(datetime.now()) + 'array vullen met nullen' #array grondwaterstand voorbereiden en vullen met nullen, zodoende begint de berekening altijd op 0 cm-mv en gaat python niet klagen over de positieaanduiding in een nog niet bestaande array array_grondwaterstand = np.zeros(shape = (2, lengte), order='C') print str(datetime.now()) + 'beginnen met rekenen' #door de functie gws_op_t uit het rekenhart aan te roepen en met behulp van een for loop uit te voeren wordt voor iedere dag de grondwaterstand berekend met de netto neerslag en de bodemdata, tegelijk wordt de oppervlakkige afstroming berekend, maar dit laatste is nog in ontwikkeling for i in range(1,lengte): array_grondwaterstand[0,i] = gws_op_t(array_bergingscoefficient[0], array_drainweerstand[0], array_grondwaterstand[0, (i-1)], array_qbot[0], array_hgem[0], array_neerslagoverschot[i])[0]
def maak_plotje2(x2, y2, startdatum, einddatum, resultaat): pnt = Point(float(x2),float(y2),srid=4326) pnt.transform(28992) nummer_meteostation = NeerslagStation.closest(pnt).nummer naam_meteostation = NeerslagStation.closest(pnt).naam bestandspad= DATA_ROOT x= str(x2) y= str(y2) startdatum = str(startdatum) #'2015-01-01' einddatum = str(einddatum)#'2015-11-08' ################################################################### #hier begint dan het programma datum=meteo_query(nummer_meteostation, startdatum, einddatum)[0] neerslag=meteo_query(nummer_meteostation, startdatum, einddatum)[1] verdamping=meteo_query(nummer_meteostation, startdatum, einddatum)[2] lengte = len(neerslag) #arrays die je samen wilt gebruiken in een tijdserie moeten even lang zijn, anders gaat er van alles mis array_neerslag1 = np.array(neerslag) array_verdamping1 = np.array(verdamping) #np.zeros(shape = (1, lengte), order='C') datum_array = np.array(datum) array_neerslagoverschot = np.zeros(shape = (1, lengte), order='C') startdatum = datum_array[0] einddatum = datum_array[lengte-1] for i in range(0, lengte): array_neerslagoverschot[0][i] = int(array_neerslag1[i]) - int(array_verdamping1[i]) #voorbewerkte meteo inlezen in een pandas dataframe en dan wegschrijven naar een numpy array #bodemdata afkomstig uit de QGIS puntenwolk inlezen in een pandas dataframe en dan wegschrijven naar een numpy arrays array_bergingscoefficient = np.array([float(raster_q(bestandspad + "bergcoef-nzv.tif", x, y))]) array_drainweerstand = np.array([float(raster_q(bestandspad + "drainw-nzv.tif", x, y))]) array_qbot = np.array([float(raster_q(bestandspad + "kwel-nzv.tif", x, y))]) array_hgem = np.array([float(raster_q(bestandspad + "ontwbas-nzv.tif", x, y))*-1.0]) #array grondwaterstand voorbereiden en vullen met nullen, zodoende begint de berekening altijd op 0 cm-mv en gaat python niet klagen over de positieaanduiding in een nog niet bestaande array array_grondwaterstand = np.zeros(shape = (2, lengte), order='C') #door de functie gws_op_t uit het rekenhart aan te roepen en met behulp van een for loop uit te voeren wordt voor iedere dag de grondwaterstand berekend met de netto neerslag en de bodemdata, tegelijk wordt de oppervlakkige afstroming berekend, maar dit laatste is nog in ontwikkeling for i in range(1,lengte): array_grondwaterstand[0,i] = gws_op_t(array_bergingscoefficient[0], array_drainweerstand[0], array_grondwaterstand[0, (i-1)], array_qbot[0], array_hgem[0], array_neerslagoverschot[0][i])[0] array_grondwaterstand[1,i] = gws_op_t(array_bergingscoefficient[0], array_drainweerstand[0], array_grondwaterstand[0, (i-1)], array_qbot[0], array_hgem[0], array_neerslagoverschot[0][i])[1] ################################################################### #hieronder wordt het outputbestand met de grondwaterstanden en de oppervlakkige afstroming gemaakt #startdatum en dates zijn variabelen die in het verloop van het programma gebruikt worden om een array of serie om te kunnen zetten naar een dataframe met datums #startdatum = dfNettoNeerslag.ix[0, 'datum'] dates = datum_array #pd.date_range(startdatum, periods=lengte) #dfGWS en serafstroming worden met behulp van pd.Series omgezet in een tijdserie waarbij de grondwaterstanden en afstroming een datum hebben dfGWS = pd.Series(array_grondwaterstand[0], index=dates) serafstroming = pd.Series(array_grondwaterstand[1], index=dates) #de net gemaakte tijdseries worden omgezet in een dataframe, dat is gemakkelijker met pandas te hanteren voor wegschrijven naar csv en plotten dfGrondwaterstanden = dfGWS.to_frame(name = 'Grondwaterstanden') dfAfstroming = serafstroming.to_frame(name = 'Afstroming') #het grondwaterframe en het afstromingsframe worden samengevoegd tot een dataframe, waardoor beide series in een csv-bestand weggezet kunnen worden dfOutput = pd.merge(dfGrondwaterstanden, dfAfstroming,how='inner', on=None, left_on=None, right_on=None, left_index=True, right_index=True) #variabele bestandsnaam voor het grondwaterstandenbestand, deze is afhankelijk van het meteostationsnummer om bij verschillende tijdseries niet over de vorige heen te schrijven #met behulp van de module GxG.py worden de GHG en GLG berekend en voor het plotten in een dataframe met datums gestopt, anders kan er geen horizontale lijn voor een getal geplot worden GHG = GHG_berekening(dfGWS, dates, lengte)[0] GLG = GLG_berekening(dfGWS, dates, lengte)[0] GVG = GVG_berekening(dfGWS, dates, lengte)[0] dfGHGs = GHG_berekening(dfGWS, dates, lengte)[1] dfGLGs = GLG_berekening(dfGWS, dates, lengte)[1] dfGVGs = GVG_berekening(dfGWS, dates, lengte)[1] gt = GT(GHG[0],GLG[0])[1] ################################################################### #plotje maken van de grondwaterstanden en opslaan if resultaat == 'plot': return plot_buf(dfGWS, dfGHGs, dfGLGs, gt, nummer_meteostation, x2, y2), gt, int(GHG[0]),int(GLG[0]), int(GVG), startdatum.date(), einddatum.date(), array_bergingscoefficient[0], array_drainweerstand[0], array_qbot[0], array_hgem[0], nummer_meteostation, naam_meteostation elif resultaat == 'csv': return dfGrondwaterstanden, startdatum, einddatum
def maak_plotje2(x2, y2, startdatum, einddatum, resultaat): pnt = Point(float(x2), float(y2), srid=4326) pnt.transform(28992) nummer_meteostation = NeerslagStation.closest(pnt).nummer naam_meteostation = NeerslagStation.closest(pnt).naam bestandspad = DATA_ROOT x = str(x2) y = str(y2) startdatum = str(startdatum) #'2015-01-01' einddatum = str(einddatum) #'2015-11-08' ################################################################### #hier begint dan het programma datum = meteo_query(nummer_meteostation, startdatum, einddatum)[0] neerslag = meteo_query(nummer_meteostation, startdatum, einddatum)[1] verdamping = meteo_query(nummer_meteostation, startdatum, einddatum)[2] lengte = len( neerslag ) #arrays die je samen wilt gebruiken in een tijdserie moeten even lang zijn, anders gaat er van alles mis array_neerslag1 = np.array(neerslag) array_verdamping1 = np.array( verdamping) #np.zeros(shape = (1, lengte), order='C') datum_array = np.array(datum) array_neerslagoverschot = np.zeros(shape=(1, lengte), order='C') startdatum = datum_array[0] einddatum = datum_array[lengte - 1] for i in range(0, lengte): array_neerslagoverschot[0][i] = int(array_neerslag1[i]) - int( array_verdamping1[i]) #voorbewerkte meteo inlezen in een pandas dataframe en dan wegschrijven naar een numpy array #bodemdata afkomstig uit de QGIS puntenwolk inlezen in een pandas dataframe en dan wegschrijven naar een numpy arrays array_bergingscoefficient = np.array( [float(raster_q(bestandspad + "bergcoef-nzv.tif", x, y))]) array_drainweerstand = np.array( [float(raster_q(bestandspad + "drainw-nzv.tif", x, y))]) array_qbot = np.array( [float(raster_q(bestandspad + "kwel-nzv.tif", x, y))]) array_hgem = np.array( [float(raster_q(bestandspad + "ontwbas-nzv.tif", x, y)) * -1.0]) #array grondwaterstand voorbereiden en vullen met nullen, zodoende begint de berekening altijd op 0 cm-mv en gaat python niet klagen over de positieaanduiding in een nog niet bestaande array array_grondwaterstand = np.zeros(shape=(2, lengte), order='C') #door de functie gws_op_t uit het rekenhart aan te roepen en met behulp van een for loop uit te voeren wordt voor iedere dag de grondwaterstand berekend met de netto neerslag en de bodemdata, tegelijk wordt de oppervlakkige afstroming berekend, maar dit laatste is nog in ontwikkeling for i in range(1, lengte): array_grondwaterstand[0, i] = gws_op_t(array_bergingscoefficient[0], array_drainweerstand[0], array_grondwaterstand[0, (i - 1)], array_qbot[0], array_hgem[0], array_neerslagoverschot[0][i])[0] array_grondwaterstand[1, i] = gws_op_t(array_bergingscoefficient[0], array_drainweerstand[0], array_grondwaterstand[0, (i - 1)], array_qbot[0], array_hgem[0], array_neerslagoverschot[0][i])[1] ################################################################### #hieronder wordt het outputbestand met de grondwaterstanden en de oppervlakkige afstroming gemaakt #startdatum en dates zijn variabelen die in het verloop van het programma gebruikt worden om een array of serie om te kunnen zetten naar een dataframe met datums #startdatum = dfNettoNeerslag.ix[0, 'datum'] dates = datum_array #pd.date_range(startdatum, periods=lengte) #dfGWS en serafstroming worden met behulp van pd.Series omgezet in een tijdserie waarbij de grondwaterstanden en afstroming een datum hebben dfGWS = pd.Series(array_grondwaterstand[0], index=dates) serafstroming = pd.Series(array_grondwaterstand[1], index=dates) #de net gemaakte tijdseries worden omgezet in een dataframe, dat is gemakkelijker met pandas te hanteren voor wegschrijven naar csv en plotten dfGrondwaterstanden = dfGWS.to_frame(name='Grondwaterstanden') dfAfstroming = serafstroming.to_frame(name='Afstroming') #het grondwaterframe en het afstromingsframe worden samengevoegd tot een dataframe, waardoor beide series in een csv-bestand weggezet kunnen worden dfOutput = pd.merge(dfGrondwaterstanden, dfAfstroming, how='inner', on=None, left_on=None, right_on=None, left_index=True, right_index=True) #variabele bestandsnaam voor het grondwaterstandenbestand, deze is afhankelijk van het meteostationsnummer om bij verschillende tijdseries niet over de vorige heen te schrijven #met behulp van de module GxG.py worden de GHG en GLG berekend en voor het plotten in een dataframe met datums gestopt, anders kan er geen horizontale lijn voor een getal geplot worden GHG = GHG_berekening(dfGWS, dates, lengte)[0] GLG = GLG_berekening(dfGWS, dates, lengte)[0] GVG = GVG_berekening(dfGWS, dates, lengte)[0] dfGHGs = GHG_berekening(dfGWS, dates, lengte)[1] dfGLGs = GLG_berekening(dfGWS, dates, lengte)[1] dfGVGs = GVG_berekening(dfGWS, dates, lengte)[1] gt = GT(GHG[0], GLG[0])[1] ################################################################### #plotje maken van de grondwaterstanden en opslaan if resultaat == 'plot': return plot_buf( dfGWS, dfGHGs, dfGLGs, gt, nummer_meteostation, x2, y2), gt, int(GHG[0]), int(GLG[0]), int(GVG), startdatum.date( ), einddatum.date(), array_bergingscoefficient[ 0], array_drainweerstand[0], array_qbot[0], array_hgem[ 0], nummer_meteostation, naam_meteostation elif resultaat == 'csv': return dfGrondwaterstanden, startdatum, einddatum
with open(lijst_locaties, 'r') as f: line = f.readline() while line: words = [w.strip() for w in line.split(',')] locaties.append(words[0]) x_coords.append(words[1]) y_coords.append(words[2]) line = f.readline() f.close() print locaties, x_coords, y_coords of = open( "/home/john/Documenten/Afstuderen_Acacia_water/Data/Noorderzijlvest-gegevens/Noorderzijlvest/DINO/fysische_gegevens.txt", 'w') of.write("Locatie, x_coord, y_coord, berg, drainw, kwel, ontw\n") bestandspad = "/home/john/ftm/ftm/ftm/data/" for i in range(0, len(locaties) - 1): berg = raster_q(bestandspad + "bergcoef-nzv.tif", str(x_coords[i]), str(y_coords[i])).rstrip('\r\n') drainw = raster_q(bestandspad + "drainw-nzv.tif", str(x_coords[i]), str(y_coords[i])).rstrip('\r\n') kwel = raster_q(bestandspad + "kwel-nzv.tif", str(x_coords[i]), str(y_coords[i])).rstrip('\r\n') ontw = raster_q(bestandspad + "ontwbas-nzv.tif", str(x_coords[i]), str(y_coords[i])).rstrip('\r\n') of.write('%s, %s, %s, %s, %s, %s, %s\n' % (locaties[i], x_coords[i], y_coords[i], berg, drainw, kwel, ontw)) of.close()