Push
This commit is contained in:
@@ -1,3 +1,9 @@
|
||||
from typing import Any
|
||||
|
||||
from numpy import ndarray, dtype
|
||||
from sympy import MutableDenseMatrix
|
||||
from sympy.matrices.expressions.matexpr import MatrixElement
|
||||
|
||||
from Datenbank import Datenbankzugriff
|
||||
import sympy as sp
|
||||
from Export import Export
|
||||
@@ -14,7 +20,7 @@ import sympy as sp
|
||||
|
||||
|
||||
class FunktionalesModell:
|
||||
def __init__(self, pfad_datenbank, a, b, pfad_tif_quasigeoidundolation = None):
|
||||
def __init__(self, pfad_datenbank: str, a: float, b: float, pfad_tif_quasigeoidundolation: str = None) -> None:
|
||||
self.pfad_datenbank = pfad_datenbank
|
||||
self.a = a
|
||||
self.b = b
|
||||
@@ -30,11 +36,11 @@ class FunktionalesModell:
|
||||
self.liste_beobachtungsvektor_symbolisch = None
|
||||
|
||||
|
||||
def jacobi_matrix_symbolisch(self, datumsfestlegung = None, liste_unbekannte_datumsfestlegung = None):
|
||||
def jacobi_matrix_symbolisch(self, datumsfestlegung: str = None, liste_unbekannte_datumsfestlegung: list = None) -> tuple[MutableDenseMatrix | MatrixElement | list[Any] | Any, list[Any], list[Any]] | None:
|
||||
#liste_beobachtungsarten = ["tachymeter_distanz", "tachymeter_richtung", "tachymeter_zenitwinkel"]
|
||||
|
||||
#liste_beobachtungsarten = ["tachymeter_distanz", "tachymeter_richtung", "tachymeter_zenitwinkel", "gnss_basislinien", "geometrisches_nivellement"]
|
||||
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 = []
|
||||
@@ -63,19 +69,52 @@ class FunktionalesModell:
|
||||
if beobachtungsgruppeID not in liste_orientierungsunbekannte:
|
||||
liste_orientierungsunbekannte.append(beobachtungsgruppeID)
|
||||
#GNSS Block
|
||||
if beobachtungsart == "gnss_basislinien":
|
||||
liste_id_standpunkt_zielpunkt = db_zugriff.get_gnss_beobachtungen_punktnummern()
|
||||
#if beobachtungsart == "gnss_basislinien":
|
||||
# liste_id_standpunkt_zielpunkt = db_zugriff.get_gnss_beobachtungen_punktnummern()
|
||||
|
||||
# for beobachtungenID, standpunkt, zielpunkt in liste_id_standpunkt_zielpunkt:
|
||||
# standpunkt = str(standpunkt).strip()
|
||||
# zielpunkt = str(zielpunkt).strip()
|
||||
# liste_beobachtungen_rohdaten_gnssbasislinien.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)
|
||||
|
||||
#GNSS Block
|
||||
if beobachtungsart == "gnss_basislinien":
|
||||
liste_id_standpunkt_zielpunkt = db_zugriff.get_gnss_beobachtungen_punktnummern("gnss_bx")
|
||||
for beobachtungenID, standpunkt, zielpunkt in liste_id_standpunkt_zielpunkt:
|
||||
standpunkt = str(standpunkt).strip()
|
||||
zielpunkt = str(zielpunkt).strip()
|
||||
liste_beobachtungen_rohdaten_gnssbasislinien.append((beobachtungsart, beobachtungenID, standpunkt, zielpunkt))
|
||||
|
||||
liste_beobachtungen_rohdaten_gnssbasislinien.append(("gnssbx", beobachtungenID, standpunkt, zielpunkt))
|
||||
if standpunkt not in liste_punktnummern:
|
||||
liste_punktnummern.append(standpunkt)
|
||||
if zielpunkt not in liste_punktnummern:
|
||||
liste_punktnummern.append(zielpunkt)
|
||||
|
||||
liste_id_standpunkt_zielpunkt = db_zugriff.get_gnss_beobachtungen_punktnummern("gnss_by")
|
||||
for beobachtungenID, standpunkt, zielpunkt in liste_id_standpunkt_zielpunkt:
|
||||
standpunkt = str(standpunkt).strip()
|
||||
zielpunkt = str(zielpunkt).strip()
|
||||
liste_beobachtungen_rohdaten_gnssbasislinien.append(("gnssby", beobachtungenID, standpunkt, zielpunkt))
|
||||
if standpunkt not in liste_punktnummern:
|
||||
liste_punktnummern.append(standpunkt)
|
||||
if zielpunkt not in liste_punktnummern:
|
||||
liste_punktnummern.append(zielpunkt)
|
||||
|
||||
liste_id_standpunkt_zielpunkt = db_zugriff.get_gnss_beobachtungen_punktnummern("gnss_bz")
|
||||
for beobachtungenID, standpunkt, zielpunkt in liste_id_standpunkt_zielpunkt:
|
||||
standpunkt = str(standpunkt).strip()
|
||||
zielpunkt = str(zielpunkt).strip()
|
||||
liste_beobachtungen_rohdaten_gnssbasislinien.append(("gnssbz", beobachtungenID, standpunkt, zielpunkt))
|
||||
if standpunkt not in liste_punktnummern:
|
||||
liste_punktnummern.append(standpunkt)
|
||||
if zielpunkt not in liste_punktnummern:
|
||||
liste_punktnummern.append(zielpunkt)
|
||||
|
||||
|
||||
if beobachtungsart == "geometrisches_nivellement":
|
||||
liste_id_standpunkt_zielpunkt = db_zugriff.get_nivellement_beobachtungen_punktnummern()
|
||||
|
||||
@@ -214,25 +253,49 @@ class FunktionalesModell:
|
||||
f"{beobachtungenID}_ZW_{beobachtungsgruppeID}_{standpunkt}_{zielpunkt}"
|
||||
)
|
||||
|
||||
#if liste_beobachtungen_rohdaten_gnssbasislinien != []:
|
||||
# for beobachtungsart, beobachtungenID, standpunkt, zielpunkt in liste_beobachtungen_rohdaten_gnssbasislinien:
|
||||
# X_sp, Y_sp, Z_sp = self.dict_punkt_symbole[standpunkt]
|
||||
# X_zp, Y_zp, Z_zp = self.dict_punkt_symbole[zielpunkt]
|
||||
|
||||
# if beobachtungsart == "gnss_basislinien":
|
||||
# beobachtungsgleichung_bx = X_zp - X_sp
|
||||
# beobachtungsgleichung_by = Y_zp - Y_sp
|
||||
# beobachtungsgleichung_bz = Z_zp - Z_sp
|
||||
# liste_beobachtungsgleichungen_gnssbasislinien.append(beobachtungsgleichung_bx)
|
||||
# liste_beobachtungsgleichungen_gnssbasislinien.append(beobachtungsgleichung_by)
|
||||
# liste_beobachtungsgleichungen_gnssbasislinien.append(beobachtungsgleichung_bz)
|
||||
# liste_zeilenbeschriftungen_gnssbasislinien.append(
|
||||
# f"{beobachtungenID}_gnssbx_{standpunkt}_{zielpunkt}")
|
||||
# liste_zeilenbeschriftungen_gnssbasislinien.append(
|
||||
# f"{beobachtungenID}_gnssby_{standpunkt}_{zielpunkt}")
|
||||
# liste_zeilenbeschriftungen_gnssbasislinien.append(
|
||||
# f"{beobachtungenID}_gnssbz_{standpunkt}_{zielpunkt}")
|
||||
|
||||
if liste_beobachtungen_rohdaten_gnssbasislinien != []:
|
||||
for beobachtungsart, beobachtungenID, standpunkt, zielpunkt in liste_beobachtungen_rohdaten_gnssbasislinien:
|
||||
X_sp, Y_sp, Z_sp = self.dict_punkt_symbole[standpunkt]
|
||||
X_zp, Y_zp, Z_zp = self.dict_punkt_symbole[zielpunkt]
|
||||
|
||||
if beobachtungsart == "gnss_basislinien":
|
||||
if beobachtungsart == "gnssbx":
|
||||
beobachtungsgleichung_bx = X_zp - X_sp
|
||||
beobachtungsgleichung_by = Y_zp - Y_sp
|
||||
beobachtungsgleichung_bz = Z_zp - Z_sp
|
||||
liste_beobachtungsgleichungen_gnssbasislinien.append(beobachtungsgleichung_bx)
|
||||
liste_beobachtungsgleichungen_gnssbasislinien.append(beobachtungsgleichung_by)
|
||||
liste_beobachtungsgleichungen_gnssbasislinien.append(beobachtungsgleichung_bz)
|
||||
liste_zeilenbeschriftungen_gnssbasislinien.append(
|
||||
f"{beobachtungenID}_gnssbx_{standpunkt}_{zielpunkt}")
|
||||
|
||||
if beobachtungsart == "gnssby":
|
||||
beobachtungsgleichung_by = Y_zp - Y_sp
|
||||
liste_beobachtungsgleichungen_gnssbasislinien.append(beobachtungsgleichung_by)
|
||||
liste_zeilenbeschriftungen_gnssbasislinien.append(
|
||||
f"{beobachtungenID}_gnssby_{standpunkt}_{zielpunkt}")
|
||||
|
||||
if beobachtungsart == "gnssbz":
|
||||
beobachtungsgleichung_bz = Z_zp - Z_sp
|
||||
liste_beobachtungsgleichungen_gnssbasislinien.append(beobachtungsgleichung_bz)
|
||||
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]
|
||||
@@ -375,7 +438,10 @@ class FunktionalesModell:
|
||||
return A_gesamt, liste_unbekannte, liste_zeilenbeschriftungen_gesamt
|
||||
|
||||
|
||||
def jacobi_matrix_zahlen_iteration_0(self, A_symbolisch, koordinatenart, liste_unbekannte = None, liste_zeilenbeschriftungen_gesamt = None, iterationsnummer = 0):
|
||||
def jacobi_matrix_zahlen_iteration_0(self, A_symbolisch: sp.Matrix, koordinatenart: str,
|
||||
liste_unbekannte: list = None,
|
||||
liste_zeilenbeschriftungen_gesamt: list = None,
|
||||
iterationsnummer: int = 0) -> ndarray[tuple[Any, ...], dtype[Any]] | None:
|
||||
self.liste_beobachtungsvektor_symbolisch = [str(x) for x in liste_zeilenbeschriftungen_gesamt]
|
||||
|
||||
if koordinatenart == "naeherung_us":
|
||||
@@ -421,7 +487,7 @@ class FunktionalesModell:
|
||||
else:
|
||||
print("Koordinaten noch nicht implementiert!")
|
||||
|
||||
def beobachtungsvektor_numerisch(self, liste_beobachtungsvektor_symbolisch):
|
||||
def beobachtungsvektor_numerisch(self, liste_beobachtungsvektor_symbolisch: list) -> MutableDenseMatrix:
|
||||
|
||||
liste_beobachtungsvektor_numerisch = []
|
||||
for beobachtung_symbolisch in liste_beobachtungsvektor_symbolisch:
|
||||
@@ -434,7 +500,7 @@ class FunktionalesModell:
|
||||
Export.matrix_to_csv(r"Zwischenergebnisse\Beobachtungsvektor_Numerisch.csv", [""], liste_beobachtungsvektor_symbolisch, beobachtungsvektor_numerisch, "Beobachtungsvektor")
|
||||
return beobachtungsvektor_numerisch
|
||||
|
||||
def beobachtungsvektor_naeherung_symbolisch(self, liste_beobachtungsvektor_symbolisch):
|
||||
def beobachtungsvektor_naeherung_symbolisch(self, liste_beobachtungsvektor_symbolisch: list) -> sp.Matrix:
|
||||
liste_beobachtungsgleichungen = []
|
||||
self.dict_punkt_symbole = {}
|
||||
liste_punktnummern = []
|
||||
@@ -568,7 +634,9 @@ class FunktionalesModell:
|
||||
|
||||
return beobachtungsvektor_naeherung_symbolisch
|
||||
|
||||
def beobachtungsvektor_naeherung_numerisch_iteration0(self, liste_beobachtungsvektor_symbolisch, beobachtungsvektor_naeherung_symbolisch, iterationsnummer=0):
|
||||
def beobachtungsvektor_naeherung_numerisch_iteration0(self, liste_beobachtungsvektor_symbolisch: list,
|
||||
beobachtungsvektor_naeherung_symbolisch: sp.Matrix,
|
||||
iterationsnummer: int = 0) -> ndarray[tuple[int, int], Any]:
|
||||
#beobachtungsvektor_naeherung_numerisch_iteration0 = beobachtungsvektor_naeherung_symbolisch.xreplace(self.substitutionen_dict)
|
||||
if self.func_beob0 is None:
|
||||
#self.liste_symbole_lambdify = sorted(self.substitutionen_dict.keys(), key=lambda s: str(s))
|
||||
@@ -590,13 +658,17 @@ class FunktionalesModell:
|
||||
|
||||
return beobachtungsvektor_naeherung_numerisch_iteration0
|
||||
|
||||
def unbekanntenvektor_symbolisch(self, liste_unbekannte):
|
||||
def unbekanntenvektor_symbolisch(self, liste_unbekannte: list) -> sp.Matrix:
|
||||
unbekanntenvektor_symbolisch = sp.Matrix(liste_unbekannte)
|
||||
Export.matrix_to_csv(r"Zwischenergebnisse\Unbekanntenvektor_Symbolisch.csv", [""], liste_unbekannte, unbekanntenvektor_symbolisch,
|
||||
"Unbekanntenvektor")
|
||||
return(unbekanntenvektor_symbolisch)
|
||||
|
||||
def unbekanntenvektor_numerisch(self, liste_unbekanntenvektor_symbolisch, unbekanntenvektor_symbolisch, dX_Vektor = None, unbekanntenvektor_neumerisch_vorherige_Iteration = None, iterationsnummer=0):
|
||||
def unbekanntenvektor_numerisch(self, liste_unbekanntenvektor_symbolisch: list,
|
||||
unbekanntenvektor_symbolisch: sp.Matrix,
|
||||
dX_Vektor: np.Matrix = None,
|
||||
unbekanntenvektor_neumerisch_vorherige_Iteration: np.Matrix = None,
|
||||
iterationsnummer: int = 0) -> ndarray[tuple[int, int], Any] | ndarray[tuple[Any, ...], dtype[Any]]:
|
||||
self.liste_unbekanntenvektor_symbolisch = liste_unbekanntenvektor_symbolisch
|
||||
|
||||
#if not hasattr(self, "liste_unbekanntenvektor_symbolisch"):
|
||||
@@ -636,7 +708,7 @@ class FunktionalesModell:
|
||||
"Unbekanntenvektor")
|
||||
return unbekanntenvektor_numerisch
|
||||
|
||||
def unbekanntenvektor_numerisch_to_dict_unbekanntenvektor(self, liste_unbekanntenvektor_symbolisch, unbekanntenvektor_numerisch):
|
||||
def unbekanntenvektor_numerisch_to_dict_unbekanntenvektor(self, liste_unbekanntenvektor_symbolisch: list, unbekanntenvektor_numerisch: np.Matrix) -> dict:
|
||||
dict_unbekanntenvektor_numerisch = {}
|
||||
#index = 0
|
||||
|
||||
@@ -675,8 +747,8 @@ class FunktionalesModell:
|
||||
#index += 3
|
||||
return dict_koordinaten
|
||||
|
||||
def berechnung_dl(self, beobachtungsvektor_numerisch, beobachtungsvektor_naeherung_numerisch,
|
||||
liste_beobachtungsvektor_symbolisch=None, iterationsnummer=0):
|
||||
def berechnung_dl(self, beobachtungsvektor_numerisch: np.Matrix, beobachtungsvektor_naeherung_numerisch: sp.Matrix,
|
||||
liste_beobachtungsvektor_symbolisch: list = None, iterationsnummer: int = 0) -> np.Matrix:
|
||||
dl = beobachtungsvektor_numerisch - beobachtungsvektor_naeherung_numerisch
|
||||
dl = np.asarray(dl, dtype=float)
|
||||
|
||||
@@ -697,7 +769,8 @@ class FunktionalesModell:
|
||||
|
||||
return dl
|
||||
|
||||
def dict_substitutionen_uebergeordnetes_system(self, unbekanntenvektor_aus_iteration = None):
|
||||
def dict_substitutionen_uebergeordnetes_system(self,
|
||||
unbekanntenvektor_aus_iteration: np.Matrix = None) -> dict[Any, Any]:
|
||||
db_zugriff = Datenbankzugriff(self.pfad_datenbank)
|
||||
berechnungen = Berechnungen(self.a, self.b)
|
||||
if unbekanntenvektor_aus_iteration is None:
|
||||
@@ -828,8 +901,8 @@ class FunktionalesModell:
|
||||
|
||||
return substitutionen
|
||||
|
||||
def unbekanntenvektor_numerisch_to_dict_orientierungen(self, liste_unbekanntenvektor_symbolisch,
|
||||
unbekanntenvektor_numerisch):
|
||||
def unbekanntenvektor_numerisch_to_dict_orientierungen(self, liste_unbekanntenvektor_symbolisch: list,
|
||||
unbekanntenvektor_numerisch: np.Matrix) -> dict[Any, Any]:
|
||||
dict_O = {}
|
||||
unbekanntenvektor_numerisch = np.asarray(unbekanntenvektor_numerisch, dtype=float).reshape(-1, 1)
|
||||
for i, symbol in enumerate(liste_unbekanntenvektor_symbolisch):
|
||||
|
||||
Reference in New Issue
Block a user