You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
177 lines
4.7 KiB
Python
177 lines
4.7 KiB
Python
3 months ago
|
|
||
|
|
||
|
import toml
|
||
|
import numpy as np
|
||
|
import matplotlib.pyplot as plt
|
||
|
|
||
|
toml_string = """
|
||
|
|
||
|
[kanalplanung]
|
||
|
|
||
|
inp_file = "C:/Daten/nc/Ingenieurbüro/20 Projekte/Kanalplanung/kanalplanung.gpkg"
|
||
|
"""
|
||
|
|
||
|
prj = '0122' # Projektnummer als Filter
|
||
|
|
||
|
|
||
|
|
||
|
#toml.load("config.toml")
|
||
|
cfg = toml.loads(toml_string)
|
||
|
|
||
|
md = QgsProviderRegistry.instance().providerMetadata("ogr")
|
||
|
gpkg_con = md.createConnection( cfg['kanalplanung']['inp_file'], {})
|
||
|
#gpkg_con.fields('public','schacht')
|
||
|
|
||
|
query = "SELECT * FROM schacht_versickerung"
|
||
|
|
||
|
col = ['s.ezg_total_Aum','sv.fz','sv.di','sv.wandst','sv.da','sv.n','sv.r_5','sv.tiefe','sv.r_mas','sv.D_mas','sv.z_v','sv.Q_s','sv.D']
|
||
|
## col_dict = {j:i for i,j in enumerate(col)}
|
||
|
|
||
|
#Ermittle Index von Objekt
|
||
|
#col.index('sv.di')
|
||
|
|
||
|
col_str = ''
|
||
|
|
||
|
|
||
|
query = "UPDATE schacht_versickerung SET d_a = d_i+2*wandst"
|
||
|
res = gpkg_con.execSql(query)
|
||
|
|
||
|
query = """UPDATE schacht_versickerung SET
|
||
|
k_f = (SELECT
|
||
|
pr.kf
|
||
|
FROM schacht s JOIN projekt pr ON pr.nr = s.ibpprj
|
||
|
WHERE s.fid = schacht_versickerung.schacht_fid) WHERE k_f is NULL
|
||
|
|
||
|
|
||
|
|
||
|
"""
|
||
|
res = gpkg_con.execSql(query)
|
||
|
|
||
|
query = """SELECT
|
||
|
s.fid as fid,
|
||
|
sv.schacht_fid,
|
||
|
s.ezg_total_Aum,
|
||
|
sv.f_z,
|
||
|
sv.d_i,
|
||
|
sv.wandst,
|
||
|
sv.d_a,
|
||
|
sv.n,
|
||
|
sv.r_5,
|
||
|
sv.tiefe,
|
||
|
sv.r_mas,
|
||
|
sv.D_mas,
|
||
|
sv.z_v,
|
||
|
sv.Q_s,
|
||
|
sv.D,
|
||
|
sv.k_f
|
||
|
FROM schacht s
|
||
|
JOIN schacht_versickerung sv ON s.fid = sv.schacht_fid
|
||
|
JOIN projekt pr ON pr.nr = s.ibpprj
|
||
|
"""
|
||
|
|
||
|
# Spaltennamen in das Ergebnis-Array integrieren
|
||
|
dat = []
|
||
|
|
||
|
res = gpkg_con.execSql(query)
|
||
|
for row in res.rows():
|
||
|
d = {}
|
||
|
for i,j in enumerate(res.columns()):
|
||
|
d[j] = row[i]
|
||
|
dat.append(d)
|
||
|
|
||
|
#res = gpkg_con.executeSql(query)
|
||
|
#res = res[0]
|
||
|
#res_dict = {j:res[i] for i,j in enumerate(col)}
|
||
|
#
|
||
|
#i = res[0]
|
||
|
#
|
||
|
#D = i[13]
|
||
|
#r = i[7].replace("[","").replace("]","").replace("\n","").split(";")
|
||
|
#z = []
|
||
|
#
|
||
|
#
|
||
|
#
|
||
|
#def z_v(r, D):
|
||
|
# (A_u * r - math.pi * d_a**2/4 * k_f/2) / (d_i**2 * math.pi / 4 * D * f_z + d_a * math.pi * k_f/4) * n
|
||
|
|
||
|
|
||
|
for d in dat:
|
||
|
#via Numpy:
|
||
|
r = np.fromstring(d['r_5'].replace(',','.'), sep=';')
|
||
|
D = np.fromstring(d['D'].replace(',','.'), sep=';')
|
||
|
|
||
|
z = (d['ezg_total_Aum']*10**-7 * r - math.pi * d['d_a']**2/4 * d['k_f']/2) / (d['d_i']**2 * math.pi / (4 * D * 60 * d['f_z']) + d['d_a'] * math.pi * d['k_f']/4) * d['n']
|
||
|
|
||
|
z_max = z.max()
|
||
|
idx = z.argmax()
|
||
|
D_z_max = D[idx]
|
||
|
r_z_max = r[idx]
|
||
|
Q_s = (math.pi*d['d_i']**2/4+math.pi*d['d_i']*z_max/2)*d['n'] * d['k_f']/2
|
||
|
|
||
|
#r = d['r_5'].replace("[","").replace("]","").replace(",",".").replace("\n","").split(";")
|
||
|
#r = [float(i) for i in r]
|
||
|
#D = d['D'].replace("[","").replace("]","").replace("\n","").split(";")
|
||
|
#D = [float(i) for i in D]
|
||
|
|
||
|
#z = []
|
||
|
#
|
||
|
#for i, j in enumerate(D):
|
||
|
# #z.append(z_v(r[i], j))
|
||
|
# z.append(
|
||
|
# (d['ezg_total_Aum']*10**-7 * r[i] - math.pi * d['da']**2/4 * d['kf']/2) / (d['di']**2 * math.pi / (4 * D[i] * 60 * d['fz']) + d['da'] * math.pi * d['kf']/4) * d['n'])
|
||
|
|
||
|
#z_max = max(z)
|
||
|
#idx = z.index(z_max)
|
||
|
#D_z_max = D[idx]
|
||
|
#r_z_max = r[idx]
|
||
|
|
||
|
#z_str = np.array2string(r)
|
||
|
|
||
|
query = """UPDATE schacht_versickerung SET
|
||
|
z = '{}',
|
||
|
z_v = {},
|
||
|
r_mas = {},
|
||
|
D_mas = {},
|
||
|
Q_s = {}
|
||
|
WHERE schacht_fid = {}""".format(np.array2string(z).replace("[","").replace("]","").replace(" ",";"), z_max, r_z_max, D_z_max, Q_s, d['schacht_fid'])
|
||
|
print(query)
|
||
|
gpkg_con.execSql(query)
|
||
|
|
||
|
#https://github.com/geopandas/geopandas/issues/2794
|
||
|
#https://gist.github.com/MaxDragonheart/46445a150aac9d528dadd2ec877203a5
|
||
|
#https://github.com/geopandas/geopandas/issues/1035
|
||
|
|
||
|
|
||
|
#
|
||
|
# PLOT-DIAGRAMM
|
||
|
#
|
||
|
|
||
|
|
||
|
plt.style.use('_mpl-gallery')
|
||
|
|
||
|
# make data
|
||
|
x = D
|
||
|
x = np.append(0, x)
|
||
|
y = z
|
||
|
y = np.append(0, y)
|
||
|
|
||
|
# plot
|
||
|
fig, ax = plt.subplots(facecolor='white', figsize=[8/2.54*1.4, 8/2.54*1.4], dpi=100)
|
||
|
#fig.subplots_adjust(top=0.15,bottom=0.15,left=0.15,right=0.15)
|
||
|
|
||
|
ax.plot(x, y, linewidth=2.0)
|
||
|
|
||
|
ax.set_xlim(0, D_z_max+120)
|
||
|
ax.set_xlabel('Dauerstufe [min]')
|
||
|
ax.set_ylim(0, z_max+1)
|
||
|
ax.set_ylabel('Wasserstand [m]')
|
||
|
ax.set_title('Schachtversickerung')
|
||
|
|
||
|
ax
|
||
|
|
||
|
#plt.show()
|
||
|
plt.savefig('C:\\Daten\\nc\\Ingenieurbüro\\20 Projekte\\Kanalplanung\\Grafiken\\berechnet\\a138-schachtversickerung_{}.png'.format(d['schacht_fid']), bbox_inches="tight", transparent=True)
|
||
|
|
||
|
|
||
|
|