Skip to content
Snippets Groups Projects
Commit 4e9d358f authored by Clemens Berteld's avatar Clemens Berteld
Browse files

Coloured image now!

parent 78cd716d
No related branches found
No related tags found
No related merge requests found
...@@ -61,6 +61,13 @@ def find_extremum(cursor, years, extremum): ...@@ -61,6 +61,13 @@ def find_extremum(cursor, years, extremum):
return result return result
def get_min_max(cursor):
years = get_year_columns(cursor)
min = find_extremum(cursor, years, 'MIN')
max = find_extremum(cursor, years, 'MAX')
return min, max
# Find n (defined in config) neighbours and return them ordered by distance # Find n (defined in config) neighbours and return them ordered by distance
def get_neighbours(cursor, lat, lon, columns): def get_neighbours(cursor, lat, lon, columns):
values = '' # Used in second parameter of cursor.execute() (Avoids SQL injection) values = '' # Used in second parameter of cursor.execute() (Avoids SQL injection)
......
...@@ -3,8 +3,8 @@ from flask import Flask, jsonify, request ...@@ -3,8 +3,8 @@ from flask import Flask, jsonify, request
from flask_cors import cross_origin from flask_cors import cross_origin
from psycopg2 import sql from psycopg2 import sql
import configparser import configparser
from GetAverageData import get_interpolation_data_for_point, get_year_columns, get_average_of_multiple_years, find_extremum from GetAverageData import get_interpolation_data_for_point, get_year_columns, get_average_of_multiple_years, get_min_max
from api import write_raster from write_raster import write_raster
import SQLPandasTools as s2pTool import SQLPandasTools as s2pTool
cfg = configparser.ConfigParser() cfg = configparser.ConfigParser()
...@@ -97,13 +97,10 @@ def getStandardQuery(): ...@@ -97,13 +97,10 @@ def getStandardQuery():
@app.route('/minmax', methods=['GET']) @app.route('/minmax', methods=['GET'])
def get_min_max(): def return_min_max():
with psycopg2.connect(database=param_postgres["dbName"], user=param_postgres["user"], password=param_postgres["password"], host=param_postgres["host"], port=param_postgres["port"]) as connection: with psycopg2.connect(database=param_postgres["dbName"], user=param_postgres["user"], password=param_postgres["password"], host=param_postgres["host"], port=param_postgres["port"]) as connection:
with connection.cursor() as cursor: with connection.cursor() as cursor:
years = get_year_columns(cursor) min, max = get_min_max(cursor)
min = find_extremum(cursor, years, 'MIN')
max = find_extremum(cursor, years, 'MAX')
print(min, max)
return {'min': str(min), 'max': str(max)} return {'min': str(min), 'max': str(max)}
...@@ -117,7 +114,7 @@ def get_raster(): ...@@ -117,7 +114,7 @@ def get_raster():
with connection.cursor() as cursor: with connection.cursor() as cursor:
# all_years = get_year_columns(cursor) # all_years = get_year_columns(cursor)
average_data = get_average_of_multiple_years(cursor, years) average_data = get_average_of_multiple_years(cursor, years)
write_raster.write_raster(average_data) write_raster(average_data)
# return send_from_directory('D:/Uni/Master/01_SS2021/Automatisierte_Geodatenprozessierung/temperaturverteilung/dataacquisition/output', filename='myraster.tif', as_attachment=True) # return send_from_directory('D:/Uni/Master/01_SS2021/Automatisierte_Geodatenprozessierung/temperaturverteilung/dataacquisition/output', filename='myraster.tif', as_attachment=True)
return 'Läuft, Brudi' return 'Läuft, Brudi'
......
import configparser
import math
import numpy as np import numpy as np
import psycopg2
from osgeo import gdal, osr from osgeo import gdal, osr
from GetAverageData import get_min_max
cfg = configparser.ConfigParser()
cfg.read('../config.ini')
assert "POSTGRES" in cfg, "missing POSTGRES in config.ini"
assert "INTERPOLATION" in cfg, "missing INTERPOLATION in config.ini"
param_postgres = cfg["POSTGRES"]
ramp = [[255,255,255,1],[255,244,191,1],[255,233,128,1],[255,221,64,1],[255,210,0,1],[243,105,0,1],[230,0,0,1],[153,0,0,1],[77,0,0,1],[0,0,0,1]]
def get_class_steps(colour_ramp):
with psycopg2.connect(database=param_postgres["dbName"], user=param_postgres["user"], password=param_postgres["password"], host=param_postgres["host"], port=param_postgres["port"]) as connection:
with connection.cursor() as cursor:
min_max = get_min_max(cursor)
classes = len(colour_ramp)
temp_range = min_max[1] - min_max[0]
steps = temp_range / classes
min = min_max[0]
# print(min_max)
return min, steps, classes
def colour_picker(min, steps, classes, colour_ramp, value):
# print(min, steps, classes, value)
rgba = None
for i in range(0, classes + 1):
minor = math.floor(min + (i * steps))
major = math.ceil(min + ((i + 1) * steps))
# print('k:', minor, 'wert:', value, 'g:', major)
if minor <= value <= major:
try:
rgba = colour_ramp[i]
except IndexError:
rgba = colour_ramp[-1]
# print(i)
# print('ramp:', rgba)
if not rgba:
rgba = [0, 0, 0, 0]
return rgba
def write_raster(data): def write_raster(data):
pixel_array = [] min, steps, classes = get_class_steps(ramp)
pixel_array_alpha = []
pixel_array_r = []
pixel_array_g = []
pixel_array_b = []
pixel_array_a = []
for j in range(0, 36): for j in range(0, 36):
row_array = [] row_array_r = []
row_array_alpha = [] row_array_g = []
row_array_b = []
row_array_a = []
for i, station_id in enumerate(data): for i, station_id in enumerate(data):
if i % 36 == 0: if i % 36 == 0:
value = data[i + j][1] value = data[i + j][1]
value = 0 if not value else value value = 0 if not value else value
value = 0 if str(value) == 'NaN' else value value = 0 if str(value) == 'NaN' else value
alpha_value = data[i + j][2] if not value == 0:
alpha_value = 0 if alpha_value else 255 rgba = colour_picker(min, steps, classes, ramp, value)
row_array.append(value) # print(rgba)
row_array_alpha.append(alpha_value) r, g, b, a = rgba[0], rgba[1], rgba[2], rgba[3]
np_row_array = np.array(row_array) else:
np_row_array_alpha = np.array(row_array_alpha) r, g, b, a = 0, 0, 0, 0
pixel_array.append(np_row_array) # print('r', r, 'g', g, 'b', b, 'a', a)
pixel_array_alpha.append(np_row_array_alpha) transparent = data[i + j][2]
np_pixel_array = np.array(pixel_array) print(transparent)
np_pixel_array_alpha = np.array(pixel_array_alpha) a = 0 if transparent else a
a = 255 if a == 1 else a
row_array_r.append(r)
row_array_g.append(g)
row_array_b.append(b)
row_array_a.append(a)
np_row_array_r = np.array(row_array_r)
np_row_array_g = np.array(row_array_g)
np_row_array_b = np.array(row_array_b)
np_row_array_a = np.array(row_array_a)
pixel_array_r.append(np_row_array_r)
pixel_array_g.append(np_row_array_g)
pixel_array_b.append(np_row_array_b)
pixel_array_a.append(np_row_array_a)
np_pixel_array_r = np.array(pixel_array_r)
np_pixel_array_g = np.array(pixel_array_g)
np_pixel_array_b = np.array(pixel_array_b)
np_pixel_array_a = np.array(pixel_array_a)
r_band = np_pixel_array_r
g_band = np_pixel_array_g
b_band = np_pixel_array_b
a_band = np_pixel_array_a
xmin, ymin, xmax, ymax = [5.01, 47.15, 14.81, 55.33] xmin, ymin, xmax, ymax = [5.01, 47.15, 14.81, 55.33]
nrows, ncols = np.shape(np_pixel_array) nrows, ncols = np.shape(r_band)
xres = (xmax - xmin) / float(ncols) xres = (xmax - xmin) / float(ncols)
yres = (ymax - ymin) / float(nrows) yres = (ymax - ymin) / float(nrows)
geotransform = (xmin, xres, 0, ymax, 0, -yres) geotransform = (xmin, xres, 0, ymax, 0, -yres)
...@@ -35,9 +108,11 @@ def write_raster(data): ...@@ -35,9 +108,11 @@ def write_raster(data):
srs = osr.SpatialReference() srs = osr.SpatialReference()
srs.ImportFromEPSG(4326) srs.ImportFromEPSG(4326)
output_raster.SetProjection(srs.ExportToWkt()) output_raster.SetProjection(srs.ExportToWkt())
output_raster.GetRasterBand(1).WriteArray(np_pixel_array) output_raster.GetRasterBand(1).WriteArray(r_band)
# output_raster.GetRasterBand(2).WriteArray(np_pixel_array) output_raster.GetRasterBand(2).WriteArray(g_band)
# output_raster.GetRasterBand(3).WriteArray(np_pixel_array) output_raster.GetRasterBand(3).WriteArray(b_band)
output_raster.GetRasterBand(4).WriteArray(np_pixel_array_alpha) output_raster.GetRasterBand(4).WriteArray(a_band)
output_raster.FlushCache() output_raster.FlushCache()
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment