{ "cells": [ { "cell_type": "code", "id": "2bc687b1b4adb7bd", "metadata": { "ExecuteTime": { "end_time": "2026-02-05T14:00:31.786023Z", "start_time": "2026-02-05T14:00:29.848681Z" } }, "source": [ "# Zelle 1: Import von Python-Modulen und Bibliotheken\n", "\n", "from datetime import datetime\n", "import importlib\n", "from IPython.display import HTML\n", "from IPython.display import display\n", "import numpy as np\n", "import pandas as pd\n", "\n", "import Berechnungen\n", "import Datenbank\n", "import Export\n", "import Funktionales_Modell\n", "import Import\n", "import Koordinatentransformationen\n", "import Netzqualitaet_Genauigkeit\n", "import Netzqualitaet_Zuverlaessigkeit\n", "from Parameterschaetzung import Iterationen\n", "import Proben\n", "import Varianzkomponentenschaetzung" ], "outputs": [], "execution_count": 1 }, { "cell_type": "code", "id": "4f7efd7ba6ec18f9", "metadata": { "ExecuteTime": { "end_time": "2026-02-05T14:00:31.793259Z", "start_time": "2026-02-05T14:00:31.788027Z" } }, "source": [ "# Zelle 2: Allgemeine Einstellungen\n", "\n", "# Auswahl der Datumsdefinition (Aktuell ist lediglich die weiche Lagerung implementiert)\n", "datumfestlegung = \"weiche Lagerung\"\n", "\n", "# Übergabe der großen und kleinen Halbachse des Referenzellipsoids (aktuell GRS80)\n", "a = 6378137.0 #m\n", "b = 6356752.314 #m\n", "\n", "# Pfad zur SQLite-Datenbank (wird angelegt, falls nicht vorhanden)\n", "pfad_datenbank = r\"Campusnetz.db\"\n", "\n", "# Pfad zum Quasigeoid-Modell GCG 2016 des BKG\n", "pfad_tif_quasigeoidundolation = r\"Daten\\GCG2016v2023.tif\"\n", "\n", "# Alle während jeder Iteration der Parameterschätzung erstellten Vektoren und Matrizenin einer CSV-Datei im Ordner Zwischenergebnisse speichern (Auf True setzen, wenn gewünscht)\n", "speichern_in_csv = False" ], "outputs": [], "execution_count": 2 }, { "cell_type": "code", "id": "57fcd841405b7866", "metadata": { "ExecuteTime": { "end_time": "2026-02-05T14:00:31.938578Z", "start_time": "2026-02-05T14:00:31.798396Z" } }, "source": [ "# Zelle 3: SQLite-Datenbank initialisieren und Klassen laden\n", "\n", "# Datenbank anlegen (falls nicht vorhanden)\n", "Datenbank.Datenbank_anlegen(pfad_datenbank)\n", "\n", "# Klassen aus eigenen Pythondateien initialisieren\n", "db_zugriff = Datenbank.Datenbankzugriff(pfad_datenbank)\n", "fm = Funktionales_Modell.FunktionalesModell(pfad_datenbank, a, b, pfad_tif_quasigeoidundolation)\n", "imp = Import.Import(pfad_datenbank, a, b)\n", "iterat = Iterationen(pfad_datenbank, pfad_tif_quasigeoidundolation, a, b)\n", "trafos = Koordinatentransformationen.Transformationen(pfad_datenbank)\n", "vks = Varianzkomponentenschaetzung.VKS(pfad_datenbank)" ], "outputs": [], "execution_count": 3 }, { "metadata": { "ExecuteTime": { "end_time": "2026-02-05T14:00:32.562111Z", "start_time": "2026-02-05T14:00:32.496934Z" } }, "cell_type": "code", "source": [ "# Zelle 4: Ausgabe der bereits vorhandenen Instrumente\n", "\n", "db_zugriff.tabelle_instrumente_aus_db()" ], "id": "2cf681b8ca7f268", "outputs": [ { "data": { "text/plain": [ "" ], "text/html": [ "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
InstrumenteIDTypBezeichnung
1TachymeterTrimble S9
2AnschlusspunktelA
3NivellierTrimble DiNi 0.3
4GNSSGNSS-Rover
\n" ] }, "metadata": {}, "output_type": "display_data", "jetTransient": { "display_id": null } } ], "execution_count": 4 }, { "metadata": { "ExecuteTime": { "end_time": "2026-02-05T14:00:39.124168Z", "start_time": "2026-02-05T14:00:39.112708Z" } }, "cell_type": "code", "source": [ "# Zelle 5: Instrumente anlegen\n", "\n", "# Syntax: db_zugriff.set_instrument(Instrumententyp, Bezeichnung, [Beobachtungsgruppen])\n", "# Hinweis: Alle GNSS-Rover sind als ein Instrument anzulegen!\n", "# Sind Instrumente bereits in der Datenbank vorhanden, wird der Import übersprungen.\n", "# Änderungen an bestehenden Instrumenten sind nicht möglich. In diesem Fall ist ein neues Instrument anlegen.\n", "\n", "db_zugriff.set_instrument(\n", " \"Tachymeter\", \"Trimble S9\", [\"Tachymeter_Streckenbeobachtungen\", \"Tachymeter_Richtungsbeobachtungen\", \"Tachymeter_Zenitwinkelbeobachtungen\"\n", " ])\n", "db_zugriff.set_instrument(\n", " \"Nivellier\", \"Trimble DiNi 0.3\", [\"Nivellier_Hoehendifferenzbeobachtungen\"\n", " ])\n", "db_zugriff.set_instrument(\n", " \"GNSS\", \"GNSS-Rover\", [\"GNSS-Rover_Basislinienbeobachtungen\"\n", " ])" ], "id": "990c372312c1d8f9", "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Das Instrument Trimble S9 ist bereits in der Datenbank vorhanden.\n", "Das Instrument Trimble DiNi 0.3 ist bereits in der Datenbank vorhanden.\n", "Das Instrument GNSS-Rover ist bereits in der Datenbank vorhanden.\n" ] } ], "execution_count": 5 }, { "metadata": { "ExecuteTime": { "end_time": "2026-02-05T14:00:39.720324Z", "start_time": "2026-02-05T14:00:39.713477Z" } }, "cell_type": "code", "source": [ "# Zelle 6: Ausgabe der bereits vorhandenen Genauigkeitsangaben a-priori\n", "\n", "db_zugriff.tabelle_genauigkeiten_aus_db()" ], "id": "3a90f746c44a1ebb", "outputs": [ { "data": { "text/plain": [ "" ], "text/html": [ "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
instrumenteIDbeobachtungsartstabw_apriori_konstantstabw_apriori_streckenprop
1Tachymeter_Richtung0.000002nan
1Tachymeter_Strecke0.0008001.000000
1Tachymeter_Zenitwinkel0.000002nan
3Geometrisches_Nivellement0.0001000.300000
\n" ] }, "metadata": {}, "output_type": "display_data", "jetTransient": { "display_id": null } } ], "execution_count": 6 }, { "metadata": { "ExecuteTime": { "end_time": "2026-02-05T14:00:40.399822Z", "start_time": "2026-02-05T14:00:40.386179Z" } }, "cell_type": "code", "source": [ "# Zelle 7: Genauigkeiten a-priori zu den Instrumenten erfassen\n", "\n", "# Syntax: db_zugriff.set_genauigkeiten(InstrumentenID, Beobachtungsgruppe, Standardabweichung_konstant, Standardabweichung_streckenproportional)\n", "\n", "# Einheit der Eingaben:\n", "# - stabw_konstant:\n", "# - Winkelbeobachtungen (Richtung, Zenitwinkel): Standardabweichung in mgon\n", "# - Strecken: Standardabweichung in m (auf die Strecke bezogener absoluter Anteil)\n", "# - Nivellement: Standardabweichung in m pro 1 km Doppelnivellement\n", "# - stabw_streckenproportional (optional): streckenproportionaler Anteil in ppm\n", "\n", "# Sind Genauigkeitsangaben bereits in der Datenbank vorhanden, wird der Import übersprungen.\n", "# Änderungen sind möglich.\n", "\n", "db_zugriff.set_genauigkeiten(1, \"Tachymeter_Richtung\", 0.15)\n", "db_zugriff.set_genauigkeiten(1, \"Tachymeter_Strecke\", 0.8, 1)\n", "db_zugriff.set_genauigkeiten(1, \"Tachymeter_Zenitwinkel\", 0.15)\n", "db_zugriff.set_genauigkeiten(3, \"Geometrisches_Nivellement\", 0.1, 0.3)" ], "id": "107d51b8dd3b82cf", "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Die Genauigkeitsangabe für Tachymeter_Richtung (Instrument: Trimble S9) wurde aktualisiert.\n", "Die Genauigkeitsangabe für Tachymeter_Strecke (Instrument: Trimble S9) wurde aktualisiert.\n", "Die Genauigkeitsangabe für Tachymeter_Zenitwinkel (Instrument: Trimble S9) wurde aktualisiert.\n", "Die Genauigkeitsangabe für Geometrisches_Nivellement (Instrument: Trimble DiNi 0.3) wurde aktualisiert.\n" ] } ], "execution_count": 7 }, { "cell_type": "code", "id": "b28afe0c64aa59d6", "metadata": { "ExecuteTime": { "end_time": "2026-02-05T14:00:41.093891Z", "start_time": "2026-02-05T14:00:40.992896Z" } }, "source": [ "# Zelle 8: Import Tachymeter-Datensätze\n", "# Hinweis: Sind die Dateien bereits für den Import verwendet worden, wird der Import abgebrochen.\n", "\n", "# CSV-Datei mit den Koordinaten im Lokalen-Horizontsystem aus dem Tachymeterexport\n", "pfad_datei_tachymeter_koordinaten = r\"Daten\\campsnetz_koordinaten_plus_nachmessungen.csv\"\n", "\n", "# CSV-Datei mit den Beobachtungen aus dem Tachymeterexport\n", "pfad_datei_tachymeter_beobachtungen_csv = r\"Daten\\campsnetz_beobachtungen_plus_nachmessungen.csv\"\n", "\n", "# JXL-Datei mit den Beobachtungen aus dem Tachymeterexport (für die Korrektur der gerundeten Daten in der CSV-Datei)\n", "pfad_datei_tachymeter_beobachtungen_jxl = r\"Daten\\campusnetz_bereinigt_plus_nachmessung_neu.jxl\"\n", "\n", "# Dateiname der korrigierten und erweiterten CSV-Datei mit den Tachymeterbeobachtungen\n", "pfad_datei_tachymeterbeobachtungen_korrigiert = r\"Daten\\campsnetz_beobachtungen_plus_nachmessungen_korrigiert.csv\"\n", "\n", "# InstrumentenID des Tachymeters (siehe Zelle 4)\n", "instrumentenID_Tachymeter = 1\n", "\n", "# Verarbeitung und Import der Tachymeterdatensätze\n", "imp.import_koordinaten_lh_tachymeter(pfad_datei_tachymeter_koordinaten)\n", "imp.korrigiere_beobachtungen_tachymeter_csv_mit_jxl(pfad_datei_tachymeter_beobachtungen_csv, pfad_datei_tachymeter_beobachtungen_jxl, pfad_datei_tachymeterbeobachtungen_korrigiert)\n", "imp.import_beobachtungen_tachymeter(pfad_datei_tachymeterbeobachtungen_korrigiert, instrumentenID_Tachymeter)" ], "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Der Import wurde abgebrochen, weil mindestens ein Teil der Punktnummern aus der Datei Daten\\campsnetz_koordinaten_plus_nachmessungen.csv bereits in der Datenbank vorhanden ist. Bitte in der Datei ändern und Import wiederholen.\n", "Korrektur erfolgreich abgeschlossen. Ausgabe: Daten\\campsnetz_beobachtungen_plus_nachmessungen_korrigiert.csv\n", "Ersetzungen in der CSV-Datei (Rundung -> JXL volle Nachkommastellen): {'Hz': 1639, 'Z': 1838, 'SD': 747}\n", "Der Import wurde abgebrochen, weil die Beobachtungen aus der Datei Daten\\campsnetz_beobachtungen_plus_nachmessungen_korrigiert.csv bereits in der Datenbank vorhanden sind.\n" ] } ], "execution_count": 8 }, { "metadata": { "ExecuteTime": { "end_time": "2026-02-05T14:00:41.667677Z", "start_time": "2026-02-05T14:00:41.657349Z" } }, "cell_type": "code", "source": [ "# Zelle 9: Import GNSS-Datensätze\n", "# Hinweis: Sind die Dateien bereits importiert, wird der Import übersprungen.\n", "\n", "# CSV-Datei mit den Koordinaten der statischen GNSS-Messung als export aus LeicaGeoOffice\n", "pfad_koordinaten_gnss = r\"Daten\\Koordinaten_ohne0648und10002.csv\"\n", "\n", "# TXT-Datei mit den Basislinien und den Kovarianzen als Export aus LeicaGeoOffice\n", "pfad_basislinien_gnss = r\"Daten\\Basislinien_ohne0648und10002.asc.txt\"\n", "\n", "# Standardabweichung a priori der Koordinaten der SAPOS-Referenzstationen in X, Y und Z für die weiche Lagerung\n", "genauigkeit_sapos_referenzstationen = [0.005, 0.005, 0.008]\n", "\n", "# InstrumentenID aller GNSS-Empfänger (siehe Zelle 4)\n", "instrumentenID_GNSS_Empfaenger = 4\n", "\n", "# Import ausführen\n", "imp.import_koordinaten_gnss(pfad_koordinaten_gnss, genauigkeit_sapos_referenzstationen)\n", "imp.import_basislinien_gnss(pfad_basislinien_gnss, instrumentenID_GNSS_Empfaenger)" ], "id": "75d9d9edbbbc7bb7", "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Der Import wurde abgebrochen, weil die Beobachtungen aus der Datei Daten\\Basislinien_ohne0648und10002.asc.txt bereits in der Datenbank vorhanden sind.\n" ] } ], "execution_count": 9 }, { "cell_type": "code", "id": "2d8a0533726304a8", "metadata": { "ExecuteTime": { "end_time": "2026-02-05T14:00:51.315237Z", "start_time": "2026-02-05T14:00:42.322654Z" } }, "source": [ "# Zelle 10: Helmerttransformation\n", "\n", "# Transformationsparameter zwischen lokalem-Horizontsystem aus dem Tachymeterexport und ETRS89 / DREF 91 (Realisierung 2025) berechnen\n", "transformationsparameter = trafos.Helmerttransformation_Euler_Transformationsparameter_berechnen()\n", "\n", "# Transformationsparameter anwenden und Koordinaten im Zielsystem berechnen\n", "koordinaten_transformiert = trafos.Helmerttransformation(transformationsparameter)\n", "\n", "# Koordinaten als Näherungen für die Ausgleichung in die Datenbank speichern\n", "db_zugriff.set_koordinaten(koordinaten_transformiert, \"naeherung_us\")" ], "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Anzahl verwendete Punkte für die Helmerttransformation: 68\n", "Iteration Nr.1 abgeschlossen\n", "Iteration Nr.2 abgeschlossen\n", "Iteration Nr.3 abgeschlossen\n", "Iteration Nr.4 abgeschlossen\n", "Iteration Nr.5 abgeschlossen\n", "Koordinaten berechnet aus Helmerttransformation:\n", "10001: 3794901.521, 546745.584, 5080065.755\n", "10002: 3794867.011, 546729.617, 5080092.695\n", "10003: 3794841.061, 546735.120, 5080111.557\n", "10004: 3794803.469, 546714.145, 5080141.394\n", "10005: 3794793.850, 546722.325, 5080147.942\n", "10006: 3794766.364, 546707.643, 5080169.743\n", "10007: 3794831.055, 546758.730, 5080116.675\n", "10008: 3794783.870, 546746.646, 5080152.758\n", "10009: 3794767.479, 546740.091, 5080165.961\n", "10010: 3794758.643, 546767.670, 5080169.471\n", "10011: 3794894.930, 546833.119, 5080061.164\n", "10012: 3794853.608, 546805.240, 5080094.900\n", "10013: 3794849.615, 546826.872, 5080095.440\n", "10014: 3794838.746, 546812.367, 5080105.181\n", "10015: 3794839.472, 546793.520, 5080106.782\n", "10016: 3794826.666, 546788.731, 5080116.878\n", "10017: 3794825.022, 546831.703, 5080113.383\n", "10018: 3794762.253, 546797.694, 5080163.986\n", "10019: 3794800.100, 546833.327, 5080131.731\n", "10020: 3794782.615, 546834.473, 5080145.041\n", "10021: 3794776.034, 546833.743, 5080150.018\n", "10022: 3794778.341, 546841.753, 5080147.280\n", "10023: 3794780.799, 546848.104, 5080144.929\n", "10024: 3794772.819, 546857.098, 5080149.838\n", "10025: 3794774.211, 546871.813, 5080147.362\n", "10026: 3794753.858, 546827.445, 5080167.092\n", "10027: 3794757.593, 546874.333, 5080159.319\n", "10028: 3794889.671, 546908.764, 5080056.920\n", "10029: 3794845.029, 546914.918, 5080089.105\n", "10030: 3794845.357, 546901.029, 5080090.362\n", "10031: 3794821.763, 546877.550, 5080110.752\n", "10032: 3794807.851, 546888.488, 5080119.750\n", "10033: 3794800.019, 546874.654, 5080127.209\n", "10034: 3794886.107, 546965.700, 5080053.411\n", "10035: 3794845.950, 546961.514, 5080084.091\n", "10036: 3794815.055, 546969.597, 5080106.065\n", "10037: 3794800.626, 546960.749, 5080117.709\n", "10038: 3794806.325, 546929.732, 5080116.901\n", "10039: 3794804.164, 546914.733, 5080120.142\n", "10040: 3794780.721, 546956.425, 5080133.161\n", "10041: 3794778.154, 546925.879, 5080138.723\n", "10042: 3794758.957, 546937.061, 5080151.609\n", "10043: 3794747.274, 546919.151, 5080162.149\n", "10044: 3794752.686, 546958.324, 5080154.237\n", "10045: 3794881.901, 547019.784, 5080050.718\n", "10046: 3794846.580, 547012.997, 5080077.441\n", "10047: 3794831.534, 547018.239, 5080088.124\n", "10048: 3794809.105, 547017.302, 5080105.013\n", "10049: 3794786.888, 547021.076, 5080121.441\n", "10050: 3794766.769, 547012.526, 5080137.481\n", "10051: 3794767.056, 546988.699, 5080139.995\n", "10052: 3794743.624, 546984.416, 5080157.827\n", "10053: 3794748.143, 547017.574, 5080150.924\n", "10054: 3794889.163, 547086.949, 5080038.116\n", "10055: 3794838.849, 547081.903, 5080075.695\n", "10056: 3794825.037, 547094.810, 5080084.484\n", "10057: 3794800.815, 547078.670, 5080104.567\n", "10058: 3794766.103, 547091.752, 5080129.113\n", "10059: 3794736.830, 547079.447, 5080152.362\n", "666: 3794868.128, 547082.279, 5080054.295\n", "812: 3794850.535, 547010.934, 5080075.089\n", "816: 3794817.790, 547004.825, 5080100.040\n", "FH11: 3794853.321, 546973.225, 5080077.224\n", "FH13: 3794832.559, 546754.704, 5080116.651\n", "FH14: 3794853.863, 546972.809, 5080076.935\n", "FH15: 3794794.213, 546870.696, 5080132.914\n", "FH3: 3794810.977, 547013.441, 5080105.068\n", "FH4: 3794773.597, 546985.341, 5080135.930\n", "Streckendifferenzen zwischen Näherungskoordinate aus statischer GNSS-Messung und ergebnis der Helmerttransformation:\n", "[0.027793, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.025879, 0.0, 0.0, 0.0, 0.0, 0.0, 0.016527, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.01604, 0.0, 0.066139, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.07164, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.025138, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.125881, 0.0, 0.0, 0.0, 0.0, 0.142477, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]\n", "\n", "Differenz Schwerpunkt zwischen Näherungskoordinate aus statischer GNSS-Messung und ergebnis der Helmerttransformation::\n", "Matrix([[-2.59e-10], [6.85e-12], [-2.32e-10]])\n", "Betrag der Schwerpunkt-Differenz zwischen Näherungskoordinate aus statischer GNSS-Messung und ergebnis der Helmerttransformation::\n", "0.000m\n" ] } ], "execution_count": 10 }, { "cell_type": "code", "id": "ed9be38e35cfc619", "metadata": { "ExecuteTime": { "end_time": "2026-02-05T14:00:51.354852Z", "start_time": "2026-02-05T14:00:51.347388Z" } }, "source": [ "# Zelle 11: Anschlusspunkte für die weiche Lagerung festlegen\n", "# Definieren Sie hier die Punktnummern, die als Anschlusspunkte für die weiche Lagerung verwendet werden sollen.\n", "\n", "# X-Koordinate der Punkte verwenden\n", "liste_koordinaten_x = []\n", "\n", "# Y-Koordinate der Punkte verwenden\n", "liste_koordinaten_y = []\n", "\n", "# Z-Koordinate der Punkte verwenden\n", "liste_koordinaten_z = []\n", "\n", "# X, Y und Z-Koordinate der Punkte verwenden\n", "liste_koordinaten_x_y_z = [\"0645\", \"0656\", \"0995\", \"1675\", \"ESTE\", \"GNA2\"]\n", "\n", "# Änderungen der zu verwendenden Anschlusspunkte in die Datenbank übernehmen\n", "db_zugriff.set_datumskoordinaten(liste_koordinaten_x, liste_koordinaten_y, liste_koordinaten_z, liste_koordinaten_x_y_z)" ], "outputs": [], "execution_count": 11 }, { "cell_type": "code", "id": "2d2156381d974d94", "metadata": { "ExecuteTime": { "end_time": "2026-02-05T14:00:51.361580Z", "start_time": "2026-02-05T14:00:51.354852Z" } }, "source": [ "# Zelle 12: Anschlusspunkte für die weiche Lagerung entfernen\n", "# Definieren Sie hier die Punktnummern, die aus den Anschlusspunkten entfernt werden sollen.\n", "\n", "# X-Koordinate der Punkte entfernen\n", "liste_koordinaten_x = []\n", "\n", "# Y-Koordinate der Punkte verwenden\n", "liste_koordinaten_y = []\n", "\n", "# Z-Koordinate der Punkte verwenden\n", "liste_koordinaten_z = []\n", "\n", "# X, Y und Z-Koordinate der Punkte verwenden\n", "liste_koordinaten_x_y_z = []\n", "\n", "# Änderungen der zu verwendenden Anschlusspunkte in die Datenbank übernehmen\n", "db_zugriff.set_datumskoordinaten_to_neupunkte(liste_koordinaten_x, liste_koordinaten_y, liste_koordinaten_z, liste_koordinaten_x_y_z)" ], "outputs": [], "execution_count": 12 }, { "cell_type": "code", "id": "c2db29680c53f8c4", "metadata": { "ExecuteTime": { "end_time": "2026-02-05T14:00:51.372347Z", "start_time": "2026-02-05T14:00:51.364107Z" } }, "source": [ "# Zelle 13: Nivellement-Beobachtungen importieren\n", "# Hinweis: Ist die Datei bereits importiert, wird der Import übersprungen.\n", "\n", "# CSV-Datei mit den Beobachtungen des geometrischen Nivellements\n", "pfad_datei_nivellement = r\"Daten\\Niv_bereinigt.DAT.csv\"\n", "\n", "# InstrumentenID des Nivelliers (siehe Zelle 4)\n", "instrumentenID_Nivellier = 3\n", "\n", "# Datenvorverarbeitung und Import in die Datenbank ausführen\n", "dict_punkthoehen_naeherung_niv, liste_punkte_in_db = imp.vorbereitung_import_beobachtungen_nivellement_naeherung_punkthoehen(pfad_datei_nivellement, instrumentenID_Nivellier)\n", "imp.import_beobachtungen_nivellement_RVVR(pfad_datei_nivellement, instrumentenID_Nivellier)" ], "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Der Import wurde abgebrochen, weil die Beobachtungen aus der Datei Daten\\Niv_bereinigt.DAT.csv bereits in der Datenbank vorhanden sind.\n", "Der Import wurde abgebrochen, weil die Beobachtungen aus der Datei Daten\\Niv_bereinigt.DAT.csv bereits in der Datenbank vorhanden sind.\n" ] } ], "execution_count": 13 }, { "metadata": { "jupyter": { "is_executing": true }, "ExecuteTime": { "start_time": "2026-02-05T14:00:51.377686Z" } }, "cell_type": "code", "source": [ "# Zelle 14: Parameterschätzung iterativ berechnen\n", "# Hinweis: Die Ausführung dauert je nach Rechenkapazität zwischen 13 und 20 Minuten.\n", "\n", "# Berechnung durchführen\n", "A_matrix_numerisch, Jacobimatrix_symbolisch_liste_unbekannte, Jacobimatrix_symbolisch_liste_beobachtungsvektor, x, dx, dl_k, ausgabe_parameterschaetzung = iterat.iterationen(datumfestlegung, speichern_in_csv)\n", "\n", "# Koordinaten der letzten Iteration speichern\n", "dict_koordinaten_ausgleichungsergebnis = fm.unbekanntenvektor_numerisch_to_dict_unbekanntenvektor(Jacobimatrix_symbolisch_liste_unbekannte, x)" ], "id": "7d025ca293d73188", "outputs": [], "execution_count": null }, { "metadata": {}, "cell_type": "code", "source": [ "# Zelle 15: Proben\n", "\n", "# Rechenprobe (ATPV-Probe)\n", "Proben.atpv_probe(A_matrix_numerisch, ausgabe_parameterschaetzung[\"P\"], ausgabe_parameterschaetzung[\"v\"])\n", "\n", "# Hauptprobe\n", "Proben.hauptprobe(A_matrix_numerisch, dx, dl_k, ausgabe_parameterschaetzung[\"v\"])" ], "id": "de8f624059005fdd", "outputs": [], "execution_count": null }, { "metadata": {}, "cell_type": "code", "source": "# ------------------------------- Netzqualitätsmaße -------------------------------", "id": "7d53274224166103", "outputs": [], "execution_count": null }, { "cell_type": "code", "id": "84075bea1f2c44d7", "metadata": {}, "source": [ "# Zelle 16: Gesamtredundanz r\n", "\n", "r_gesamt = Netzqualitaet_Zuverlaessigkeit.Zuverlaessigkeit.gesamtredundanz(A_matrix_numerisch.shape[0], A_matrix_numerisch.shape[1])" ], "outputs": [], "execution_count": null }, { "cell_type": "code", "id": "1797726c5b3af9bf", "metadata": {}, "source": [ "# Zelle 17: s0 a posteriori\n", "\n", "s0_aposteriori = Netzqualitaet_Genauigkeit.Genauigkeitsmaße.berechne_s0apost(ausgabe_parameterschaetzung[\"v\"], ausgabe_parameterschaetzung[\"P\"], r_gesamt)" ], "outputs": [], "execution_count": null }, { "cell_type": "code", "id": "a2fe23d9a19ac2f9", "metadata": {}, "source": [ "# Zelle 18: Redundanzanteile ri\n", "\n", "R, ri, EVi, Redundanzanteile = Netzqualitaet_Zuverlaessigkeit.Zuverlaessigkeit.redundanzanteile_ri(ausgabe_parameterschaetzung[\"Q_vv\"], ausgabe_parameterschaetzung[\"P\"], Jacobimatrix_symbolisch_liste_beobachtungsvektor)" ], "outputs": [], "execution_count": null }, { "cell_type": "code", "id": "14db90a3d4d9118b", "metadata": {}, "source": [ "# Zelle 19: Globaltest des Ausgleichungsmodells\n", "\n", "globaltest = Netzqualitaet_Zuverlaessigkeit.Zuverlaessigkeit.globaltest(r_gesamt=r_gesamt, sigma0_apost=s0_aposteriori, sigma0_apriori=1)" ], "outputs": [], "execution_count": null }, { "cell_type": "code", "id": "1a84fbfb3db101c9", "metadata": {}, "source": [ "# Zelle 20: Lokaltest und innere Zuverlässigkeit\n", "# Bei der Auswahl einer GNSS-Komponente, wie z.B. bx werden automatisch die anderen beiden Kompontenen aus-, bzw. abgewählt. Bitte warten, bis dies automatisch durchführt wurde.\n", "\n", "lokaltest, beta = Netzqualitaet_Zuverlaessigkeit.Zuverlaessigkeit.aufruf_lokaltest(Jacobimatrix_symbolisch_liste_beobachtungsvektor, globaltest[\"alpha\"], ausgabe_parameterschaetzung, ri, s0_aposteriori)\n" ], "outputs": [], "execution_count": null }, { "cell_type": "code", "id": "ebf2c9ef0a1899dc", "metadata": {}, "source": [ "# Zelle 21: Ausgewählte Beobachtungen für weitere Iterationen ausschalten\n", "\n", "db_zugriff.set_beobachtung_ausschalten(lokaltest)" ], "outputs": [], "execution_count": null }, { "metadata": {}, "cell_type": "code", "source": [ "# Zelle 22: Varianzkomponentenschätzung\n", "\n", "vks.varianzkomponten_berechnen(Jacobimatrix_symbolisch_liste_beobachtungsvektor, ausgabe_parameterschaetzung, R)" ], "id": "dd7bfa4df762a4a7", "outputs": [], "execution_count": null }, { "metadata": {}, "cell_type": "code", "source": [ "# Zelle 23: Varianzkomponten anpassen\n", "\n", "vks.vks_ausfuehren()\n", "vks.zeige_vks_tabelle()" ], "id": "edb14958ee00130c", "outputs": [], "execution_count": null }, { "cell_type": "code", "id": "256f4a0805b69e14", "metadata": {}, "source": [ "# Zelle 24: Äußere Zuverlässigkeit\n", "importlib.reload(Netzqualitaet_Zuverlaessigkeit)\n", "\n", "bezeichnungen = [str(s) for s in Jacobimatrix_symbolisch_liste_beobachtungsvektor]\n", "\n", "bezeichnungen = [str(s) for s in Jacobimatrix_symbolisch_liste_beobachtungsvektor]\n", "\n", "lokaltest_ergebnisse = Netzqualitaet_Zuverlaessigkeit.Zuverlaessigkeit.lokaltest_innere_Zuverlaessigkeit(\n", " ausgabe_parameterschaetzung[\"v\"],\n", " ausgabe_parameterschaetzung[\"Q_vv\"],\n", " ri,\n", " bezeichnungen,\n", " s0_aposteriori,\n", " globaltest[\"alpha\"],\n", " beta\n", ")\n", "\n", "Aussen = Netzqualitaet_Zuverlaessigkeit.Zuverlaessigkeit.aeussere_zuverlaessigkeit(\n", " Lokaltest=lokaltest_ergebnisse,\n", " bezeichnung=bezeichnungen,\n", " Qxx=ausgabe_parameterschaetzung[\"Q_xx\"],\n", " A=A_matrix_numerisch,\n", " P=ausgabe_parameterschaetzung[\"P\"],\n", " s0_apost=s0_aposteriori,\n", " unbekannten_liste=Jacobimatrix_symbolisch_liste_unbekannte,\n", " x=x,\n", " ausschliessen=\"lA\"\n", ")\n", "\n", "display(HTML(Aussen.to_html(index=False)))\n", "Aussen.to_excel(r\"Zwischenergebnisse\\Aeussere_Zuverlaessigkeit.xlsx\", index=False)" ], "outputs": [], "execution_count": null }, { "metadata": {}, "cell_type": "code", "source": [ "# Zelle 25: Standardabweichungen der einzelnen Punkte und Helmert'scher Punktfehler (3D)\n", "\n", "Helmertscher_Punktfehler = Netzqualitaet_Genauigkeit.Genauigkeitsmaße.helmert_punktfehler(ausgabe_parameterschaetzung[\"Q_xx\"], s0_aposteriori,Jacobimatrix_symbolisch_liste_unbekannte)" ], "id": "9e6624251a23847d", "outputs": [], "execution_count": null }, { "cell_type": "code", "id": "89fbcfe85fb6e4bb", "metadata": {}, "source": [ "# Zelle 26: Standardellipse bzw. Helmert'sche Fehlerellipsen\n", "\n", "Standardellipse = Netzqualitaet_Genauigkeit.Genauigkeitsmaße.standardellipse(ausgabe_parameterschaetzung[\"Q_xx\"], s0_aposteriori, Jacobimatrix_symbolisch_liste_unbekannte)\n" ], "outputs": [], "execution_count": null }, { "cell_type": "code", "id": "7de561d7eaebb1c2", "metadata": {}, "source": [ "# Zelle 27: Konfidenzellipsen\n", "\n", "Konfidenzellipse = Netzqualitaet_Genauigkeit.Genauigkeitsmaße.konfidenzellipse(ausgabe_parameterschaetzung[\"Q_xx\"], s0_aposteriori, Jacobimatrix_symbolisch_liste_unbekannte, r_gesamt, False)" ], "outputs": [], "execution_count": null }, { "metadata": {}, "cell_type": "code", "source": [ "# Zelle 28: Konfidenzellipsen im ENU-System\n", "\n", "Konfidenzellipse_ENU, R0 = Netzqualitaet_Genauigkeit.Genauigkeitsmaße.konfidenzellipsen_enu(a, b, ausgabe_parameterschaetzung, Jacobimatrix_symbolisch_liste_unbekannte, dict_koordinaten_ausgleichungsergebnis, s0_aposteriori, r_gesamt)" ], "id": "ddc157c0ff21c93e", "outputs": [], "execution_count": null }, { "metadata": {}, "cell_type": "code", "source": [ "# Zelle 29: Netzplot mit Konfidenzellipsen (im ENU-System)\n", "\n", "Koord_ENU = Berechnungen.ENU.transform_Koord_zu_KoordENU(dict_koordinaten_ausgleichungsergebnis, R0)\n", "\n", "Netzqualitaet_Genauigkeit.Plot.netzplot_ellipsen(\n", " Koord_ENU=Koord_ENU,\n", " unbekannten_labels=Jacobimatrix_symbolisch_liste_unbekannte,\n", " beobachtungs_labels=Jacobimatrix_symbolisch_liste_beobachtungsvektor,\n", " df_konf_ellipsen_enu=Konfidenzellipse_ENU,\n", " skalierung=1000\n", ")" ], "id": "94a42bd0a62875ea", "outputs": [], "execution_count": null }, { "metadata": {}, "cell_type": "code", "source": [ "from Koordinatentransformationen import Transformationen\n", "trafos = Transformationen(pfad_datenbank)\n", "\n", "dict_koordinaten_utm = trafos.ecef_to_utm(\n", " dict_koordinaten_ausgleichungsergebnis,\n", " pfad_tif_quasigeoidundolation)\n", "koordinaten_utm = (dict_koordinaten_utm)\n", "print(koordinaten_utm)" ], "id": "844b818e7a3db233", "outputs": [], "execution_count": null }, { "metadata": {}, "cell_type": "code", "source": [ "# 1. Wir nutzen dein existierendes 'dict_koordinaten'\n", "# Da stehen nur die echten Punkte drin (74 Stück)\n", "namen = list(dict_koordinaten_ausgleichungsergebnis.keys())\n", "\n", "# Die SymPy-Matrizen aus dem Dictionary in flache Listen umwandeln\n", "koordinaten_liste = []\n", "for k in namen:\n", " matrix_werte = dict_koordinaten_ausgleichungsergebnis[k]\n", " # Umwandlung von SymPy Matrix zu einfachen Floats\n", " koordinaten_liste.append([float(matrix_werte[0]), float(matrix_werte[1]), float(matrix_werte[2])])\n", "\n", "# 2. DataFrame direkt aus der gefilterten Liste erstellen\n", "# Hier passen index (74) und Daten (74 Zeilen) nun perfekt zusammen!\n", "df_x_final = pd.DataFrame(koordinaten_liste, columns=['X [m]', 'Y [m]', 'Z [m]'], index=namen)\n", "df_x_final.index.name = 'Punktnummer'\n", "\n", "# 3. UTM-Daten aufbereiten (wie gehabt)\n", "# Wir stellen sicher, dass wir die Werte aus koordinaten_utm flachklopfen\n", "utm_flach = {k: np.array(v).flatten().tolist() for k, v in koordinaten_utm.items()}\n", "df_utm_final = pd.DataFrame.from_dict(utm_flach, orient='index', columns=['Rechtswert [m]', 'Hochwert [m]', 'Höhe [m]'])\n", "df_utm_final.index.name = 'Punktnummer'\n", "\n", "# 4. Zahlenformatierung (Wissenschaftliche Notation unterdrücken)\n", "df_x_final = df_x_final.map(lambda val: f\"{val:.4f}\")\n", "df_utm_final = df_utm_final.map(lambda val: f\"{val:.4f}\")\n", "\n", "# 5. Export-Dictionary\n", "ergebnisse = {\n", " \"df_globaltest\": globaltest,\n", " \"df_redundanz\": Redundanzanteile,\n", " \"df_ellipsen\": Standardellipse,\n", " \"df_konfidenzellipsen\": Konfidenzellipse,\n", " \"df_koordinaten_geozentrisch_kartesisch\": df_x_final,\n", " \"df_koordinaten_utm\": df_utm_final\n", "}\n", "\n", "# Für die geozentrischen Koordinaten\n", "df_x_final.index.name = 'Punktnummer'\n", "\n", "# Für die UTM-Koordinaten\n", "df_utm_final.index.name = 'Punktnummer'" ], "id": "343b70a659e335f8", "outputs": [], "execution_count": null }, { "metadata": {}, "cell_type": "code", "source": [ "importlib.reload(Export)\n", "# Zelle XX: Erzeugung eines Protokolls der hybriden Netzausgleichung\n", "\n", "# Input (später: an den Anfang des Notebooks schieben)\n", "bearbeiter = input(\"Bearbeiter: \")\n", "projekt = input(\"Projektname: \")\n", "\n", "metadaten = {\n", " \"bearbeiter\": bearbeiter,\n", " \"projekt\": projekt,\n", " \"datum\": datetime.now().strftime(\"%d.%m.%Y\")\n", "}\n", "\n", "\n", "ergebnisse = {\n", " \"df_globaltest\": globaltest,\n", " \"df_redundanz\": Redundanzanteile,\n", " \"df_ellipsen\": Standardellipse,\n", " \"df_konfidenzellipsen\": Konfidenzellipse,\n", " \"df_koordinaten_geozentrisch_kartesisch\": df_x_final,\n", " \"df_koordinaten_utm\": df_utm_final\n", "\n", "}\n", "\n", "Export.Export.speichere_html_protokoll(metadaten, ergebnisse)" ], "id": "23aa13721f563c90", "outputs": [], "execution_count": null }, { "metadata": {}, "cell_type": "code", "outputs": [], "execution_count": null, "source": "", "id": "8525da086619229b" } ], "metadata": { "kernelspec": { "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.14.0" } }, "nbformat": 4, "nbformat_minor": 5 }