{ "cells": [ { "metadata": { "ExecuteTime": { "end_time": "2025-12-31T14:31:22.791868Z", "start_time": "2025-12-31T14:31:18.499348Z" } }, "cell_type": "code", "source": [ "# Hier werden alle verwendeten Pythonmodule importiert\n", "import Datenbank\n", "import Import\n", "import importlib\n", "import Koordinatentransformationen\n", "import sqlite3\n", "import Funktionales_Modell\n", "import Berechnungen\n", "import Parameterschaetzung\n", "import Stochastisches_Modell\n", "from Stochastisches_Modell import StochastischesModell\n", "import Export\n", "import Netzqualität_Genauigkeit\n", "import Datumsfestlegung" ], "id": "2bc687b1b4adb7bd", "outputs": [], "execution_count": 1 }, { "metadata": { "ExecuteTime": { "end_time": "2025-12-31T14:31:22.804722Z", "start_time": "2025-12-31T14:31:22.799564Z" } }, "cell_type": "code", "source": [ "importlib.reload(Datenbank)\n", "importlib.reload(Import)\n", "# Anlegen der Datenbank, wenn nicht vorhanden\n", "pfad_datenbank = r\"Campusnetz.db\"\n", "Datenbank.Datenbank_anlegen(pfad_datenbank)\n", "\n", "# Import vervollständigen\n", "imp = Import.Import(pfad_datenbank)\n", "db_zugriff = Datenbank.Datenbankzugriff(pfad_datenbank)" ], "id": "57fcd841405b7866", "outputs": [], "execution_count": 2 }, { "metadata": { "ExecuteTime": { "end_time": "2025-12-31T14:31:22.821998Z", "start_time": "2025-12-31T14:31:22.812409Z" } }, "cell_type": "code", "source": [ "# Import der Koordinatendatei(en) vom Tachymeter\n", "pfad_datei = r\"Daten\\campsnetz_koordinaten_bereinigt.csv\"\n", "imp.import_koordinaten_lh_tachymeter(pfad_datei)" ], "id": "6ecde908841d1212", "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Der Import wurde abgebrochen, weil mindestens ein Teil der Punktnummern aus der Datei Daten\\campsnetz_koordinaten_bereinigt.csv bereits in der Datenbank vorhanden ist. Bitte in der Datei ändern und Import wiederholen.\n" ] } ], "execution_count": 3 }, { "metadata": { "ExecuteTime": { "end_time": "2025-12-31T14:31:22.843035Z", "start_time": "2025-12-31T14:31:22.828326Z" } }, "cell_type": "code", "source": [ "importlib.reload(Datenbank)\n", "db_zugriff = Datenbank.Datenbankzugriff(pfad_datenbank)\n", "# Transformationen in ETRS89 / DREF91 Realisierung 2025\n", "print(db_zugriff.get_koordinaten(\"naeherung_lh\"))" ], "id": "daefb156198b46dc", "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "{'10009': Matrix([\n", "[1000.0],\n", "[2000.0],\n", "[ 100.0]]), '10006': Matrix([\n", "[ 1000.0],\n", "[2032.6863],\n", "[ 99.5825]]), '10010': Matrix([\n", "[1011.8143],\n", "[1973.3252],\n", "[ 99.9259]]), '10018': Matrix([\n", "[1008.5759],\n", "[ 1942.762],\n", "[ 100.2553]]), '10008': Matrix([\n", "[979.7022],\n", "[1991.401],\n", "[ 99.732]]), '10005': Matrix([\n", "[ 966.5154],\n", "[2014.6496],\n", "[ 99.72]]), '10003': Matrix([\n", "[ 908.4312],\n", "[1996.1248],\n", "[ 99.7403]]), '10004': Matrix([\n", "[ 954.1536],\n", "[2021.6822],\n", "[ 99.4916]]), '10007': Matrix([\n", "[ 921.7481],\n", "[1973.6201],\n", "[ 99.9176]]), '10001': Matrix([\n", "[ 833.9439],\n", "[1978.3737],\n", "[ 99.8946]]), '10002': Matrix([\n", "[ 875.9684],\n", "[1998.5174],\n", "[ 99.5867]]), '10016': Matrix([\n", "[ 928.2783],\n", "[1944.0082],\n", "[ 100.0459]]), '10011': Matrix([\n", "[844.9567],\n", "[1891.157],\n", "[ 99.8117]]), '10026': Matrix([\n", "[1020.0059],\n", "[1913.8703],\n", "[ 100.3059]]), '10027': Matrix([\n", "[1016.9451],\n", "[1866.2914],\n", "[ 100.3251]]), '10043': Matrix([\n", "[1031.2077],\n", "[1822.4739],\n", "[ 100.3035]]), '10044': Matrix([\n", "[ 1025.976],\n", "[1782.4835],\n", "[ 100.5461]]), '10021': Matrix([\n", "[ 992.7607],\n", "[1904.8854],\n", "[ 100.3533]]), '10020': Matrix([\n", "[ 984.6187],\n", "[1903.3601],\n", "[ 100.3423]]), '10024': Matrix([\n", "[ 997.4831],\n", "[1881.7862],\n", "[ 100.3032]]), '10025': Matrix([\n", "[996.3241],\n", "[1866.844],\n", "[100.4102]]), '10022': Matrix([\n", "[990.0679],\n", "[1896.536],\n", "[100.2194]]), '10023': Matrix([\n", "[ 987.3223],\n", "[1889.8762],\n", "[ 100.343]]), '10019': Matrix([\n", "[ 962.6387],\n", "[1902.3565],\n", "[ 99.9772]]), '10033': Matrix([\n", "[ 964.0191],\n", "[1860.8023],\n", "[ 99.8551]]), '10017': Matrix([\n", "[ 931.6761],\n", "[1900.9945],\n", "[ 99.9572]]), '10052': Matrix([\n", "[ 1037.875],\n", "[1757.2999],\n", "[ 100.2737]]), '10042': Matrix([\n", "[1017.3489],\n", "[1803.0742],\n", "[ 100.3441]]), '10053': Matrix([\n", "[1033.3758],\n", "[1723.4258],\n", "[ 100.2774]]), '10037': Matrix([\n", "[ 966.2253],\n", "[1774.2051],\n", "[ 99.9957]]), '10040': Matrix([\n", "[ 990.8832],\n", "[1780.9678],\n", "[ 100.1677]]), '10041': Matrix([\n", "[993.2769],\n", "[1812.031],\n", "[100.4749]]), '10038': Matrix([\n", "[ 958.1899],\n", "[1804.7135],\n", "[ 100.0741]]), '10051': Matrix([\n", "[1008.9811],\n", "[1750.1838],\n", "[ 100.288]]), '10036': Matrix([\n", "[ 948.6403],\n", "[1763.5807],\n", "[ 100.0063]]), '10035': Matrix([\n", "[ 910.1265],\n", "[1768.0099],\n", "[ 100.0781]]), '10039': Matrix([\n", "[ 960.3884],\n", "[1820.0543],\n", "[ 100.0983]]), '10059': Matrix([\n", "[1049.2587],\n", "[1662.5451],\n", "[ 100.0148]]), '10050': Matrix([\n", "[1010.0246],\n", "[1726.2445],\n", "[ 100.1493]]), '10013': Matrix([\n", "[900.9076],\n", "[1902.873],\n", "[ 99.7911]]), '10028': Matrix([\n", "[ 853.9608],\n", "[1815.7417],\n", "[ 99.7793]]), '10012': Matrix([\n", "[ 895.3032],\n", "[1924.1523],\n", "[ 99.8758]]), '10014': Matrix([\n", "[ 913.9706],\n", "[1918.7731],\n", "[ 99.8872]]), '10031': Matrix([\n", "[ 937.1557],\n", "[1855.2805],\n", "[ 99.8479]]), '10015': Matrix([\n", "[ 912.5157],\n", "[1937.6471],\n", "[ 99.9834]]), '10032': Matrix([\n", "[ 954.6732],\n", "[1845.9356],\n", "[ 99.724]]), '10030': Matrix([\n", "[ 908.4749],\n", "[1828.8008],\n", "[ 99.5581]]), '10029': Matrix([\n", "[ 909.3343],\n", "[1814.8767],\n", "[ 99.5486]]), '10034': Matrix([\n", "[ 860.2357],\n", "[1758.9282],\n", "[ 99.737]]), '10045': Matrix([\n", "[867.2324],\n", "[1705.063],\n", "[ 99.7214]]), '10049': Matrix([\n", "[ 985.2561],\n", "[1715.2109],\n", "[ 99.9965]]), '10048': Matrix([\n", "[ 957.3889],\n", "[1716.2949],\n", "[ 99.7212]]), '10047': Matrix([\n", "[ 929.5334],\n", "[1712.6429],\n", "[ 99.6076]]), '10046': Matrix([\n", "[ 910.663],\n", "[1716.0969],\n", "[ 99.5459]]), '10057': Matrix([\n", "[969.6876],\n", "[1655.597],\n", "[ 99.7039]]), '10055': Matrix([\n", "[ 922.4731],\n", "[1647.7452],\n", "[ 99.4658]]), '10054': Matrix([\n", "[ 860.4481],\n", "[1636.6722],\n", "[ 99.7093]]), '10058': Matrix([\n", "[1013.2592],\n", "[1646.6356],\n", "[ 99.8513]]), '10056': Matrix([\n", "[ 939.9763],\n", "[1636.4179],\n", "[ 99.4027]])}\n" ] } ], "execution_count": 4 }, { "metadata": { "ExecuteTime": { "end_time": "2025-12-31T14:31:22.898325Z", "start_time": "2025-12-31T14:31:22.883016Z" } }, "cell_type": "code", "source": [ "importlib.reload(Datenbank)\n", "db_zugriff = Datenbank.Datenbankzugriff(pfad_datenbank)\n", "# Transformationen in ETRS89 / DREF91 Realisierung 2025\n", "print(db_zugriff.get_koordinaten(\"naeherung_us\"))" ], "id": "ab62308d8c665e58", "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "{'10009': Matrix([\n", "[3794767.4719546097],\n", "[ 546740.0869962516],\n", "[ 5080165.952124462]]), '10006': Matrix([\n", "[3794766.3557482935],\n", "[ 546707.6385009313],\n", "[5080169.7334700795]]), '10010': Matrix([\n", "[3794758.6366199246],\n", "[ 546767.6665772106],\n", "[5080169.4644999765]]), '10018': Matrix([\n", "[3794762.2481267513],\n", "[ 546797.6912507551],\n", "[ 5080163.980380166]]), '10008': Matrix([\n", "[3794783.8581],\n", "[ 546746.6347],\n", "[5080152.7404]]), '10005': Matrix([\n", "[3794793.841662743],\n", "[546722.3209011297],\n", "[5080147.930942906]]), '10003': Matrix([\n", "[3794841.051609108],\n", "[546735.1152754558],\n", "[5080111.543399332]]), '10004': Matrix([\n", "[3794803.4594055074],\n", "[ 546714.1406417021],\n", "[ 5080141.382390101]]), '10007': Matrix([\n", "[3794831.046531049],\n", "[546758.7254701178],\n", "[5080116.663324944]]), '10001': Matrix([\n", "[3794901.5252],\n", "[ 546745.559],\n", "[5080065.7672]]), '10002': Matrix([\n", "[3794866.9711],\n", "[ 546729.5958],\n", "[5080092.6364]]), '10016': Matrix([\n", "[3794826.658374741],\n", "[546788.7275390101],\n", "[5080116.868237535]]), '10011': Matrix([\n", "[3794894.922579663],\n", "[546833.1159754294],\n", "[5080061.151341954]]), '10026': Matrix([\n", "[3794753.8595],\n", "[ 546827.4296],\n", "[5080167.0938]]), '10027': Matrix([\n", "[3794757.591261769],\n", "[546874.3314003296],\n", "[5080159.317534195]]), '10043': Matrix([\n", "[3794747.2737986287],\n", "[ 546919.1497828952],\n", "[ 5080162.149716094]]), '10044': Matrix([\n", "[3794752.6696],\n", "[ 546958.3218],\n", "[5080154.2579]]), '10021': Matrix([\n", "[3794776.0295716925],\n", "[ 546833.7406948799],\n", "[ 5080150.012973846]]), '10020': Matrix([\n", "[ 3794782.610580881],\n", "[ 546834.470509102],\n", "[5080145.0361413695]]), '10024': Matrix([\n", "[3794772.816135807],\n", "[ 546857.095708699],\n", "[5080149.834714163]]), '10025': Matrix([\n", "[3794774.2085619094],\n", "[ 546871.8107307912],\n", "[ 5080147.359175114]]), '10022': Matrix([\n", "[3794778.3371531744],\n", "[ 546841.7501872958],\n", "[ 5080147.275074134]]), '10023': Matrix([\n", "[3794780.7952114563],\n", "[ 546848.1012091675],\n", "[ 5080144.924922213]]), '10019': Matrix([\n", "[3794800.0946706245],\n", "[ 546833.3239614451],\n", "[ 5080131.724532257]]), '10033': Matrix([\n", "[3794800.0160474544],\n", "[ 546874.6524563388],\n", "[ 5080127.204744104]]), '10017': Matrix([\n", "[3794825.016154114],\n", "[546831.6998861503],\n", "[5080113.374792286]]), '10052': Matrix([\n", "[3794743.6262089056],\n", "[ 546984.415934838],\n", "[ 5080157.831166813]]), '10042': Matrix([\n", "[ 3794758.957179171],\n", "[ 546937.0599021759],\n", "[5080151.6103044115]]), '10053': Matrix([\n", "[ 3794748.14608301],\n", "[547017.5748381803],\n", "[5080150.930072506]]), '10037': Matrix([\n", "[3794800.5693],\n", "[ 546960.7477],\n", "[ 5080117.665]]), '10040': Matrix([\n", "[3794780.720877459],\n", "[546956.4249913145],\n", "[5080133.161471092]]), '10041': Matrix([\n", "[3794778.153328699],\n", "[ 546925.877928891],\n", "[5080138.722313838]]), '10038': Matrix([\n", "[3794806.3233483736],\n", "[ 546929.7308726012],\n", "[ 5080116.89880491]]), '10051': Matrix([\n", "[3794767.0574626415],\n", "[ 546988.6993708528],\n", "[ 5080139.997874675]]), '10036': Matrix([\n", "[3794815.0546409036],\n", "[ 546969.5966706082],\n", "[ 5080106.064114862]]), '10035': Matrix([\n", "[3794845.948751911],\n", "[ 546961.512678588],\n", "[5080084.087510971]]), '10039': Matrix([\n", "[3794804.1623731344],\n", "[ 546914.7316360716],\n", "[ 5080120.139242563]]), '10059': Matrix([\n", "[3794736.9649],\n", "[ 547079.4678],\n", "[5080152.3224]]), '10050': Matrix([\n", "[3794766.7719544796],\n", "[ 547012.5266236273],\n", "[ 5080137.484970744]]), '10013': Matrix([\n", "[3794849.6087244693],\n", "[ 546826.8685540904],\n", "[ 5080095.43002485]]), '10028': Matrix([\n", "[3794889.7348],\n", "[ 546908.7636],\n", "[5080056.9381]]), '10012': Matrix([\n", "[3794853.6002710722],\n", "[ 546805.2364847381],\n", "[ 5080094.889461209]]), '10014': Matrix([\n", "[3794838.7464],\n", "[ 546812.3658],\n", "[ 5080105.2]]), '10031': Matrix([\n", "[3794821.7594477106],\n", "[ 546877.5480584177],\n", "[ 5080110.746046175]]), '10015': Matrix([\n", "[3794839.4650256806],\n", "[ 546793.5165545414],\n", "[5080106.7712153485]]), '10032': Matrix([\n", "[3794807.848210704],\n", "[546888.4861254627],\n", "[5080119.745908576]]), '10030': Matrix([\n", "[3794845.353156385],\n", "[546901.0274418414],\n", "[5080090.356531718]]), '10029': Matrix([\n", "[3794845.026354165],\n", "[546914.9167077399],\n", "[5080089.099946169]]), '10034': Matrix([\n", "[3794886.104894752],\n", "[546965.6987415539],\n", "[ 5080053.40592357]]), '10045': Matrix([\n", "[3794881.900452307],\n", "[547019.7835874384],\n", "[5080050.715777841]]), '10049': Matrix([\n", "[3794786.8907962884],\n", "[ 547021.0765699627],\n", "[ 5080121.444681106]]), '10048': Matrix([\n", "[3794809.106679632],\n", "[547017.3023106218],\n", "[5080105.014391199]]), '10047': Matrix([\n", "[3794831.5349817923],\n", "[ 547018.2393882351],\n", "[ 5080088.124038595]]), '10046': Matrix([\n", "[3794846.5803718665],\n", "[ 547012.9971156706],\n", "[ 5080077.440420756]]), '10057': Matrix([\n", "[3794800.819370702],\n", "[ 547078.671611169],\n", "[ 5080104.57270624]]), '10055': Matrix([\n", "[3794838.851977278],\n", "[ 547081.903863645],\n", "[5080075.698247853]]), '10054': Matrix([\n", "[3794889.0494],\n", "[ 547086.9874],\n", "[5080038.1528]]), '10058': Matrix([\n", "[3794766.1088143717],\n", "[ 547091.7542871874],\n", "[ 5080129.120881729]]), '10056': Matrix([\n", "[3794825.041003442],\n", "[547094.8115741647],\n", "[5080084.488768324]]), '0645': Matrix([\n", "[3793994.4529],\n", "[ 495758.0093],\n", "[5085958.2047]]), '0648': Matrix([\n", "[3762551.5682],\n", "[ 538424.8576],\n", "[5104809.1503]]), '0656': Matrix([\n", "[3794838.5802],\n", "[ 546995.3112],\n", "[5080116.5503]]), '0995': Matrix([\n", "[3794519.9177],\n", "[ 588539.9138],\n", "[5075743.9332]]), '1675': Matrix([\n", "[3813621.0427],\n", "[ 566004.8947],\n", "[ 5064056.93]]), 'ESTE': Matrix([\n", "[3816914.711],\n", "[ 507636.812],\n", "[5067733.467]]), 'GNA2': Matrix([\n", "[3767530.6335],\n", "[ 597990.0978],\n", "[5094563.5073]])}\n" ] } ], "execution_count": 5 }, { "metadata": { "ExecuteTime": { "end_time": "2025-12-31T14:31:22.918995Z", "start_time": "2025-12-31T14:31:22.904738Z" } }, "cell_type": "code", "source": [ "importlib.reload(Import)\n", "imp = Import.Import(pfad_datenbank)\n", "\n", "pfad_koordinaten_gnss = r\"Daten\\Koordinaten_OL_umliegend_bereinigt.csv\"\n", "# X, Y, Z der SAPOS-Stationen\n", "genauigkeit_sapos_referenzstationen = [0.05, 0.04, 0.09]\n", "\n", "imp.import_koordinaten_gnss(pfad_koordinaten_gnss, genauigkeit_sapos_referenzstationen)\n" ], "id": "b28afe0c64aa59d6", "outputs": [ { "data": { "text/plain": [ "'Import der Koordinaten aus stationärem GNSS abgeschlossen.'" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "execution_count": 6 }, { "metadata": { "ExecuteTime": { "end_time": "2025-12-31T14:31:22.956650Z", "start_time": "2025-12-31T14:31:22.925987Z" } }, "cell_type": "code", "source": [ "# Datumsgebende Koordinaten bestimmen\n", "importlib.reload(Datenbank)\n", "db_zugriff = Datenbank.Datenbankzugriff(pfad_datenbank)\n", "\n", "liste_koordinaten_x = [10026]\n", "liste_koordinaten_y = [10059]\n", "liste_koordinaten_z = [10028]\n", "liste_koordinaten_x_y_z = [10008, 10001]\n", "\n", "db_zugriff.set_datumskoordinaten(liste_koordinaten_x, liste_koordinaten_y, liste_koordinaten_z, liste_koordinaten_x_y_z)\n", "\n", "# Datumgebende Koordinaten entfernen\n", "liste_koordinaten_x = [10026]\n", "liste_koordinaten_y = [10059]\n", "liste_koordinaten_z = [10028]\n", "liste_koordinaten_x_y_z = [10001]\n", "\n", "db_zugriff.set_datumskoordinaten_to_neupunkte(liste_koordinaten_x, liste_koordinaten_y, liste_koordinaten_z, liste_koordinaten_x_y_z)" ], "id": "ed9be38e35cfc619", "outputs": [], "execution_count": 7 }, { "metadata": { "ExecuteTime": { "end_time": "2025-12-31T14:31:22.966916Z", "start_time": "2025-12-31T14:31:22.963231Z" } }, "cell_type": "code", "source": [ "# ToDo: Sobald GNSS vorliegend Koordinaten im ETRS89 / DREF 91 (2025) daraus berechnen!\n", "#liste_koordinaten_naeherung_us = {\n", "# 10001: (3794874.984, 546741.752, 5080029.990),\n", "# 10002: (3794842.533, 546726.907, 5080071.133),\n", "# 10037: (3794774.148, 546955.423, 5080040.520),\n", "# 10044: (3794725.786, 546954.557, 5080084.411),\n", "#}\n", "\n", "\n", "#con = sqlite3.connect(pfad_datenbank)\n", "#cursor = con.cursor()\n", "#sql = \"\"\"\n", "#UPDATE Netzpunkte\n", "#SET naeherungx_us = ?, naeherungy_us = ?, naeherungz_us = ?\n", "#WHERE punktnummer = ?\n", "#\"\"\"\n", "#for punktnummer, (x, y, z) in #liste_koordinaten_naeherung_us.items():\n", "# cursor.execute(sql, (x, y, z, punktnummer))\n", "#con.commit()\n", "#cursor.close()\n", "#con.close()" ], "id": "efa952a603ad1909", "outputs": [], "execution_count": 8 }, { "metadata": { "ExecuteTime": { "end_time": "2025-12-31T14:31:44.530410Z", "start_time": "2025-12-31T14:31:22.972796Z" } }, "cell_type": "code", "source": [ "# ToDo: Sobald GNSS-Daten vorliegen und die Berechnungen richtig sind, aufräumen!!!\n", "\n", "importlib.reload(Koordinatentransformationen)\n", "trafos = Koordinatentransformationen.Transformationen(pfad_datenbank)\n", "\n", "\n", "import numpy as np\n", "\n", "import itertools\n", "import numpy as np\n", "import sympy as sp\n", "\n", "db = Datenbank.Datenbankzugriff(pfad_datenbank)\n", "dict_ausgangssystem = db.get_koordinaten(\"naeherung_lh\", \"Dict\")\n", "dict_zielsystem = db.get_koordinaten(\"naeherung_us\", \"Dict\")\n", "\n", "gemeinsame_punktnummern = sorted(set(dict_ausgangssystem.keys()) & set(dict_zielsystem.keys()))\n", "anzahl_gemeinsame_punkte = len(gemeinsame_punktnummern)\n", "\n", "liste_punkte_ausgangssystem = [dict_ausgangssystem[i] for i in gemeinsame_punktnummern]\n", "liste_punkte_zielsystem = [dict_zielsystem[i] for i in gemeinsame_punktnummern]\n", "\n", "def dist(a, b):\n", " return float((a - b).norm())\n", "\n", "print(\"d(p2,p1)=\", dist(liste_punkte_ausgangssystem[1], liste_punkte_ausgangssystem[0]))\n", "print(\"d(P2,P1)=\", dist(liste_punkte_zielsystem[1], liste_punkte_zielsystem[0]))\n", "print(\"m0 ~\", dist(liste_punkte_zielsystem[1], liste_punkte_zielsystem[0]) /\n", " dist(liste_punkte_ausgangssystem[1], liste_punkte_ausgangssystem[0]))\n", "\n", "\n", "def dist(a, b):\n", " return float((a - b).norm())\n", "\n", "ratios = []\n", "pairs = list(itertools.combinations(range(len(liste_punkte_ausgangssystem)), 2))\n", "\n", "for i, j in pairs:\n", " d_loc = dist(liste_punkte_ausgangssystem[i], liste_punkte_ausgangssystem[j])\n", " d_ecef = dist(liste_punkte_zielsystem[i], liste_punkte_zielsystem[j])\n", " if d_loc > 1e-6:\n", " ratios.append(d_ecef / d_loc)\n", "\n", "print(\"Anzahl Ratios:\", len(ratios))\n", "print(\"min/mean/max:\", min(ratios), sum(ratios)/len(ratios), max(ratios))\n", "print(\"std:\", float(np.std(ratios)))\n", "\n", "S_loc = sum(liste_punkte_ausgangssystem, sp.Matrix([0,0,0])) / anzahl_gemeinsame_punkte\n", "S_ecef = sum(liste_punkte_zielsystem, sp.Matrix([0,0,0])) / anzahl_gemeinsame_punkte\n", "\n", "print(\"S_loc:\", S_loc)\n", "print(\"S_ecef:\", S_ecef)\n", "print(\"Delta:\", (S_ecef - S_loc).evalf(6))\n", "\n", "\n", "def dist(a, b):\n", " return float((a - b).norm())\n", "\n", "n = len(liste_punkte_ausgangssystem)\n", "\n", "scores = []\n", "for i in range(n):\n", " d_loc = []\n", " d_ecef = []\n", " for j in range(n):\n", " if i == j:\n", " continue\n", " d_loc.append(dist(liste_punkte_ausgangssystem[i], liste_punkte_ausgangssystem[j]))\n", " d_ecef.append(dist(liste_punkte_zielsystem[i], liste_punkte_zielsystem[j]))\n", "\n", " d_loc = np.array(d_loc)\n", " d_ecef = np.array(d_ecef)\n", "\n", " # Verhältnisvektor; robust gegen Nullschutz\n", " r = d_ecef / np.where(d_loc == 0, np.nan, d_loc)\n", "\n", " # Streuung der Ratios für Punkt i\n", " score = np.nanstd(r)\n", " scores.append(score)\n", "\n", "for pn, sc in sorted(zip(gemeinsame_punktnummern, scores), key=lambda x: -x[1]):\n", " print(pn, round(sc, 4))\n", "\n", "\n", "\n", "transformationsparameter = trafos.Helmerttransformation_Euler_Transformationsparameter_berechne()" ], "id": "ebb18479e06e53ab", "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "d(p2,p1)= 46.60388451996242\n", "d(P2,P1)= 46.59145296840883\n", "m0 ~ 0.999733250743331\n", "Anzahl Ratios: 1711\n", "min/mean/max: 0.9966158797615429 0.9999420515348254 1.0007101135088199\n", "std: 0.0001589676515447617\n", "S_loc: Matrix([[956.308098305085], [1838.78964237288], [99.9601016949153]])\n", "S_ecef: Matrix([[3794806.8636068002], [546895.7494793105], [5080119.9940889809]])\n", "Delta: Matrix([[3.79385e+6], [545057.], [5.08002e+6]])\n", "10059 0.0006\n", "10058 0.0004\n", "10054 0.0004\n", "10055 0.0003\n", "10057 0.0003\n", "10056 0.0002\n", "10037 0.0002\n", "10049 0.0002\n", "10048 0.0001\n", "10028 0.0001\n", "10044 0.0001\n", "10040 0.0001\n", "10036 0.0001\n", "10047 0.0001\n", "10014 0.0001\n", "10046 0.0001\n", "10026 0.0001\n", "10050 0.0001\n", "10029 0.0001\n", "10051 0.0001\n", "10030 0.0001\n", "10035 0.0001\n", "10045 0.0001\n", "10038 0.0001\n", "10034 0.0001\n", "10012 0.0001\n", "10052 0.0001\n", "10001 0.0001\n", "10053 0.0001\n", "10041 0.0001\n", "10039 0.0001\n", "10013 0.0001\n", "10042 0.0001\n", "10018 0.0001\n", "10031 0.0001\n", "10032 0.0001\n", "10043 0.0001\n", "10008 0.0001\n", "10002 0.0001\n", "10011 0.0001\n", "10017 0.0001\n", "10027 0.0001\n", "10033 0.0001\n", "10024 0.0001\n", "10025 0.0\n", "10016 0.0\n", "10023 0.0\n", "10019 0.0\n", "10022 0.0\n", "10010 0.0\n", "10020 0.0\n", "10021 0.0\n", "10005 0.0\n", "10015 0.0\n", "10007 0.0\n", "10003 0.0\n", "10004 0.0\n", "10009 0.0\n", "10006 0.0\n", "Anzahl gemeinsame Punkte: 59\n", "\n", "Erste Zielpunkte:\n", "10001 [3794901.5252, 546745.559, 5080065.7672]\n", "10002 [3794866.9711, 546729.5958, 5080092.6364]\n", "10003 [3794841.051609108, 546735.1152754558, 5080111.543399332]\n", "10004 [3794803.4594055074, 546714.1406417021, 5080141.3823901005]\n", "10005 [3794793.841662743, 546722.3209011297, 5080147.930942906]\n", "\n", "Erste Ausgangspunkte:\n", "10001 [833.9439, 1978.3737, 99.8946]\n", "10002 [875.9684, 1998.5174, 99.5867]\n", "10003 [908.4312, 1996.1248, 99.7403]\n", "10004 [954.1536, 2021.6822, 99.4916]\n", "10005 [966.5154, 2014.6496, 99.72]\n", "min/mean/max: 0.9966158797615429 0.9999420515348254 1.0007101135088199\n", "R ist nicht Orthonormal!\n", "Iteration Nr.1 abgeschlossen\n", "Matrix([[-12.2], [2.70], [-2.05], [-0.0294], [-0.302], [0.0123], [0.236]])\n", "Iteration Nr.2 abgeschlossen\n", "Matrix([[5.71], [-4.20], [-6.60], [0.0294], [-0.00421], [-0.0138], [0.00255]])\n", "Iteration Nr.3 abgeschlossen\n", "Matrix([[-0.0369], [0.0586], [0.0315], [2.78e-5], [0.000148], [0.000408], [-0.000136]])\n", "Iteration Nr.4 abgeschlossen\n", "Matrix([[-6.79e-5], [4.31e-5], [-7.44e-6], [3.17e-8], [1.62e-8], [2.83e-8], [-5.66e-8]])\n", "Iteration Nr.5 abgeschlossen\n", "Matrix([[-8.17e-10], [2.40e-10], [3.50e-10], [-4.99e-15], [6.67e-13], [2.62e-12], [3.47e-13]])\n", "Matrix([[3.79e+6], [5.47e+5], [5.08e+6], [3.79e+6], [5.47e+5], [5.08e+6], [3.79e+6], [5.47e+5], [5.08e+6], [3.79e+6], [5.47e+5], [5.08e+6], [3.79e+6], [5.47e+5], [5.08e+6], [3.79e+6], [5.47e+5], [5.08e+6], [3.79e+6], [5.47e+5], [5.08e+6], [3.79e+6], [5.47e+5], [5.08e+6], [3.79e+6], [5.47e+5], [5.08e+6], [3.79e+6], [5.47e+5], [5.08e+6], [3.79e+6], [5.47e+5], [5.08e+6], [3.79e+6], [5.47e+5], [5.08e+6], [3.79e+6], [5.47e+5], [5.08e+6], [3.79e+6], [5.47e+5], [5.08e+6], [3.79e+6], [5.47e+5], [5.08e+6], [3.79e+6], [5.47e+5], [5.08e+6], [3.79e+6], [5.47e+5], [5.08e+6], [3.79e+6], [5.47e+5], [5.08e+6], [3.79e+6], [5.47e+5], [5.08e+6], [3.79e+6], [5.47e+5], [5.08e+6], [3.79e+6], [5.47e+5], [5.08e+6], [3.79e+6], [5.47e+5], [5.08e+6], [3.79e+6], [5.47e+5], [5.08e+6], [3.79e+6], [5.47e+5], [5.08e+6], [3.79e+6], [5.47e+5], [5.08e+6], [3.79e+6], [5.47e+5], [5.08e+6], [3.79e+6], [5.47e+5], [5.08e+6], [3.79e+6], [5.47e+5], [5.08e+6], [3.79e+6], [5.47e+5], [5.08e+6], [3.79e+6], [5.47e+5], [5.08e+6], [3.79e+6], [5.47e+5], [5.08e+6], [3.79e+6], [5.47e+5], [5.08e+6], [3.79e+6], [5.47e+5], [5.08e+6], [3.79e+6], [5.47e+5], [5.08e+6], [3.79e+6], [5.47e+5], [5.08e+6], [3.79e+6], [5.47e+5], [5.08e+6], [3.79e+6], [5.47e+5], [5.08e+6], [3.79e+6], [5.47e+5], [5.08e+6], [3.79e+6], [5.47e+5], [5.08e+6], [3.79e+6], [5.47e+5], [5.08e+6], [3.79e+6], [5.47e+5], [5.08e+6], [3.79e+6], [5.47e+5], [5.08e+6], [3.79e+6], [5.47e+5], [5.08e+6], [3.79e+6], [5.47e+5], [5.08e+6], [3.79e+6], [5.47e+5], [5.08e+6], [3.79e+6], [5.47e+5], [5.08e+6], [3.79e+6], [5.47e+5], [5.08e+6], [3.79e+6], [5.47e+5], [5.08e+6], [3.79e+6], [5.47e+5], [5.08e+6], [3.79e+6], [5.47e+5], [5.08e+6], [3.79e+6], [5.47e+5], [5.08e+6], [3.79e+6], [5.47e+5], [5.08e+6], [3.79e+6], [5.47e+5], [5.08e+6], [3.79e+6], [5.47e+5], [5.08e+6], [3.79e+6], [5.47e+5], [5.08e+6], [3.79e+6], [5.47e+5], [5.08e+6], [3.79e+6], [5.47e+5], [5.08e+6], [3.79e+6], [5.47e+5], [5.08e+6], [3.79e+6], [5.47e+5], [5.08e+6]])\n", "Matrix([[3.79e+6], [5.47e+5], [5.08e+6], [3.79e+6], [5.47e+5], [5.08e+6], [3.79e+6], [5.47e+5], [5.08e+6], [3.79e+6], [5.47e+5], [5.08e+6], [3.79e+6], [5.47e+5], [5.08e+6], [3.79e+6], [5.47e+5], [5.08e+6], [3.79e+6], [5.47e+5], [5.08e+6], [3.79e+6], [5.47e+5], [5.08e+6], [3.79e+6], [5.47e+5], [5.08e+6], [3.79e+6], [5.47e+5], [5.08e+6], [3.79e+6], [5.47e+5], [5.08e+6], [3.79e+6], [5.47e+5], [5.08e+6], [3.79e+6], [5.47e+5], [5.08e+6], [3.79e+6], [5.47e+5], [5.08e+6], [3.79e+6], [5.47e+5], [5.08e+6], [3.79e+6], [5.47e+5], [5.08e+6], [3.79e+6], [5.47e+5], [5.08e+6], [3.79e+6], [5.47e+5], [5.08e+6], [3.79e+6], [5.47e+5], [5.08e+6], [3.79e+6], [5.47e+5], [5.08e+6], [3.79e+6], [5.47e+5], [5.08e+6], [3.79e+6], [5.47e+5], [5.08e+6], [3.79e+6], [5.47e+5], [5.08e+6], [3.79e+6], [5.47e+5], [5.08e+6], [3.79e+6], [5.47e+5], [5.08e+6], [3.79e+6], [5.47e+5], [5.08e+6], [3.79e+6], [5.47e+5], [5.08e+6], [3.79e+6], [5.47e+5], [5.08e+6], [3.79e+6], [5.47e+5], [5.08e+6], [3.79e+6], [5.47e+5], [5.08e+6], [3.79e+6], [5.47e+5], [5.08e+6], [3.79e+6], [5.47e+5], [5.08e+6], [3.79e+6], [5.47e+5], [5.08e+6], [3.79e+6], [5.47e+5], [5.08e+6], [3.79e+6], [5.47e+5], [5.08e+6], [3.79e+6], [5.47e+5], [5.08e+6], [3.79e+6], [5.47e+5], [5.08e+6], [3.79e+6], [5.47e+5], [5.08e+6], [3.79e+6], [5.47e+5], [5.08e+6], [3.79e+6], [5.47e+5], [5.08e+6], [3.79e+6], [5.47e+5], [5.08e+6], [3.79e+6], [5.47e+5], [5.08e+6], [3.79e+6], [5.47e+5], [5.08e+6], [3.79e+6], [5.47e+5], [5.08e+6], [3.79e+6], [5.47e+5], [5.08e+6], [3.79e+6], [5.47e+5], [5.08e+6], [3.79e+6], [5.47e+5], [5.08e+6], [3.79e+6], [5.47e+5], [5.08e+6], [3.79e+6], [5.47e+5], [5.08e+6], [3.79e+6], [5.47e+5], [5.08e+6], [3.79e+6], [5.47e+5], [5.08e+6], [3.79e+6], [5.47e+5], [5.08e+6], [3.79e+6], [5.47e+5], [5.08e+6], [3.79e+6], [5.47e+5], [5.08e+6], [3.79e+6], [5.47e+5], [5.08e+6], [3.79e+6], [5.47e+5], [5.08e+6], [3.79e+6], [5.47e+5], [5.08e+6], [3.79e+6], [5.47e+5], [5.08e+6], [3.79e+6], [5.47e+5], [5.08e+6]])\n", "x = Matrix([[3.80e+6], [5.49e+5], [5.08e+6], [1.00], [-0.156], [0.627], [3.26]])\n", "\n", "l_berechnet_final:\n", "10001: 3794901.510, 546745.579, 5080065.739\n", "10002: 3794867.000, 546729.613, 5080092.680\n", "10003: 3794841.052, 546735.115, 5080111.543\n", "10004: 3794803.459, 546714.141, 5080141.382\n", "10005: 3794793.842, 546722.321, 5080147.931\n", "10006: 3794766.356, 546707.639, 5080169.733\n", "10007: 3794831.047, 546758.725, 5080116.663\n", "10008: 3794783.863, 546746.642, 5080152.749\n", "10009: 3794767.472, 546740.087, 5080165.952\n", "10010: 3794758.637, 546767.667, 5080169.464\n", "10011: 3794894.923, 546833.116, 5080061.151\n", "10012: 3794853.600, 546805.236, 5080094.889\n", "10013: 3794849.609, 546826.869, 5080095.430\n", "10014: 3794838.739, 546812.364, 5080105.171\n", "10015: 3794839.465, 546793.517, 5080106.771\n", "10016: 3794826.658, 546788.728, 5080116.868\n", "10017: 3794825.016, 546831.700, 5080113.375\n", "10018: 3794762.248, 546797.691, 5080163.980\n", "10019: 3794800.095, 546833.324, 5080131.725\n", "10020: 3794782.611, 546834.471, 5080145.036\n", "10021: 3794776.030, 546833.741, 5080150.013\n", "10022: 3794778.337, 546841.750, 5080147.275\n", "10023: 3794780.795, 546848.101, 5080144.925\n", "10024: 3794772.816, 546857.096, 5080149.835\n", "10025: 3794774.209, 546871.811, 5080147.359\n", "10026: 3794753.855, 546827.443, 5080167.088\n", "10027: 3794757.591, 546874.331, 5080159.318\n", "10028: 3794889.666, 546908.762, 5080056.912\n", "10029: 3794845.026, 546914.917, 5080089.100\n", "10030: 3794845.353, 546901.027, 5080090.357\n", "10031: 3794821.759, 546877.548, 5080110.746\n", "10032: 3794807.848, 546888.486, 5080119.746\n", "10033: 3794800.016, 546874.652, 5080127.205\n", "10034: 3794886.105, 546965.699, 5080053.406\n", "10035: 3794845.949, 546961.513, 5080084.088\n", "10036: 3794815.055, 546969.597, 5080106.064\n", "10037: 3794800.626, 546960.749, 5080117.708\n", "10038: 3794806.323, 546929.731, 5080116.899\n", "10039: 3794804.162, 546914.732, 5080120.139\n", "10040: 3794780.721, 546956.425, 5080133.161\n", "10041: 3794778.153, 546925.878, 5080138.722\n", "10042: 3794758.957, 546937.060, 5080151.610\n", "10043: 3794747.274, 546919.150, 5080162.150\n", "10044: 3794752.687, 546958.324, 5080154.240\n", "10045: 3794881.900, 547019.784, 5080050.716\n", "10046: 3794846.580, 547012.997, 5080077.440\n", "10047: 3794831.535, 547018.239, 5080088.124\n", "10048: 3794809.107, 547017.302, 5080105.014\n", "10049: 3794786.891, 547021.077, 5080121.445\n", "10050: 3794766.772, 547012.527, 5080137.485\n", "10051: 3794767.057, 546988.699, 5080139.998\n", "10052: 3794743.626, 546984.416, 5080157.831\n", "10053: 3794748.146, 547017.575, 5080150.930\n", "10054: 3794889.165, 547086.950, 5080038.116\n", "10055: 3794838.852, 547081.904, 5080075.698\n", "10056: 3794825.041, 547094.812, 5080084.489\n", "10057: 3794800.819, 547078.672, 5080104.573\n", "10058: 3794766.109, 547091.754, 5080129.121\n", "10059: 3794736.836, 547079.449, 5080152.372\n", "Streckendifferenzen:\n", "[0.037854, 0.054708, 0.0, 0.0, 0.0, 0.0, 0.0, 0.012057, 0.0, 0.0, 0.0, 0.0, 0.0, 0.029525, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.015332, 0.0, 0.073156, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.071369, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.025069, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.127425, 0.0, 0.0, 0.0, 0.0, 0.139397]\n", "\n", "Differenz Schwerpunkt (Vektor):\n", "Matrix([[7.73e-11], [9.13e-12], [-5.84e-10]])\n", "Betrag der Schwerpunkt-Differenz:\n", "0.000m\n" ] } ], "execution_count": 9 }, { "metadata": { "ExecuteTime": { "end_time": "2025-12-31T14:31:44.728507Z", "start_time": "2025-12-31T14:31:44.709067Z" } }, "cell_type": "code", "source": [ "importlib.reload(Koordinatentransformationen)\n", "trafos = Koordinatentransformationen.Transformationen(pfad_datenbank)\n", "\n", "koordinaten_transformiert = trafos.Helmerttransformation(transformationsparameter)\n", "print(koordinaten_transformiert)" ], "id": "2d2156381d974d94", "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "{}\n" ] } ], "execution_count": 10 }, { "metadata": { "ExecuteTime": { "end_time": "2025-12-31T14:31:44.738605Z", "start_time": "2025-12-31T14:31:44.734508Z" } }, "cell_type": "code", "source": [ "importlib.reload(Datenbank)\n", "db_zugriff = Datenbank.Datenbankzugriff(pfad_datenbank)\n", "\n", "db_zugriff.set_koordinaten(koordinaten_transformiert, \"naeherung_us\")" ], "id": "5a9e8f24709980d2", "outputs": [], "execution_count": 11 }, { "metadata": { "ExecuteTime": { "end_time": "2025-12-31T14:31:44.755540Z", "start_time": "2025-12-31T14:31:44.747092Z" } }, "cell_type": "code", "source": [ "# Importieren der tachymetrischen Beobachtungen\n", "importlib.reload(Datenbank)\n", "db_zugriff = Datenbank.Datenbankzugriff(pfad_datenbank)\n", "\n", "db_zugriff.get_instrument_liste(\"Tachymeter\")\n", "db_zugriff.set_instrument(\"Tachymeter\", \"Trimble S9\")\n", "db_zugriff.set_instrument(\"Nivellier\", \"Trimble DiNi 0.3\")\n", "db_zugriff.get_instrument_liste(\"Tachymeter\")" ], "id": "bb4c738edcf9ac6f", "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Das Instrument Trimble S9 ist bereits in der Datenbank vorhanden.\n", "Es hat die ID 1\n", "Das Instrument Trimble DiNi 0.3 ist bereits in der Datenbank vorhanden.\n", "Es hat die ID 2\n" ] }, { "data": { "text/plain": [ "[(1, 'Tachymeter', 'Trimble S9')]" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "execution_count": 12 }, { "metadata": { "ExecuteTime": { "end_time": "2025-12-31T14:31:44.771129Z", "start_time": "2025-12-31T14:31:44.762787Z" } }, "cell_type": "code", "source": [ "#Importieren der apriori Genauigkeitsinformationen\n", "#Zulässige Beobachtungsarten = \"Tachymeter_Richtung\", \"Tachymeter_Strecke\"\n", "# Wenn Beobachtungsart = \"Tachymeter_Richtung\" --> Übergabe in Milligon und nur Stabw_apriori_konst\n", "# Wenn Beobachtungsart = \"Tachymeter_Strecke\" --> Übergabe Stabw_apriori_konst in Millimeter und Stabw_apriori_streckenprop in ppm\n", "\n", "importlib.reload(Datenbank)\n", "db_zugriff = Datenbank.Datenbankzugriff(pfad_datenbank)\n", "importlib.reload(Berechnungen)\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)" ], "id": "c2db29680c53f8c4", "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Die Genauigkeitsangabe ist bereits in der Datenbank vorhanden.\n", "Die Genauigkeitsangabe ist bereits in der Datenbank vorhanden.\n", "Die Genauigkeitsangabe ist bereits in der Datenbank vorhanden.\n" ] } ], "execution_count": 13 }, { "metadata": { "ExecuteTime": { "end_time": "2025-12-31T14:31:44.784895Z", "start_time": "2025-12-31T14:31:44.779376Z" } }, "cell_type": "code", "source": [ "# Importieren der tachymetrischen Beobachtungen\n", "importlib.reload(Import)\n", "imp = Import.Import(pfad_datenbank)\n", "\n", "pfad_datei_tachymeterbeobachtungen = r\"Daten\\campsnetz_beobachtungen_bereinigt.csv\"\n", "\n", "imp.import_beobachtungen_tachymeter(pfad_datei_tachymeterbeobachtungen, 1)" ], "id": "3d074282dffbbfd0", "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Der Import wurde abgebrochen, weil die Beobachtungen aus der Datei Daten\\campsnetz_beobachtungen_bereinigt.csv bereits in der Datenbank vorhanden sind.\n" ] } ], "execution_count": 14 }, { "metadata": { "ExecuteTime": { "end_time": "2025-12-31T14:31:44.801625Z", "start_time": "2025-12-31T14:31:44.794906Z" } }, "cell_type": "code", "source": [ "# Importieren der Normalhöhen der HFP\n", "importlib.reload(Datenbank)\n", "db_zugriff = Datenbank.Datenbankzugriff(pfad_datenbank)\n", "\n", "liste_HFP = [(666, 3.891), (812, 3.999), (816, 3.995)]\n", "\n", "db_zugriff.set_normalhoehe_hfp(liste_HFP)" ], "id": "da3bd8e134a3fe5c", "outputs": [ { "data": { "text/plain": [ "'Der HFP 666 wurde aktualisiert.\\nDer HFP 812 wurde aktualisiert.\\nDer HFP 816 wurde aktualisiert.'" ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" } ], "execution_count": 15 }, { "metadata": { "ExecuteTime": { "end_time": "2025-12-31T14:31:44.818185Z", "start_time": "2025-12-31T14:31:44.811303Z" } }, "cell_type": "code", "source": [ "importlib.reload(Datenbank)\n", "db_zugriff = Datenbank.Datenbankzugriff(pfad_datenbank)\n", "\n", "db_zugriff.get_normalhoehe_hfp()" ], "id": "ded7bfe9e696a09d", "outputs": [ { "data": { "text/plain": [ "[('10009', 4.1228),\n", " ('10006', 3.700452),\n", " ('10010', 4.042865),\n", " ('10018', 4.37204),\n", " ('10008', 3.84784),\n", " ('10005', 3.837325),\n", " ('10003', 3.86254),\n", " ('10004', 3.61063),\n", " ('10007', 4.032877),\n", " ('10001', 4.011375),\n", " ('10002', 3.70914),\n", " ('10016', 4.17165),\n", " ('10011', 3.9289),\n", " ('10026', 4.417013),\n", " ('10027', 4.44308),\n", " ('10043', 4.42904),\n", " ('10044', 4.656675),\n", " ('10021', 4.465185),\n", " ('10020', 4.451425),\n", " ('10024', 4.416225),\n", " ('10025', 4.52817),\n", " ('10022', 4.332345),\n", " ('10023', 4.455445),\n", " ('10019', 4.08987),\n", " ('10033', 3.968025),\n", " ('10017', 4.08287),\n", " ('10052', 4.39907),\n", " ('10042', 4.46707),\n", " ('10053', 4.386353),\n", " ('10037', 4.10459),\n", " ('10040', 4.277468),\n", " ('10041', 4.59913),\n", " ('10038', 4.19912),\n", " ('10051', 4.395635),\n", " ('10036', 4.11213),\n", " ('10035', 4.18675),\n", " ('10039', 4.207075),\n", " ('10059', 4.143315),\n", " ('10050', 4.27416),\n", " ('10013', 3.912175),\n", " ('10028', 3.9),\n", " ('10012', 4.007365),\n", " ('10014', 4.01094),\n", " ('10031', 3.974038),\n", " ('10015', 4.09836),\n", " ('10032', 3.839305),\n", " ('10030', 3.686305),\n", " ('10029', 3.65702),\n", " ('10034', 3.846134),\n", " ('10045', 3.829975),\n", " ('10049', 4.104995),\n", " ('10048', 3.897465),\n", " ('10047', 3.707345),\n", " ('10046', 3.64526),\n", " ('10057', 3.87817),\n", " ('10055', 3.56299),\n", " ('10054', 3.8132),\n", " ('10058', 3.980515),\n", " ('10056', 3.537135),\n", " ('666', 3.891),\n", " ('812', 3.999),\n", " ('816', 3.995),\n", " ('FH14', 4.119355),\n", " ('FH11', 4.06521),\n", " ('FH13', 4.54882),\n", " ('FH3', 4.71028),\n", " ('FH4', 4.72869),\n", " ('FH15', 4.73323),\n", " ('FH5', 4.71542)]" ] }, "execution_count": 16, "metadata": {}, "output_type": "execute_result" } ], "execution_count": 16 }, { "metadata": { "ExecuteTime": { "end_time": "2025-12-31T14:36:32.538636Z", "start_time": "2025-12-31T14:36:32.513140Z" } }, "cell_type": "code", "source": [ "# Nivellement-Beobachtungen Importieren Teil 1\n", "\n", "importlib.reload(Import)\n", "imp = Import.Import(pfad_datenbank)\n", "dict_punkthoehen_naeherung_niv, liste_punkte_in_db = imp.vorbereitung_import_beobachtungen_nivellement_naeherung_punkthoehen(r\"Daten\\Niv_bereinigt.DAT.csv\", 2)" ], "id": "1f61a51b2a7366e7", "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" ] }, { "ename": "TypeError", "evalue": "cannot unpack non-iterable NoneType object", "output_type": "error", "traceback": [ "\u001B[31m---------------------------------------------------------------------------\u001B[39m", "\u001B[31mTypeError\u001B[39m Traceback (most recent call last)", "\u001B[36mCell\u001B[39m\u001B[36m \u001B[39m\u001B[32mIn[18]\u001B[39m\u001B[32m, line 5\u001B[39m\n\u001B[32m 3\u001B[39m importlib.reload(Import)\n\u001B[32m 4\u001B[39m imp = Import.Import(pfad_datenbank)\n\u001B[32m----> \u001B[39m\u001B[32m5\u001B[39m dict_punkthoehen_naeherung_niv, liste_punkte_in_db = imp.vorbereitung_import_beobachtungen_nivellement_naeherung_punkthoehen(\u001B[33mr\u001B[39m\u001B[33m\"\u001B[39m\u001B[33mDaten\u001B[39m\u001B[33m\\\u001B[39m\u001B[33mNiv_bereinigt.DAT.csv\u001B[39m\u001B[33m\"\u001B[39m, \u001B[32m2\u001B[39m)\n", "\u001B[31mTypeError\u001B[39m: cannot unpack non-iterable NoneType object" ] } ], "execution_count": 18 }, { "metadata": { "ExecuteTime": { "end_time": "2025-12-31T14:36:33.266958Z", "start_time": "2025-12-31T14:36:33.244998Z" } }, "cell_type": "code", "source": [ "# Nivellement-Beobachtungen Importieren Teil 2\n", "\n", "importlib.reload(Import)\n", "imp = Import.Import(pfad_datenbank)\n", "liste_hoehenpunkte_hinzufuegen = ['FH14', 'FH11', 'FH13', 'FH3', 'FH4', 'FH15', 'FH5']\n", "imp.import_beobachtungen_nivellement_naeherung_punkthoehen(dict_punkthoehen_naeherung_niv, liste_punkte_in_db, liste_hoehenpunkte_hinzufuegen)" ], "id": "6c909b9792861b30", "outputs": [ { "ename": "NameError", "evalue": "name 'dict_punkthoehen_naeherung_niv' is not defined", "output_type": "error", "traceback": [ "\u001B[31m---------------------------------------------------------------------------\u001B[39m", "\u001B[31mNameError\u001B[39m Traceback (most recent call last)", "\u001B[36mCell\u001B[39m\u001B[36m \u001B[39m\u001B[32mIn[19]\u001B[39m\u001B[32m, line 6\u001B[39m\n\u001B[32m 4\u001B[39m imp = Import.Import(pfad_datenbank)\n\u001B[32m 5\u001B[39m liste_hoehenpunkte_hinzufuegen = [\u001B[33m'\u001B[39m\u001B[33mFH14\u001B[39m\u001B[33m'\u001B[39m, \u001B[33m'\u001B[39m\u001B[33mFH11\u001B[39m\u001B[33m'\u001B[39m, \u001B[33m'\u001B[39m\u001B[33mFH13\u001B[39m\u001B[33m'\u001B[39m, \u001B[33m'\u001B[39m\u001B[33mFH3\u001B[39m\u001B[33m'\u001B[39m, \u001B[33m'\u001B[39m\u001B[33mFH4\u001B[39m\u001B[33m'\u001B[39m, \u001B[33m'\u001B[39m\u001B[33mFH15\u001B[39m\u001B[33m'\u001B[39m, \u001B[33m'\u001B[39m\u001B[33mFH5\u001B[39m\u001B[33m'\u001B[39m]\n\u001B[32m----> \u001B[39m\u001B[32m6\u001B[39m imp.import_beobachtungen_nivellement_naeherung_punkthoehen(\u001B[43mdict_punkthoehen_naeherung_niv\u001B[49m, liste_punkte_in_db, liste_hoehenpunkte_hinzufuegen)\n", "\u001B[31mNameError\u001B[39m: name 'dict_punkthoehen_naeherung_niv' is not defined" ] } ], "execution_count": 19 }, { "metadata": { "ExecuteTime": { "end_time": "2025-12-31T14:36:35.363144Z", "start_time": "2025-12-31T14:36:35.356940Z" } }, "cell_type": "code", "source": [ "# Nivellement-Beobachtungen Importieren Teil 3\n", "importlib.reload(Import)\n", "imp = Import.Import(pfad_datenbank)\n", "imp.import_beobachtungen_nivellement_RVVR(r\"Daten\\Niv_bereinigt.DAT.csv\", 2)" ], "id": "4c06b9c4cd78e7b7", "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" ] } ], "execution_count": 20 }, { "metadata": { "ExecuteTime": { "end_time": "2025-12-31T14:39:34.955949Z", "start_time": "2025-12-31T14:36:36.034572Z" } }, "cell_type": "code", "source": [ "# Jacobimatrix aufstellen\n", "importlib.reload(Datenbank)\n", "db_zugriff = Datenbank.Datenbankzugriff(pfad_datenbank)\n", "\n", "# Parameter des GRS80-ellipsoids (Bezugsellipsoid des ETRS89 / DREF 91 (2025)\n", "# ToDo: Quelle mit möglichst genauen Parametern heraussuchen!\n", "a = 6378137.0 #m\n", "b = 63567552.314 #m\n", "\n", "importlib.reload(Funktionales_Modell)\n", "fm = Funktionales_Modell.FunktionalesModell(pfad_datenbank, a, b)\n", "\n", "#db_zugriff.get_beobachtungen_id_standpunkt_zielpunkt(\"tachymeter_distanz\")\n", "Jacobimatrix_symbolisch = fm.jacobi_matrix_symbolisch()[0]\n", "Jacobimatrix_symbolisch_liste_unbekannte = fm.jacobi_matrix_symbolisch()[1]\n", "Jacobimatrix_symbolisch_liste_beobachtungsvektor = fm.jacobi_matrix_symbolisch()[2]" ], "id": "c9367690f5b73953", "outputs": [], "execution_count": 21 }, { "metadata": { "ExecuteTime": { "end_time": "2025-12-31T14:45:40.048876Z", "start_time": "2025-12-31T14:40:52.112240Z" } }, "cell_type": "code", "source": [ "importlib.reload(Datenbank)\n", "db_zugriff = Datenbank.Datenbankzugriff(pfad_datenbank)\n", "importlib.reload(Funktionales_Modell)\n", "fm = Funktionales_Modell.FunktionalesModell(pfad_datenbank, a, b)\n", "\n", "A_matrix_numerisch_iteration0 = fm.jacobi_matrix_zahlen_iteration_0(Jacobimatrix_symbolisch, \"naeherung_us\", Jacobimatrix_symbolisch_liste_unbekannte, Jacobimatrix_symbolisch_liste_beobachtungsvektor)" ], "id": "163fa2e24923b40", "outputs": [], "execution_count": 22 }, { "metadata": { "ExecuteTime": { "end_time": "2025-12-31T14:45:40.257837Z", "start_time": "2025-12-31T14:45:40.075246Z" } }, "cell_type": "code", "source": [ "importlib.reload(Funktionales_Modell)\n", "fm = Funktionales_Modell.FunktionalesModell(pfad_datenbank, a, b)\n", "\n", "beobachtungsvektor_numerisch = fm.beobachtungsvektor_numerisch(Jacobimatrix_symbolisch_liste_beobachtungsvektor)" ], "id": "80e8325721c950f8", "outputs": [], "execution_count": 23 }, { "metadata": { "ExecuteTime": { "end_time": "2025-12-31T14:45:45.155803Z", "start_time": "2025-12-31T14:45:40.265300Z" } }, "cell_type": "code", "source": [ "importlib.reload(Funktionales_Modell)\n", "fm = Funktionales_Modell.FunktionalesModell(pfad_datenbank, a, b)\n", "\n", "beobachtungsvektor_naeherung_symbolisch = fm.beobachtungsvektor_naeherung_symbolisch(Jacobimatrix_symbolisch_liste_beobachtungsvektor)" ], "id": "33e9fbd465c577e4", "outputs": [], "execution_count": 24 }, { "metadata": { "ExecuteTime": { "end_time": "2025-12-31T14:48:17.115526Z", "start_time": "2025-12-31T14:47:11.852006Z" } }, "cell_type": "code", "source": [ "importlib.reload(Funktionales_Modell)\n", "fm = Funktionales_Modell.FunktionalesModell(pfad_datenbank, a, b)\n", "\n", "beobachtungsvektor_naeherung_numerisch_iteration0 = fm.beobachtungsvektor_naeherung_numerisch_iteration0(Jacobimatrix_symbolisch_liste_beobachtungsvektor, beobachtungsvektor_naeherung_symbolisch)" ], "id": "bcf3dd5fc820d077", "outputs": [], "execution_count": 25 }, { "metadata": { "ExecuteTime": { "end_time": "2025-12-31T14:50:02.113283Z", "start_time": "2025-12-31T14:48:17.132078Z" } }, "cell_type": "code", "source": [ "# Auftstellen der Qll-Matrix\n", "importlib.reload(Stochastisches_Modell)\n", "#stoch_modell = Stochastisches_Modell.StochastischesModell(A_matrix_numerisch_iteration0.rows)\n", "stoch_modell = Stochastisches_Modell.StochastischesModell(int(A_matrix_numerisch_iteration0.shape[0]))\n", "\n", "\n", "Qll_matrix_symbolisch = stoch_modell.Qll_symbolisch(pfad_datenbank, Jacobimatrix_symbolisch_liste_beobachtungsvektor)\n", "Qll_matrix_numerisch = stoch_modell.Qll_numerisch(pfad_datenbank, Qll_matrix_symbolisch,Jacobimatrix_symbolisch_liste_beobachtungsvektor)" ], "id": "c1def9b9b41efcd5", "outputs": [], "execution_count": 26 }, { "metadata": { "ExecuteTime": { "end_time": "2025-12-31T14:52:17.328226Z", "start_time": "2025-12-31T14:52:17.325802Z" } }, "cell_type": "code", "source": "", "id": "267b57d42d613059", "outputs": [], "execution_count": null }, { "metadata": { "ExecuteTime": { "end_time": "2025-12-31T14:52:17.334789Z", "start_time": "2025-12-31T14:52:17.333037Z" } }, "cell_type": "code", "source": "", "id": "62ce1bc475e81e81", "outputs": [], "execution_count": null }, { "metadata": { "ExecuteTime": { "end_time": "2025-12-31T14:52:17.342962Z", "start_time": "2025-12-31T14:52:17.341062Z" } }, "cell_type": "code", "source": "", "id": "275c60800b458eae", "outputs": [], "execution_count": null }, { "metadata": { "ExecuteTime": { "end_time": "2025-12-31T14:59:46.309624Z", "start_time": "2025-12-31T14:59:46.078948Z" } }, "cell_type": "code", "source": [ "importlib.reload(Funktionales_Modell)\n", "fm = Funktionales_Modell.FunktionalesModell(pfad_datenbank, a, b)\n", "\n", "importlib.reload(Parameterschaetzung)\n", "importlib.reload(Stochastisches_Modell)\n", "\n", "importlib.reload(Netzqualität_Genauigkeit)\n", "importlib.reload(Export)\n", "\n", "\n", "#stoch_modell = Stochastisches_Modell.StochastischesModell(A_matrix_numerisch_iteration0.rows)\n", "stoch_modell = Stochastisches_Modell.StochastischesModell(int(A_matrix_numerisch_iteration0.shape[0]))\n", "\n", "dl = fm.berechnung_dl(beobachtungsvektor_numerisch,\n", " beobachtungsvektor_naeherung_numerisch_iteration0,\n", " Jacobimatrix_symbolisch_liste_beobachtungsvektor)\n", "dx = Parameterschaetzung.ausgleichung_global(A_matrix_numerisch_iteration0, dl, stoch_modell)[1]" ], "id": "51e477719146ccf5", "outputs": [ { "ename": "TypeError", "evalue": "ausgleichung_global() missing 7 required positional arguments: 'x0', 'idx_X', 'idx_Y', 'idx_Z', 'anschluss_indices', 'anschluss_werte', and 'Sigma_AA'", "output_type": "error", "traceback": [ "\u001B[31m---------------------------------------------------------------------------\u001B[39m", "\u001B[31mTypeError\u001B[39m Traceback (most recent call last)", "\u001B[36mCell\u001B[39m\u001B[36m \u001B[39m\u001B[32mIn[28]\u001B[39m\u001B[32m, line 17\u001B[39m\n\u001B[32m 12\u001B[39m stoch_modell = Stochastisches_Modell.StochastischesModell(\u001B[38;5;28mint\u001B[39m(A_matrix_numerisch_iteration0.shape[\u001B[32m0\u001B[39m]))\n\u001B[32m 14\u001B[39m dl = fm.berechnung_dl(beobachtungsvektor_numerisch,\n\u001B[32m 15\u001B[39m beobachtungsvektor_naeherung_numerisch_iteration0,\n\u001B[32m 16\u001B[39m Jacobimatrix_symbolisch_liste_beobachtungsvektor)\n\u001B[32m---> \u001B[39m\u001B[32m17\u001B[39m dx = \u001B[43mParameterschaetzung\u001B[49m\u001B[43m.\u001B[49m\u001B[43mausgleichung_global\u001B[49m\u001B[43m(\u001B[49m\u001B[43mA_matrix_numerisch_iteration0\u001B[49m\u001B[43m,\u001B[49m\u001B[43m \u001B[49m\u001B[43mdl\u001B[49m\u001B[43m,\u001B[49m\u001B[43m \u001B[49m\u001B[43mstoch_modell\u001B[49m\u001B[43m)\u001B[49m[\u001B[32m1\u001B[39m]\n", "\u001B[31mTypeError\u001B[39m: ausgleichung_global() missing 7 required positional arguments: 'x0', 'idx_X', 'idx_Y', 'idx_Z', 'anschluss_indices', 'anschluss_werte', and 'Sigma_AA'" ] } ], "execution_count": 28 }, { "metadata": {}, "cell_type": "code", "source": [ "# Von Fabian\n", "\n", "importlib.reload(Funktionales_Modell)\n", "fm = Funktionales_Modell.FunktionalesModell(pfad_datenbank, a, b)\n", "importlib.reload(Export)\n", "importlib.reload(Datenbank)\n", "\n", "unbekanntenvektor_symbolisch = (fm.unbekanntenvektor_symbolisch(Jacobimatrix_symbolisch_liste_unbekannte))\n", "unbekanntenvektor_numerisch_iteration0 = fm.unbekanntenvektor_numerisch(Jacobimatrix_symbolisch_liste_unbekannte, unbekanntenvektor_symbolisch)\n", "print(unbekanntenvektor_numerisch_iteration0)\n", "print(\"-----\")\n", "unbekanntenvektor_numerisch = fm.unbekanntenvektor_numerisch(Jacobimatrix_symbolisch_liste_unbekannte, unbekanntenvektor_symbolisch, dx, unbekanntenvektor_numerisch_iteration0)\n", "print(unbekanntenvektor_numerisch)" ], "id": "4d9de2135d4c53b0", "outputs": [], "execution_count": null }, { "metadata": {}, "cell_type": "code", "source": [ "import importlib\n", "import Netzqualität_Genauigkeit\n", "importlib.reload(Netzqualität_Genauigkeit)\n", "\n", "import Parameterschaetzung\n", "importlib.reload(Parameterschaetzung)" ], "id": "cdacfd2abaa81b76", "outputs": [], "execution_count": null }, { "metadata": {}, "cell_type": "code", "source": [ "import sympy as sp\n", "\n", "# -----------------------------\n", "# 1) Punktliste aus Unbekannten ableiten (konsistent zur A-Matrix!)\n", "# -----------------------------\n", "liste_punktnummern = []\n", "for sym in Jacobimatrix_symbolisch_liste_unbekannte:\n", " name = str(sym)\n", " if name.startswith(\"X\"): # X10001, X10002, ...\n", " liste_punktnummern.append(name[1:]) # \"10001\", ...\n", "\n", "# -----------------------------\n", "# 2) idx_X / idx_Y / idx_Z passend zur Punktliste\n", "# (weil Unbekanntenreihenfolge pro Punkt: X,Y,Z)\n", "# -----------------------------\n", "nP = len(liste_punktnummern)\n", "idx_X = [3*p for p in range(nP)]\n", "idx_Y = [3*p + 1 for p in range(nP)]\n", "idx_Z = [3*p + 2 for p in range(nP)]\n", "\n", "# -----------------------------\n", "# 3) Datumsauswahl (gemischt möglich) -> aktive Indizes\n", "# -----------------------------\n", "auswahl = [(pt, c) for pt in liste_punktnummern for c in (\"X\",\"Y\",\"Z\")]\n", "\n", "aktive_unbekannte_indices = Datumsfestlegung.Datumsfestlegung.datumskomponenten(\n", " auswahl,\n", " liste_punktnummern\n", ")\n", "\n", "# -----------------------------\n", "# 4) Startwerte x(0) aus den vorhandenen Substitutionen (Iteration 0)\n", "# Alles, was nicht im Dict ist (z.B. Orientierungen), wird 0.0 gesetzt.\n", "basis_subs = fm.substitutionen_dict\n", "\n", "x = sp.Matrix([[float(basis_subs.get(sym, 0.0))] for sym in Jacobimatrix_symbolisch_liste_unbekannte])\n", "\n", "# 5) Iteration mit lokaler Ausgleichung + Teilspur\n", "max_iter = 1\n", "tol = 1e-4 # m\n", "\n", "for it in range(max_iter):\n", "\n", " # a) Substitutionen für diese Iteration: Basis + aktuelle Unbekannte\n", " subs_it = dict(basis_subs)\n", " for sym, val in zip(Jacobimatrix_symbolisch_liste_unbekannte, list(x)):\n", " subs_it[sym] = float(val)\n", "\n", " # b) A(x) numerisch aus symbolischer Jacobi\n", " A_it = Jacobimatrix_symbolisch.xreplace(subs_it)\n", "\n", " # c) l0(x) numerisch aus symbolischem Näherungs-Beobachtungsvektor\n", " l0_it = beobachtungsvektor_naeherung_symbolisch.xreplace(subs_it)\n", "\n", " # d) dl = l - l0\n", " dl_it = beobachtungsvektor_numerisch - l0_it\n", "\n", " # e) lokale Ausgleichung\n", " res_dict, dx = Parameterschaetzung.ausgleichung_lokal(\n", " A=A_it,\n", " dl=dl_it,\n", " Q_ll=Qll_matrix_numerisch,\n", " x0=x,\n", " liste_punktnummern=liste_punktnummern,\n", " auswahl=auswahl,\n", " mit_massstab=False\n", " )\n", "\n", " x = x + dx\n", "\n", " # f) Abbruchkriterium\n", " max_abs_dx = max(abs(float(v)) for v in dx)\n", " print(\n", " f\"Iter {it}: max|dx| = {max_abs_dx:.3e} m, \"\n", " f\"r_gesamt={res_dict.get('r_gesamt', None)}, \"\n", " f\"sigma0={res_dict.get('sigma0_apost', None)}\"\n", " )\n", " print(\"l :\", float(beobachtungsvektor_numerisch[0]))\n", " print(\"l0 :\", float(l0_it[0]))\n", " print(\"dl :\", float(dl_it[0]))\n", "\n", "\n", " if max_abs_dx < tol:\n", " print(\"Konvergenz erreicht.\")\n", " break\n", "\n", "# Ergebnis: x enthält die geschätzten Unbekannten nach letzter Iteration\n", "x" ], "id": "f8288801adb49c41", "outputs": [], "execution_count": null }, { "metadata": {}, "cell_type": "code", "source": "", "id": "7fd1fb69ce8bcc4c", "outputs": [], "execution_count": null }, { "metadata": {}, "cell_type": "code", "outputs": [], "execution_count": null, "source": "", "id": "8ce20bc9494deeb5" } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 2 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython2", "version": "2.7.6" } }, "nbformat": 4, "nbformat_minor": 5 }