geoidundolation und export
This commit is contained in:
116
Export.py
116
Export.py
@@ -1,5 +1,6 @@
|
||||
import csv
|
||||
from datetime import datetime
|
||||
from Koordinatentransformationen import Transformationen
|
||||
import numpy as np
|
||||
import os
|
||||
import pandas as pd
|
||||
@@ -61,6 +62,83 @@ class Export:
|
||||
zeile_als_text.append(eintrag_text)
|
||||
writer.writerow(zeile_als_text)
|
||||
|
||||
|
||||
|
||||
@staticmethod
|
||||
def erzeuge_ergebnis_datenframes(
|
||||
pfad_datenbank,
|
||||
pfad_tif_quasigeoidundulation,
|
||||
dict_koordinaten_ausgleichungsergebnis
|
||||
):
|
||||
"""
|
||||
Erzeugt Ergebnis-DataFrames für ausgeglichene Koordinaten in ECEF (XYZ) und UTM.
|
||||
|
||||
Die Funktion nimmt ein Dictionary mit ausgeglichenen geozentrisch-kartesischen Koordinaten
|
||||
(ECEF/XYZ) entgegen, transformiert diese über die Transformationen-Klasse nach ETRS89/UTM
|
||||
(inkl. Höhenangabe; optional unter Nutzung einer Quasigeoidundulations-Datei) und erstellt
|
||||
zwei tabellarische Ergebnisdarstellungen:
|
||||
|
||||
- df_x_final: Geozentrische Koordinaten X/Y/Z [m],
|
||||
- df_utm_final: UTM-Koordinaten (Rechtswert/Hochwert/Höhe) [m].
|
||||
|
||||
:param pfad_datenbank: Pfad zur SQLite-Datenbank (für Koordinaten-/Transformationszugriffe).
|
||||
:type pfad_datenbank: str
|
||||
:param pfad_tif_quasigeoidundulation: Pfad zu Quasigeoidundulationsdaten als GeoTIFF (optional, für Höhen/PROJ).
|
||||
:type pfad_tif_quasigeoidundulution: str | None
|
||||
:param dict_koordinaten_ausgleichungsergebnis: Dictionary der ausgeglichenen ECEF-Koordinaten je Punkt.
|
||||
:type dict_koordinaten_ausgleichungsergebnis: dict
|
||||
:return: Tuple aus DataFrame der ECEF-Koordinaten (XYZ) und DataFrame der UTM-Koordinaten.
|
||||
:rtype: tuple[pandas.DataFrame, pandas.DataFrame]
|
||||
"""
|
||||
|
||||
# Transformation initialisieren
|
||||
trafos = Transformationen(pfad_datenbank)
|
||||
|
||||
dict_koordinaten_utm = trafos.ecef_to_utm(
|
||||
dict_koordinaten_ausgleichungsergebnis,
|
||||
pfad_tif_quasigeoidundulation
|
||||
)
|
||||
|
||||
namen = list(dict_koordinaten_ausgleichungsergebnis.keys())
|
||||
|
||||
# SymPy-Matrizen zu Liste
|
||||
koordinaten_liste = []
|
||||
for k in namen:
|
||||
matrix_werte = dict_koordinaten_ausgleichungsergebnis[k]
|
||||
koordinaten_liste.append([
|
||||
float(matrix_werte[0]),
|
||||
float(matrix_werte[1]),
|
||||
float(matrix_werte[2])
|
||||
])
|
||||
|
||||
# DataFrame geozentrisch
|
||||
df_x_final = pd.DataFrame(
|
||||
koordinaten_liste,
|
||||
columns=['X [m]', 'Y [m]', 'Z [m]'],
|
||||
index=namen
|
||||
)
|
||||
df_x_final.index.name = 'Punktnummer'
|
||||
|
||||
# DataFrame UTM
|
||||
utm_flach = {
|
||||
k: np.array(v).flatten().tolist()
|
||||
for k, v in dict_koordinaten_utm.items()
|
||||
}
|
||||
|
||||
df_utm_final = pd.DataFrame.from_dict(
|
||||
utm_flach,
|
||||
orient='index',
|
||||
columns=['Rechtswert [m]', 'Hochwert [m]', 'Höhe [m]']
|
||||
)
|
||||
df_utm_final.index.name = 'Punktnummer'
|
||||
|
||||
# Zahlenformatierung
|
||||
df_x_final = df_x_final.map(lambda val: f"{val:.4f}")
|
||||
df_utm_final = df_utm_final.map(lambda val: f"{val:.4f}")
|
||||
|
||||
return df_x_final, df_utm_final
|
||||
|
||||
|
||||
def speichere_html_protokoll(metadaten: dict, ergebnisse: dict) -> None:
|
||||
"""Erzeugt ein HTML-Protokoll der Ausgleichungsergebnisse und speichert es als Datei.
|
||||
|
||||
@@ -79,7 +157,6 @@ class Export:
|
||||
:return: None
|
||||
:rtype: None
|
||||
"""
|
||||
|
||||
for key in ergebnisse:
|
||||
wert = ergebnisse[key]
|
||||
|
||||
@@ -92,7 +169,7 @@ class Export:
|
||||
elif isinstance(wert, dict):
|
||||
ergebnisse[key] = pd.DataFrame([wert])
|
||||
|
||||
# Pfad für den Ordner erstellen
|
||||
# Pfad für den Ordner
|
||||
ordner = "Protokolle"
|
||||
if not os.path.exists(ordner):
|
||||
os.makedirs(ordner)
|
||||
@@ -100,7 +177,7 @@ class Export:
|
||||
dateiname = f"{ordner}/Protokoll_{metadaten['projekt']}.html"
|
||||
abs_path = os.path.abspath(dateiname)
|
||||
|
||||
# HTML Inhalt zusammenbauen
|
||||
# HTML Inhalt
|
||||
html_content = f"""
|
||||
<!DOCTYPE html>
|
||||
<html lang="de">
|
||||
@@ -211,39 +288,6 @@ class Export:
|
||||
<h3 id="koordinaten_utm">13. Koordinaten UTM</h3>
|
||||
{ergebnisse['df_koordinaten_utm'].to_html(index=True)}
|
||||
|
||||
<h3>1. Globaltest</h3>
|
||||
{ergebnisse['df_globaltest'].to_html(index=False)}
|
||||
|
||||
<h3>2. Redundanzanteile</h3>
|
||||
{ergebnisse['df_redundanz'].to_html(index=False)}
|
||||
|
||||
<h3>2. Lokaltest (data snooping)</h3>
|
||||
{ergebnisse['df_lokaltest'].to_html(index=False)}
|
||||
|
||||
<h3>2. Varianzkomponentenschätzung</h3>
|
||||
{ergebnisse['df_vks'].to_html(index=False)}
|
||||
|
||||
<h3>2. Äussere Zuverlässigkeit</h3>
|
||||
{ergebnisse['df_aeussere_zuver'].to_html(index=False)}
|
||||
|
||||
<h3>2. Standardabweichungen und Helmert'scher Punktfehler</h3>
|
||||
{ergebnisse['df_punktfehler'].to_html(index=False)}
|
||||
|
||||
<h3>3. Standardellipsen</h3>
|
||||
{ergebnisse['df_ellipsen'].to_html(index=False)}
|
||||
|
||||
<h3>3. Konfidenzellipsen</h3>
|
||||
{ergebnisse['df_konfidenzellipsen'].to_html(index=False)}
|
||||
|
||||
<h3>3. Konfidenzellipsen im ENU-System</h3>
|
||||
{ergebnisse['df_konfidenzellipsen_enu'].to_html(index=False)}
|
||||
|
||||
<h3>3. Koordinaten Geozentrisch Kartesisch</h3>
|
||||
{ergebnisse['df_koordinaten_geozentrisch_kartesisch'].to_html(index=True)}
|
||||
|
||||
<h3>3. Koordinaten UTM</h3>
|
||||
{ergebnisse['df_koordinaten_utm'].to_html(index=True)}
|
||||
|
||||
<div class="footer">
|
||||
Erstellt automatisch am {datetime.now().strftime('%d.%m.%Y um %H:%M:%S')}
|
||||
</div>
|
||||
|
||||
Reference in New Issue
Block a user