zusammenfügen 13.1.
This commit is contained in:
@@ -4,15 +4,18 @@ from Export import Export
|
||||
from Berechnungen import Berechnungen
|
||||
import numpy as np
|
||||
import importlib
|
||||
from Koordinatentransformationen import Transformationen
|
||||
|
||||
|
||||
|
||||
class FunktionalesModell:
|
||||
def __init__(self, pfad_datenbank, a, b):
|
||||
def __init__(self, pfad_datenbank, a, b, pfad_tif_quasigeoidundolation = None):
|
||||
self.pfad_datenbank = pfad_datenbank
|
||||
self.a = a
|
||||
self.b = b
|
||||
self.berechnungen = Berechnungen(self.a, self.b)
|
||||
self.trafos = Transformationen(pfad_datenbank)
|
||||
self.pfad_tif_quasigeoidundolation = pfad_tif_quasigeoidundolation
|
||||
self.substitutionen_dict = self.dict_substitutionen_uebergeordnetes_system()
|
||||
self.dict_punkt_symbole = {}
|
||||
self.liste_symbole_lambdify = sorted(self.substitutionen_dict.keys(), key=lambda s: str(s))
|
||||
@@ -21,14 +24,18 @@ class FunktionalesModell:
|
||||
self.func_u0 = None
|
||||
self.liste_beobachtungsvektor_symbolisch = None
|
||||
|
||||
|
||||
def jacobi_matrix_symbolisch(self, datumsfestlegung = None, liste_unbekannte_datumsfestlegung = None):
|
||||
#liste_beobachtungsarten = ["tachymeter_distanz", "tachymeter_richtung", "tachymeter_zenitwinkel"]
|
||||
|
||||
liste_beobachtungsarten = ["tachymeter_distanz", "tachymeter_richtung", "tachymeter_zenitwinkel", "gnss_basislinien"]
|
||||
liste_beobachtungsarten = ["tachymeter_distanz", "tachymeter_richtung", "tachymeter_zenitwinkel", "gnss_basislinien", "geometrisches_nivellement"]
|
||||
#liste_beobachtungsarten = ["tachymeter_distanz", "tachymeter_richtung", "tachymeter_zenitwinkel",
|
||||
# "gnss_basislinien"]
|
||||
db_zugriff = Datenbankzugriff(self.pfad_datenbank)
|
||||
|
||||
liste_beobachtungen_rohdaten_gnssbasislinien = []
|
||||
liste_beobachtungen_rohdaten_tachymeter = []
|
||||
liste_beobachtungen_rohdaten_nivellement = []
|
||||
liste_punktnummern =[]
|
||||
|
||||
liste_orientierungsunbekannte = []
|
||||
@@ -65,6 +72,20 @@ class FunktionalesModell:
|
||||
if zielpunkt not in liste_punktnummern:
|
||||
liste_punktnummern.append(zielpunkt)
|
||||
|
||||
if beobachtungsart == "geometrisches_nivellement":
|
||||
liste_id_standpunkt_zielpunkt = db_zugriff.get_nivellement_beobachtungen_punktnummern()
|
||||
|
||||
for beobachtungenID, standpunkt, zielpunkt in liste_id_standpunkt_zielpunkt:
|
||||
standpunkt = str(standpunkt).strip()
|
||||
zielpunkt = str(zielpunkt).strip()
|
||||
liste_beobachtungen_rohdaten_nivellement.append(
|
||||
(beobachtungsart, beobachtungenID, standpunkt, zielpunkt))
|
||||
|
||||
if standpunkt not in liste_punktnummern:
|
||||
liste_punktnummern.append(standpunkt)
|
||||
if zielpunkt not in liste_punktnummern:
|
||||
liste_punktnummern.append(zielpunkt)
|
||||
|
||||
|
||||
|
||||
#if liste_beobachtungen_rohdaten_tachymeter == []:
|
||||
@@ -100,6 +121,10 @@ class FunktionalesModell:
|
||||
liste_A_gnssbasislinien_zeilen = []
|
||||
liste_zeilenbeschriftungen_gnssbasislinien = []
|
||||
|
||||
liste_beobachtungsgleichungen_nivellement = []
|
||||
liste_A_nivellement_zeilen = []
|
||||
liste_zeilenbeschriftungen_nivellement = []
|
||||
|
||||
if liste_beobachtungen_rohdaten_tachymeter != []:
|
||||
for beobachtungsart, beobachtungenID, beobachtungsgruppeID, standpunkt, zielpunkt in liste_beobachtungen_rohdaten_tachymeter:
|
||||
X_sp, Y_sp, Z_sp = self.dict_punkt_symbole[standpunkt]
|
||||
@@ -181,7 +206,7 @@ class FunktionalesModell:
|
||||
zeile_A_Matrix.append(0)
|
||||
|
||||
liste_A_zenitwinkel_zeilen.append(zeile_A_Matrix)
|
||||
liste_zeilenbeschriftungen_richtung.append(
|
||||
liste_zeilenbeschriftungen_zenitwinkel.append(
|
||||
f"{beobachtungenID}_ZW_{beobachtungsgruppeID}_{standpunkt}_{zielpunkt}"
|
||||
)
|
||||
|
||||
@@ -204,6 +229,39 @@ class FunktionalesModell:
|
||||
liste_zeilenbeschriftungen_gnssbasislinien.append(
|
||||
f"{beobachtungenID}_gnssbz_{standpunkt}_{zielpunkt}")
|
||||
|
||||
if liste_beobachtungen_rohdaten_nivellement != []:
|
||||
for beobachtungsart, beobachtungenID, standpunkt, zielpunkt in liste_beobachtungen_rohdaten_nivellement:
|
||||
X_sp, Y_sp, Z_sp = self.dict_punkt_symbole[standpunkt]
|
||||
X_zp, Y_zp, Z_zp = self.dict_punkt_symbole[zielpunkt]
|
||||
B_sp, L_sp = sp.symbols(f"B{standpunkt} L{standpunkt}")
|
||||
B_zp, L_zp = sp.symbols(f"B{zielpunkt} L{zielpunkt}")
|
||||
|
||||
if beobachtungsart == "geometrisches_nivellement":
|
||||
|
||||
d_r_dX_zp = sp.cos(B_zp) * sp.cos(L_zp)
|
||||
d_r_dX_sp = -sp.cos(B_sp) * sp.cos(L_sp)
|
||||
d_r_dY_zp = sp.cos(B_zp) * sp.sin(L_zp)
|
||||
d_r_dY_sp = -sp.cos(B_sp) * sp.sin(L_sp)
|
||||
d_r_dZ_zp = sp.sin(B_zp)
|
||||
d_r_dZ_sp = -sp.sin(B_sp)
|
||||
|
||||
zeile_A_Matrix = []
|
||||
for punkt in liste_punktnummern:
|
||||
if punkt == standpunkt:
|
||||
zeile_A_Matrix.extend([d_r_dX_sp, d_r_dY_sp, d_r_dZ_sp])
|
||||
elif punkt == zielpunkt:
|
||||
zeile_A_Matrix.extend([d_r_dX_zp, d_r_dY_zp, d_r_dZ_zp])
|
||||
else:
|
||||
zeile_A_Matrix.extend([0, 0, 0])
|
||||
|
||||
for orientierung in liste_orientierungsunbekannte:
|
||||
zeile_A_Matrix.append(0)
|
||||
|
||||
liste_A_nivellement_zeilen.append(zeile_A_Matrix)
|
||||
liste_zeilenbeschriftungen_nivellement.append(
|
||||
f"{beobachtungenID}_niv_{standpunkt}_{zielpunkt}"
|
||||
)
|
||||
|
||||
if liste_beobachtungsgleichungen_distanz:
|
||||
f_matrix_dist = sp.Matrix(liste_beobachtungsgleichungen_distanz)
|
||||
unbekanntenvektor = sp.Matrix(liste_unbekannte)
|
||||
@@ -228,6 +286,15 @@ class FunktionalesModell:
|
||||
else:
|
||||
A_gnssbasislinien = None
|
||||
|
||||
if liste_A_nivellement_zeilen:
|
||||
#f_matrix_nivellement = sp.Matrix(liste_beobachtungsgleichungen_nivellement)
|
||||
#unbekanntenvektor = sp.Matrix(liste_unbekannte)
|
||||
#A_nivellement = f_matrix_nivellement.jacobian(unbekanntenvektor)
|
||||
A_nivellement = sp.Matrix(liste_A_nivellement_zeilen)
|
||||
else:
|
||||
A_nivellement = None
|
||||
|
||||
|
||||
A_gesamt = None
|
||||
liste_zeilenbeschriftungen_gesamt = []
|
||||
|
||||
@@ -256,6 +323,13 @@ class FunktionalesModell:
|
||||
A_gesamt = A_gesamt.col_join(A_gnssbasislinien)
|
||||
liste_zeilenbeschriftungen_gesamt.extend(liste_zeilenbeschriftungen_gnssbasislinien)
|
||||
|
||||
if A_nivellement is not None:
|
||||
if A_gesamt is None:
|
||||
A_gesamt = A_nivellement
|
||||
else:
|
||||
A_gesamt = A_gesamt.col_join(A_nivellement)
|
||||
liste_zeilenbeschriftungen_gesamt.extend(liste_zeilenbeschriftungen_nivellement)
|
||||
|
||||
if A_gesamt is None:
|
||||
return None
|
||||
|
||||
@@ -451,6 +525,18 @@ class FunktionalesModell:
|
||||
if beobachtungsart == "gnssbz":
|
||||
liste_beobachtungsgleichungen.append(dZ)
|
||||
|
||||
if aufgeteilt[1] == "niv":
|
||||
beobachtungsart = aufgeteilt[1]
|
||||
standpunkt = str(aufgeteilt[2]).strip()
|
||||
zielpunkt = str(aufgeteilt[3]).strip()
|
||||
|
||||
nh_sp = sp.Symbol(f"NH{standpunkt}")
|
||||
nh_zp = sp.Symbol(f"NH{zielpunkt}")
|
||||
|
||||
niv_sp_zp = nh_zp - nh_sp
|
||||
|
||||
liste_beobachtungsgleichungen.append(niv_sp_zp)
|
||||
|
||||
beobachtungsvektor_naeherung_symbolisch = sp.Matrix(liste_beobachtungsgleichungen)
|
||||
Export.matrix_to_csv(r"Zwischenergebnisse\Beobachtungsvektor_Näherung_Symbolisch.csv", [""],
|
||||
liste_beobachtungsvektor_symbolisch, beobachtungsvektor_naeherung_symbolisch, "Beobachtungsvektor")
|
||||
@@ -570,8 +656,14 @@ class FunktionalesModell:
|
||||
|
||||
liste_beobachtungen_tachymeter = db_zugriff.get_beobachtungen_from_beobachtungenid()
|
||||
liste_beobachtungen_gnssbasislinien = db_zugriff.get_beobachtungen_gnssbasislinien()
|
||||
liste_azimut_richtungen, dict_orientierungen = self.berechnungen.berechnung_richtung_azimut_zenitwinkel(self.pfad_datenbank, dict_koordinaten)
|
||||
dict_koordinaten_B_L = self.berechnungen.geometrische_breite_laenge(dict_koordinaten)
|
||||
liste_beobachtungen_nivellemente = db_zugriff.get_beobachtungen_nivellement()
|
||||
liste_azimut_richtungen, dict_orientierungen = berechnungen.berechnung_richtung_azimut_zenitwinkel(self.pfad_datenbank, dict_koordinaten)
|
||||
dict_koordinaten_xyz_kopie = {pn: [v[0], v[1], v[2]] for pn, v in dict_koordinaten.items()}
|
||||
dict_koordinaten_B_L = berechnungen.geometrische_breite_laenge(dict_koordinaten_xyz_kopie)
|
||||
|
||||
dict_koordinaten_utm = self.trafos.ecef_to_utm(
|
||||
dict_koordinaten,
|
||||
self.pfad_tif_quasigeoidundolation)
|
||||
|
||||
substitutionen = {}
|
||||
|
||||
@@ -589,7 +681,7 @@ class FunktionalesModell:
|
||||
# O_sym = sp.symbols(f"O_{beobachtungsgruppeID}")
|
||||
# substitutionen[O_sym] = float(orientierung)
|
||||
|
||||
for beobachtungsgruppeID, standpunkt, zielpunkt, azimut, richtung, zenitwinkel, schraegstrecke in liste_azimut_richtungen:
|
||||
for beobachtungsgruppeID, standpunkt, zielpunkt, azimut, richtung, zenitwinkel, schraegstrecke, orientierung in liste_azimut_richtungen:
|
||||
richtung_sym = sp.symbols(f"richtung_berechnet_{beobachtungsgruppeID}_{standpunkt}_{zielpunkt}")
|
||||
substitutionen[richtung_sym] = float(richtung)
|
||||
|
||||
@@ -602,6 +694,10 @@ class FunktionalesModell:
|
||||
schraegstrecke_sym = sp.symbols(f"strecke_berechnet_{beobachtungsgruppeID}_{standpunkt}_{zielpunkt}")
|
||||
substitutionen[schraegstrecke_sym] = float(schraegstrecke)
|
||||
|
||||
for punktnummer, koordinaten_utm in dict_koordinaten_utm.items():
|
||||
normalhoehe_sym = sp.symbols(f"NH{punktnummer}")
|
||||
substitutionen[normalhoehe_sym] = float(koordinaten_utm[2])
|
||||
|
||||
|
||||
|
||||
for standpunkt, zielpunkt, beobachtungenID, beobachtungsgruppeID, tachymeter_richtung, tachymeter_zenitwinkel, tachymeter_distanz in liste_beobachtungen_tachymeter:
|
||||
@@ -615,7 +711,7 @@ class FunktionalesModell:
|
||||
substitutionen[alpha] = float(tachymeter_richtung)
|
||||
substitutionen[zw] = float(tachymeter_zenitwinkel)
|
||||
substitutionen[s] = float(tachymeter_distanz)
|
||||
substitutionen[sp.Symbol(f"O{beobachtungsgruppeID}")] = 0.0
|
||||
#substitutionen[sp.Symbol(f"O{beobachtungsgruppeID}")] = 0.0
|
||||
|
||||
for beobachtungenID, punktnummer_sp, punktnummer_zp, gnss_bx, gnss_by, gnss_bz, gnss_s0, gnss_cxx, gnss_cxy, gnss_cxz, gnss_cyy, gnss_cyz, gnss_czz in liste_beobachtungen_gnssbasislinien:
|
||||
beobachtungenID = str(beobachtungenID).strip()
|
||||
@@ -633,6 +729,18 @@ class FunktionalesModell:
|
||||
substitutionen[by] = float(gnss_by)
|
||||
substitutionen[bz] = float(gnss_bz)
|
||||
|
||||
for beobachtungenID, punktnummer_sp, punktnummer_zp, niv_dh, niv_strecke, niv_anz_standpkte in liste_beobachtungen_nivellemente:
|
||||
beobachtungenID = str(beobachtungenID).strip()
|
||||
punktnummer_sp = str(punktnummer_sp).strip()
|
||||
punktnummer_zp = str(punktnummer_zp).strip()
|
||||
|
||||
niv = sp.symbols(f"{beobachtungenID}_niv_{punktnummer_sp}_{punktnummer_zp}")
|
||||
|
||||
if niv_dh is None:
|
||||
continue
|
||||
|
||||
substitutionen[niv] = float(niv_dh)
|
||||
|
||||
if unbekanntenvektor_aus_iteration is not None:
|
||||
dict_O = self.unbekanntenvektor_numerisch_to_dict_orientierungen(
|
||||
self.liste_unbekanntenvektor_symbolisch,
|
||||
@@ -641,10 +749,14 @@ class FunktionalesModell:
|
||||
for orientierungs_id, wert in dict_O.items():
|
||||
substitutionen[sp.Symbol(f"O{orientierungs_id}")] = float(wert)
|
||||
else:
|
||||
for standpunkt, zielpunkt, beobachtungenID, beobachtungsgruppeID, *_ in liste_beobachtungen_tachymeter:
|
||||
#for standpunkt, zielpunkt, beobachtungenID, beobachtungsgruppeID, *_ in liste_beobachtungen_tachymeter:
|
||||
# O_sym = sp.Symbol(f"O{beobachtungsgruppeID}")
|
||||
# if O_sym not in substitutionen:
|
||||
# substitutionen[O_sym] = 0
|
||||
for beobachtungsgruppeID, standpunkt, zielpunkt, azimut, richtung, zenitwinkel, schraegstrecke, orientierung in liste_azimut_richtungen:
|
||||
O_sym = sp.Symbol(f"O{beobachtungsgruppeID}")
|
||||
if O_sym not in substitutionen:
|
||||
substitutionen[O_sym] = 0
|
||||
substitutionen[O_sym] = orientierung
|
||||
|
||||
return substitutionen
|
||||
|
||||
|
||||
Reference in New Issue
Block a user