Newer
Older
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
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
min, steps, classes = get_class_steps(ramp)
pixel_array_r = []
pixel_array_g = []
pixel_array_b = []
pixel_array_a = []
row_array_r = []
row_array_g = []
row_array_b = []
row_array_a = []
for i, station_id in enumerate(data):
if i % 36 == 0:
value = data[i + j][1]
value = 0 if not value else value
value = 0 if str(value) == 'NaN' else value
if not value == 0:
rgba = colour_picker(min, steps, classes, ramp, value)
# print(rgba)
r, g, b, a = rgba[0], rgba[1], rgba[2], rgba[3]
else:
r, g, b, a = 0, 0, 0, 0
# print('r', r, 'g', g, 'b', b, 'a', a)
transparent = data[i + j][2]
print(transparent)
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]
xres = (xmax - xmin) / float(ncols)
yres = (ymax - ymin) / float(nrows)
geotransform = (xmin, xres, 0, ymax, 0, -yres)
output_raster = gdal.GetDriverByName('GTiff').Create('D:/Uni/Master/01_SS2021/Automatisierte_Geodatenprozessierung/temperaturverteilung/dataacquisition/output/myraster.tif', ncols, nrows, 4, gdal.GDT_Float32) # Open the file
output_raster.SetGeoTransform(geotransform)
srs = osr.SpatialReference()
srs.ImportFromEPSG(4326)
output_raster.SetProjection(srs.ExportToWkt())
output_raster.GetRasterBand(1).WriteArray(r_band)
output_raster.GetRasterBand(2).WriteArray(g_band)
output_raster.GetRasterBand(3).WriteArray(b_band)
output_raster.GetRasterBand(4).WriteArray(a_band)