1869 lines
65 KiB
Plaintext
1869 lines
65 KiB
Plaintext
{
|
|
"cells": [
|
|
{
|
|
"metadata": {
|
|
"ExecuteTime": {
|
|
"end_time": "2026-01-07T16:53:18.235543Z",
|
|
"start_time": "2026-01-07T16:53:17.375637Z"
|
|
}
|
|
},
|
|
"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": "2026-01-07T16:53:18.257894Z",
|
|
"start_time": "2026-01-07T16:53:18.253426Z"
|
|
}
|
|
},
|
|
"cell_type": "code",
|
|
"source": [
|
|
"# Hier werden allgemeine Einstellungen für die Ausgleichung vorgenommen\n",
|
|
"\n",
|
|
"datumfestlegung = \"weiche Lagerung\""
|
|
],
|
|
"id": "4f7efd7ba6ec18f9",
|
|
"outputs": [],
|
|
"execution_count": 2
|
|
},
|
|
{
|
|
"metadata": {
|
|
"ExecuteTime": {
|
|
"end_time": "2026-01-07T16:53:18.315299Z",
|
|
"start_time": "2026-01-07T16:53:18.270544Z"
|
|
}
|
|
},
|
|
"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": 3
|
|
},
|
|
{
|
|
"metadata": {
|
|
"ExecuteTime": {
|
|
"end_time": "2026-01-07T16:53:18.336302Z",
|
|
"start_time": "2026-01-07T16:53:18.324304Z"
|
|
}
|
|
},
|
|
"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 der Näherungskoordinaten wurde erfolgreich abgeschlossen\n"
|
|
]
|
|
}
|
|
],
|
|
"execution_count": 4
|
|
},
|
|
{
|
|
"metadata": {
|
|
"ExecuteTime": {
|
|
"end_time": "2026-01-07T16:53:18.383715Z",
|
|
"start_time": "2026-01-07T16:53:18.371556Z"
|
|
}
|
|
},
|
|
"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": 5
|
|
},
|
|
{
|
|
"metadata": {
|
|
"ExecuteTime": {
|
|
"end_time": "2026-01-07T16:53:18.433103Z",
|
|
"start_time": "2026-01-07T16:53:18.428516Z"
|
|
}
|
|
},
|
|
"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": [
|
|
"{}\n"
|
|
]
|
|
}
|
|
],
|
|
"execution_count": 6
|
|
},
|
|
{
|
|
"metadata": {
|
|
"ExecuteTime": {
|
|
"end_time": "2026-01-07T16:53:18.484333Z",
|
|
"start_time": "2026-01-07T16:53:18.467651Z"
|
|
}
|
|
},
|
|
"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": 7,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"execution_count": 7
|
|
},
|
|
{
|
|
"metadata": {
|
|
"ExecuteTime": {
|
|
"end_time": "2026-01-07T16:53:18.516173Z",
|
|
"start_time": "2026-01-07T16:53:18.501776Z"
|
|
}
|
|
},
|
|
"cell_type": "code",
|
|
"source": [
|
|
"# Basislinien importieren\n",
|
|
"\n",
|
|
"importlib.reload(Import)\n",
|
|
"imp = Import.Import(pfad_datenbank)\n",
|
|
"\n",
|
|
"pfad_basislinien_gnss = r\"Daten\\Basislinien_OL_umliegend_bereinigt.asc.txt\"\n",
|
|
"\n",
|
|
"imp.import_basislinien_gnss(pfad_basislinien_gnss)"
|
|
],
|
|
"id": "2d8a0533726304a8",
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"Der Import der Datei Daten\\Basislinien_OL_umliegend_bereinigt.asc.txt wurde erfolgreich abgeschlossen.\n"
|
|
]
|
|
}
|
|
],
|
|
"execution_count": 8
|
|
},
|
|
{
|
|
"metadata": {
|
|
"ExecuteTime": {
|
|
"end_time": "2026-01-07T16:53:18.540269Z",
|
|
"start_time": "2026-01-07T16:53:18.527963Z"
|
|
}
|
|
},
|
|
"cell_type": "code",
|
|
"source": [
|
|
"# Jacobimatrix aufstellen\n",
|
|
"# Datumsgebende Koordinaten bestimmen\n",
|
|
"importlib.reload(Datenbank)\n",
|
|
"db_zugriff = Datenbank.Datenbankzugriff(pfad_datenbank)\n",
|
|
"\n",
|
|
"liste_koordinaten_x = []\n",
|
|
"liste_koordinaten_y = []\n",
|
|
"liste_koordinaten_z = []\n",
|
|
"liste_koordinaten_x_y_z = [10054, 10014, 10008, 10059, 10037, 10044, 10026, 10001, 10002, 10028]\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 = []\n",
|
|
"liste_koordinaten_y = []\n",
|
|
"liste_koordinaten_z = []\n",
|
|
"liste_koordinaten_x_y_z = []\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": 9
|
|
},
|
|
{
|
|
"metadata": {
|
|
"ExecuteTime": {
|
|
"end_time": "2026-01-07T16:53:18.556034Z",
|
|
"start_time": "2026-01-07T16:53:18.551738Z"
|
|
}
|
|
},
|
|
"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": 10
|
|
},
|
|
{
|
|
"metadata": {
|
|
"ExecuteTime": {
|
|
"end_time": "2026-01-07T16:53:21.444673Z",
|
|
"start_time": "2026-01-07T16:53:18.579007Z"
|
|
}
|
|
},
|
|
"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: 45\n",
|
|
"min/mean/max: 0.9986498495467658 0.9999468893556359 1.0004164038548047\n",
|
|
"std: 0.00025301851725699595\n",
|
|
"S_loc: Matrix([[937.945990000000], [1847.25831000000], [99.9451600000000]])\n",
|
|
"S_ecef: Matrix([[3794821.39483000], [546885.587320000], [5080110.27740000]])\n",
|
|
"Delta: Matrix([[3.79388e+6], [545038.], [5.08001e+6]])\n",
|
|
"10054 0.0004\n",
|
|
"10059 0.0004\n",
|
|
"10037 0.0002\n",
|
|
"10028 0.0002\n",
|
|
"10044 0.0001\n",
|
|
"10001 0.0001\n",
|
|
"10014 0.0001\n",
|
|
"10002 0.0001\n",
|
|
"10026 0.0001\n",
|
|
"10008 0.0001\n",
|
|
"Anzahl gemeinsame Punkte: 10\n",
|
|
"\n",
|
|
"Erste Zielpunkte:\n",
|
|
"10001 [3794901.5252, 546745.559, 5080065.7672]\n",
|
|
"10002 [3794866.9711, 546729.5958, 5080092.6364]\n",
|
|
"10008 [3794783.8581, 546746.6347, 5080152.7404]\n",
|
|
"10014 [3794838.7464, 546812.3658, 5080105.2]\n",
|
|
"10026 [3794753.8595, 546827.4296, 5080167.0938]\n",
|
|
"\n",
|
|
"Erste Ausgangspunkte:\n",
|
|
"10001 [833.9439, 1978.3737, 99.8946]\n",
|
|
"10002 [875.9684, 1998.5174, 99.5867]\n",
|
|
"10008 [979.7022, 1991.401, 99.732]\n",
|
|
"10014 [913.9706, 1918.7731, 99.8872]\n",
|
|
"10026 [1020.0059, 1913.8703, 100.3059]\n",
|
|
"min/mean/max: 0.9986498495467658 0.9999468893556359 1.0004164038548047\n",
|
|
"R ist Orthonormal!\n",
|
|
"Iteration Nr.1 abgeschlossen\n",
|
|
"Matrix([[-11.6], [6.17], [1.24], [-0.0287], [-0.303], [0.0131], [0.234]])\n",
|
|
"Iteration Nr.2 abgeschlossen\n",
|
|
"Matrix([[6.69], [-7.21], [-7.49], [0.0287], [-0.00526], [-0.0136], [0.00423]])\n",
|
|
"Iteration Nr.3 abgeschlossen\n",
|
|
"Matrix([[-0.0296], [0.0719], [0.0282], [4.06e-5], [0.000189], [0.000386], [-0.000202]])\n",
|
|
"Iteration Nr.4 abgeschlossen\n",
|
|
"Matrix([[-0.000141], [3.72e-5], [-0.000110], [4.57e-8], [-8.87e-9], [9.87e-8], [-5.50e-8]])\n",
|
|
"Iteration Nr.5 abgeschlossen\n",
|
|
"Matrix([[-2.01e-8], [-2.70e-9], [-2.25e-8], [-4.34e-14], [-5.16e-12], [2.79e-11], [5.62e-12]])\n",
|
|
"Iteration Nr.6 abgeschlossen\n",
|
|
"Matrix([[5.49e-10], [-9.92e-10], [-2.05e-9], [1.18e-13], [-8.18e-13], [1.23e-12], [1.45e-12]])\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]])\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]])\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",
|
|
"10008: 3794783.863, 546746.642, 5080152.749\n",
|
|
"10014: 3794838.739, 546812.364, 5080105.171\n",
|
|
"10026: 3794753.855, 546827.443, 5080167.088\n",
|
|
"10028: 3794889.666, 546908.762, 5080056.912\n",
|
|
"10037: 3794800.626, 546960.749, 5080117.708\n",
|
|
"10044: 3794752.687, 546958.324, 5080154.240\n",
|
|
"10054: 3794889.165, 547086.950, 5080038.116\n",
|
|
"10059: 3794736.836, 547079.449, 5080152.372\n",
|
|
"Streckendifferenzen:\n",
|
|
"[0.037854, 0.054708, 0.012057, 0.029525, 0.015332, 0.073156, 0.071369, 0.025069, 0.127425, 0.139397]\n",
|
|
"\n",
|
|
"Differenz Schwerpunkt (Vektor):\n",
|
|
"Matrix([[7.45e-10], [-1.16e-11], [8.38e-10]])\n",
|
|
"Betrag der Schwerpunkt-Differenz:\n",
|
|
"0.000m\n"
|
|
]
|
|
}
|
|
],
|
|
"execution_count": 11
|
|
},
|
|
{
|
|
"metadata": {
|
|
"ExecuteTime": {
|
|
"end_time": "2026-01-07T16:53:21.584229Z",
|
|
"start_time": "2026-01-07T16:53:21.544702Z"
|
|
}
|
|
},
|
|
"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": [
|
|
"{'10003': Matrix([\n",
|
|
"[3794841.05160911],\n",
|
|
"[546735.115275456],\n",
|
|
"[5080111.54339933]]), '10004': Matrix([\n",
|
|
"[3794803.45940551],\n",
|
|
"[546714.140641702],\n",
|
|
"[ 5080141.3823901]]), '10005': Matrix([\n",
|
|
"[3794793.84166274],\n",
|
|
"[ 546722.32090113],\n",
|
|
"[5080147.93094291]]), '10006': Matrix([\n",
|
|
"[3794766.35574829],\n",
|
|
"[546707.638500931],\n",
|
|
"[5080169.73347008]]), '10007': Matrix([\n",
|
|
"[3794831.04653105],\n",
|
|
"[546758.725470118],\n",
|
|
"[5080116.66332494]]), '10009': Matrix([\n",
|
|
"[3794767.47195461],\n",
|
|
"[546740.086996252],\n",
|
|
"[5080165.95212446]]), '10010': Matrix([\n",
|
|
"[3794758.63661992],\n",
|
|
"[546767.666577211],\n",
|
|
"[5080169.46449998]]), '10011': Matrix([\n",
|
|
"[3794894.92257966],\n",
|
|
"[546833.115975429],\n",
|
|
"[5080061.15134195]]), '10012': Matrix([\n",
|
|
"[3794853.60027107],\n",
|
|
"[546805.236484738],\n",
|
|
"[5080094.88946121]]), '10013': Matrix([\n",
|
|
"[3794849.60872447],\n",
|
|
"[ 546826.86855409],\n",
|
|
"[5080095.43002485]]), '10015': Matrix([\n",
|
|
"[3794839.46502568],\n",
|
|
"[546793.516554541],\n",
|
|
"[5080106.77121535]]), '10016': Matrix([\n",
|
|
"[3794826.65837474],\n",
|
|
"[ 546788.72753901],\n",
|
|
"[5080116.86823753]]), '10017': Matrix([\n",
|
|
"[3794825.01615411],\n",
|
|
"[ 546831.69988615],\n",
|
|
"[5080113.37479229]]), '10018': Matrix([\n",
|
|
"[3794762.24812675],\n",
|
|
"[546797.691250755],\n",
|
|
"[5080163.98038017]]), '10019': Matrix([\n",
|
|
"[3794800.09467062],\n",
|
|
"[546833.323961445],\n",
|
|
"[5080131.72453226]]), '10020': Matrix([\n",
|
|
"[3794782.61058088],\n",
|
|
"[546834.470509102],\n",
|
|
"[5080145.03614137]]), '10021': Matrix([\n",
|
|
"[3794776.02957169],\n",
|
|
"[ 546833.74069488],\n",
|
|
"[5080150.01297385]]), '10022': Matrix([\n",
|
|
"[3794778.33715317],\n",
|
|
"[546841.750187296],\n",
|
|
"[5080147.27507413]]), '10023': Matrix([\n",
|
|
"[3794780.79521146],\n",
|
|
"[546848.101209168],\n",
|
|
"[5080144.92492221]]), '10024': Matrix([\n",
|
|
"[3794772.81613581],\n",
|
|
"[546857.095708699],\n",
|
|
"[5080149.83471416]]), '10025': Matrix([\n",
|
|
"[3794774.20856191],\n",
|
|
"[546871.810730791],\n",
|
|
"[5080147.35917511]]), '10027': Matrix([\n",
|
|
"[3794757.59126177],\n",
|
|
"[ 546874.33140033],\n",
|
|
"[ 5080159.3175342]]), '10029': Matrix([\n",
|
|
"[3794845.02635416],\n",
|
|
"[ 546914.91670774],\n",
|
|
"[5080089.09994617]]), '10030': Matrix([\n",
|
|
"[3794845.35315639],\n",
|
|
"[546901.027441841],\n",
|
|
"[5080090.35653172]]), '10031': Matrix([\n",
|
|
"[3794821.75944771],\n",
|
|
"[546877.548058418],\n",
|
|
"[5080110.74604618]]), '10032': Matrix([\n",
|
|
"[ 3794807.8482107],\n",
|
|
"[546888.486125463],\n",
|
|
"[5080119.74590858]]), '10033': Matrix([\n",
|
|
"[3794800.01604745],\n",
|
|
"[546874.652456339],\n",
|
|
"[ 5080127.2047441]]), '10034': Matrix([\n",
|
|
"[3794886.10489475],\n",
|
|
"[546965.698741554],\n",
|
|
"[5080053.40592357]]), '10035': Matrix([\n",
|
|
"[3794845.94875191],\n",
|
|
"[546961.512678588],\n",
|
|
"[5080084.08751097]]), '10036': Matrix([\n",
|
|
"[ 3794815.0546409],\n",
|
|
"[546969.596670608],\n",
|
|
"[5080106.06411486]]), '10038': Matrix([\n",
|
|
"[3794806.32334837],\n",
|
|
"[546929.730872601],\n",
|
|
"[5080116.89880491]]), '10039': Matrix([\n",
|
|
"[3794804.16237313],\n",
|
|
"[546914.731636072],\n",
|
|
"[5080120.13924256]]), '10040': Matrix([\n",
|
|
"[3794780.72087746],\n",
|
|
"[546956.424991315],\n",
|
|
"[5080133.16147109]]), '10041': Matrix([\n",
|
|
"[ 3794778.1533287],\n",
|
|
"[546925.877928891],\n",
|
|
"[5080138.72231384]]), '10042': Matrix([\n",
|
|
"[3794758.95717917],\n",
|
|
"[546937.059902176],\n",
|
|
"[5080151.61030441]]), '10043': Matrix([\n",
|
|
"[3794747.27379863],\n",
|
|
"[546919.149782895],\n",
|
|
"[5080162.14971609]]), '10045': Matrix([\n",
|
|
"[3794881.90045231],\n",
|
|
"[547019.783587438],\n",
|
|
"[5080050.71577784]]), '10046': Matrix([\n",
|
|
"[3794846.58037187],\n",
|
|
"[547012.997115671],\n",
|
|
"[5080077.44042076]]), '10047': Matrix([\n",
|
|
"[3794831.53498179],\n",
|
|
"[547018.239388235],\n",
|
|
"[5080088.12403859]]), '10048': Matrix([\n",
|
|
"[3794809.10667963],\n",
|
|
"[547017.302310622],\n",
|
|
"[ 5080105.0143912]]), '10049': Matrix([\n",
|
|
"[3794786.89079629],\n",
|
|
"[547021.076569963],\n",
|
|
"[5080121.44468111]]), '10050': Matrix([\n",
|
|
"[3794766.77195448],\n",
|
|
"[547012.526623627],\n",
|
|
"[5080137.48497074]]), '10051': Matrix([\n",
|
|
"[3794767.05746264],\n",
|
|
"[546988.699370853],\n",
|
|
"[5080139.99787468]]), '10052': Matrix([\n",
|
|
"[3794743.62620891],\n",
|
|
"[546984.415934838],\n",
|
|
"[5080157.83116681]]), '10053': Matrix([\n",
|
|
"[3794748.14608301],\n",
|
|
"[ 547017.57483818],\n",
|
|
"[5080150.93007251]]), '10055': Matrix([\n",
|
|
"[3794838.85197728],\n",
|
|
"[547081.903863645],\n",
|
|
"[5080075.69824785]]), '10056': Matrix([\n",
|
|
"[3794825.04100344],\n",
|
|
"[547094.811574165],\n",
|
|
"[5080084.48876832]]), '10057': Matrix([\n",
|
|
"[ 3794800.8193707],\n",
|
|
"[547078.671611169],\n",
|
|
"[5080104.57270624]]), '10058': Matrix([\n",
|
|
"[3794766.10881437],\n",
|
|
"[547091.754287187],\n",
|
|
"[5080129.12088173]])}\n"
|
|
]
|
|
}
|
|
],
|
|
"execution_count": 12
|
|
},
|
|
{
|
|
"metadata": {
|
|
"ExecuteTime": {
|
|
"end_time": "2026-01-07T16:53:21.657166Z",
|
|
"start_time": "2026-01-07T16:53:21.642656Z"
|
|
}
|
|
},
|
|
"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": 13
|
|
},
|
|
{
|
|
"metadata": {
|
|
"ExecuteTime": {
|
|
"end_time": "2026-01-07T16:53:21.703399Z",
|
|
"start_time": "2026-01-07T16:53:21.679439Z"
|
|
}
|
|
},
|
|
"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 wurde erfolgreich hinzugefügt.\n",
|
|
"Das Instrument Trimble DiNi 0.3 wurde erfolgreich hinzugefügt.\n"
|
|
]
|
|
},
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"[(1, 'Tachymeter', 'Trimble S9')]"
|
|
]
|
|
},
|
|
"execution_count": 14,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"execution_count": 14
|
|
},
|
|
{
|
|
"metadata": {
|
|
"ExecuteTime": {
|
|
"end_time": "2026-01-07T16:53:21.740755Z",
|
|
"start_time": "2026-01-07T16:53:21.715666Z"
|
|
}
|
|
},
|
|
"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 für die Beobachtungsart Tachymeter_Richtung des Instrumentes Trimble S9 wurde erfolgreich hinzugefügt.\n",
|
|
"Die Genauigkeitsangabe für die Beobachtungsart Tachymeter_Strecke des Instrumentes Trimble S9 wurde erfolgreich hinzugefügt.\n",
|
|
"Die Genauigkeitsangabe für die Beobachtungsart Tachymeter_Zenitwinkel des Instrumentes Trimble S9 wurde erfolgreich hinzugefügt.\n"
|
|
]
|
|
}
|
|
],
|
|
"execution_count": 15
|
|
},
|
|
{
|
|
"metadata": {
|
|
"ExecuteTime": {
|
|
"end_time": "2026-01-07T16:53:21.786423Z",
|
|
"start_time": "2026-01-07T16:53:21.759186Z"
|
|
}
|
|
},
|
|
"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 der Datei Daten\\campsnetz_beobachtungen_bereinigt.csv wurde erfolgreich abgeschlossen.\n"
|
|
]
|
|
}
|
|
],
|
|
"execution_count": 16
|
|
},
|
|
{
|
|
"metadata": {
|
|
"ExecuteTime": {
|
|
"end_time": "2026-01-07T16:53:21.817850Z",
|
|
"start_time": "2026-01-07T16:53:21.803986Z"
|
|
}
|
|
},
|
|
"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 neu hinzugefügt.\\nDer HFP 812 wurde neu hinzugefügt.\\nDer HFP 816 wurde neu hinzugefügt.'"
|
|
]
|
|
},
|
|
"execution_count": 17,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"execution_count": 17
|
|
},
|
|
{
|
|
"metadata": {
|
|
"ExecuteTime": {
|
|
"end_time": "2026-01-07T16:53:21.855238Z",
|
|
"start_time": "2026-01-07T16:53:21.847536Z"
|
|
}
|
|
},
|
|
"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": [
|
|
"[('666', 3.891), ('812', 3.999), ('816', 3.995)]"
|
|
]
|
|
},
|
|
"execution_count": 18,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"execution_count": 18
|
|
},
|
|
{
|
|
"metadata": {
|
|
"ExecuteTime": {
|
|
"end_time": "2026-01-07T16:53:21.924711Z",
|
|
"start_time": "2026-01-07T16:53:21.913744Z"
|
|
}
|
|
},
|
|
"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": [
|
|
"Für folgende Nivellementpunkte werden die Höhen in der Ausgleichung berechnet: ['812', '10047', '10046', '10045', '10034', '10035', '10029', '10030', '10031', '10017', '10013', '10012', '10014', '10015', '10016', '10007', '666', '10054', '10056', '10058', '10052', '10043', '10026', '10010', '10006', '816', '10048', '10049', '10053', '10050', '10051', '10040', '10037', '10038', '10039', '10032', '10033', '10025', '10024', '10023', '10022', '10021', '10020', '10019', '10036', '10028', '10011', '10001', '10003', '10008', '10005', '10004', '10002', '10055', '10057', '10059', '10044', '10041', '10042', '10027', '10018', '10009']\n",
|
|
"Für folgende Punkte wird aktuell keine Höhe in der Ausgleichung berechnet: ['FH14', '80001', 'FH11', 'FH13', '80002', '90001', '90002', '90003', '90004', '90005', '90006', '90007', '90008', '90009', '90010', '90011', '90012', '90013', '90014', 'FH3', 'FH4', '70001', 'FH15', '70002', '60001', 'FH5', '60002', '60003', '60004', '60005', '60006', '60007', '60008', '60009', '60010', '30001', '30002', '30003', '30004', '30005', '30006', '30007', '30008']. Bei Bedarf im folgenden Schritt ändern!\n"
|
|
]
|
|
}
|
|
],
|
|
"execution_count": 19
|
|
},
|
|
{
|
|
"metadata": {
|
|
"ExecuteTime": {
|
|
"end_time": "2026-01-07T16:53:21.965219Z",
|
|
"start_time": "2026-01-07T16:53:21.952162Z"
|
|
}
|
|
},
|
|
"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",
|
|
"liste_hoehenpunkte_hinzufuegen = []\n",
|
|
"imp.import_beobachtungen_nivellement_naeherung_punkthoehen(dict_punkthoehen_naeherung_niv, liste_punkte_in_db, liste_hoehenpunkte_hinzufuegen)"
|
|
],
|
|
"id": "6c909b9792861b30",
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"Neu hinzugefügt (0): []\n",
|
|
"Bereits vorhanden (0): []\n",
|
|
"Geändert (62): ['812', '10047', '10046', '10045', '10034', '10035', '10029', '10030', '10031', '10017', '10013', '10012', '10014', '10015', '10016', '10007', '666', '10054', '10056', '10058', '10052', '10043', '10026', '10010', '10006', '816', '10048', '10049', '10053', '10050', '10051', '10040', '10037', '10038', '10039', '10032', '10033', '10025', '10024', '10023', '10022', '10021', '10020', '10019', '10036', '10028', '10011', '10001', '10003', '10008', '10005', '10004', '10002', '10055', '10057', '10059', '10044', '10041', '10042', '10027', '10018', '10009']\n",
|
|
"\n"
|
|
]
|
|
},
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"\"Für folgende Punkte werden die Höhen Ausgeglichen: ['812', '10047', '10046', '10045', '10034', '10035', '10029', '10030', '10031', '10017', '10013', '10012', '10014', '10015', '10016', '10007', '666', '10054', '10056', '10058', '10052', '10043', '10026', '10010', '10006', '816', '10048', '10049', '10053', '10050', '10051', '10040', '10037', '10038', '10039', '10032', '10033', '10025', '10024', '10023', '10022', '10021', '10020', '10019', '10036', '10028', '10011', '10001', '10003', '10008', '10005', '10004', '10002', '10055', '10057', '10059', '10044', '10041', '10042', '10027', '10018', '10009']\""
|
|
]
|
|
},
|
|
"execution_count": 20,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"execution_count": 20
|
|
},
|
|
{
|
|
"metadata": {
|
|
"ExecuteTime": {
|
|
"end_time": "2026-01-07T16:53:22.016132Z",
|
|
"start_time": "2026-01-07T16:53:21.998840Z"
|
|
}
|
|
},
|
|
"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": [
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"'Die Beobachtungen aus der Datei Daten\\\\Niv_bereinigt.DAT.csv wurden erfolgreich importiert.'"
|
|
]
|
|
},
|
|
"execution_count": 21,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"execution_count": 21
|
|
},
|
|
{
|
|
"metadata": {
|
|
"ExecuteTime": {
|
|
"end_time": "2026-01-07T16:53:47.958620Z",
|
|
"start_time": "2026-01-07T16:53:22.025978Z"
|
|
}
|
|
},
|
|
"cell_type": "code",
|
|
"source": [
|
|
"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, Jacobimatrix_symbolisch_liste_unbekannte, Jacobimatrix_symbolisch_liste_beobachtungsvektor= fm.jacobi_matrix_symbolisch(datumfestlegung, db_zugriff.get_datumskoordinate())"
|
|
],
|
|
"id": "c9367690f5b73953",
|
|
"outputs": [],
|
|
"execution_count": 22
|
|
},
|
|
{
|
|
"metadata": {
|
|
"ExecuteTime": {
|
|
"end_time": "2026-01-07T16:59:30.359379Z",
|
|
"start_time": "2026-01-07T16:54:03.066002Z"
|
|
}
|
|
},
|
|
"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": 23
|
|
},
|
|
{
|
|
"metadata": {
|
|
"ExecuteTime": {
|
|
"end_time": "2026-01-07T16:59:30.586776Z",
|
|
"start_time": "2026-01-07T16:59:30.452151Z"
|
|
}
|
|
},
|
|
"cell_type": "code",
|
|
"source": [
|
|
"importlib.reload(Datenbank)\n",
|
|
"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": 24
|
|
},
|
|
{
|
|
"metadata": {
|
|
"ExecuteTime": {
|
|
"end_time": "2026-01-07T16:59:31.397290Z",
|
|
"start_time": "2026-01-07T16:59:30.594141Z"
|
|
}
|
|
},
|
|
"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": 25
|
|
},
|
|
{
|
|
"metadata": {
|
|
"ExecuteTime": {
|
|
"end_time": "2026-01-07T17:00:27.366806Z",
|
|
"start_time": "2026-01-07T16:59:47.883767Z"
|
|
}
|
|
},
|
|
"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": 26
|
|
},
|
|
{
|
|
"metadata": {
|
|
"ExecuteTime": {
|
|
"end_time": "2026-01-07T17:02:19.336413Z",
|
|
"start_time": "2026-01-07T17:00:27.375923Z"
|
|
}
|
|
},
|
|
"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)\n",
|
|
"if datumfestlegung == \"weiche Lagerung\":\n",
|
|
" QAA_matrix_symbolisch = stoch_modell.QAA_symbolisch(Jacobimatrix_symbolisch_liste_beobachtungsvektor)\n",
|
|
" QAA_matrix_numerisch = stoch_modell.QAA_numerisch(pfad_datenbank, QAA_matrix_symbolisch,Jacobimatrix_symbolisch_liste_beobachtungsvektor)"
|
|
],
|
|
"id": "c1def9b9b41efcd5",
|
|
"outputs": [],
|
|
"execution_count": 27
|
|
},
|
|
{
|
|
"metadata": {
|
|
"ExecuteTime": {
|
|
"end_time": "2026-01-07T17:03:23.266049Z",
|
|
"start_time": "2026-01-07T17:03:23.250183Z"
|
|
}
|
|
},
|
|
"cell_type": "code",
|
|
"source": [
|
|
"# Importe für Iterative Ausgleichung\n",
|
|
"import numpy as np\n",
|
|
"import sympy as sp\n",
|
|
"import importlib\n",
|
|
"\n",
|
|
"import Parameterschaetzung\n",
|
|
"importlib.reload(Parameterschaetzung)\n",
|
|
"\n",
|
|
"import Datumsfestlegung\n",
|
|
"importlib.reload(Datumsfestlegung)\n",
|
|
"\n",
|
|
"import Funktionales_Modell\n",
|
|
"importlib.reload(Funktionales_Modell)\n",
|
|
"\n",
|
|
"import Stochastisches_Modell\n",
|
|
"importlib.reload(Stochastisches_Modell)"
|
|
],
|
|
"id": "52f5434fabe3e173",
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"<module 'Stochastisches_Modell' from 'C:\\\\Users\\\\miche\\\\PycharmProjects\\\\Masterprojekt_V3\\\\Stochastisches_Modell.py'>"
|
|
]
|
|
},
|
|
"execution_count": 28,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"execution_count": 28
|
|
},
|
|
{
|
|
"metadata": {
|
|
"ExecuteTime": {
|
|
"end_time": "2026-01-07T17:04:05.830413Z",
|
|
"start_time": "2026-01-07T17:03:23.278507Z"
|
|
}
|
|
},
|
|
"cell_type": "code",
|
|
"source": [
|
|
"# Iterative Ausgleichung (Strecken, Richtungen, Winkel möglich, je nach Eingabe im funktionalen Modell)\n",
|
|
"\n",
|
|
"# Hilfsfunktionen\n",
|
|
"def nur_10000er_Punkt(p: str) -> bool:\n",
|
|
" try:\n",
|
|
" return int(str(p)) >= 10000\n",
|
|
" except ValueError:\n",
|
|
" return False\n",
|
|
"\n",
|
|
"def Beob_nur_mit_10000er(Beob_name: str) -> bool:\n",
|
|
" teile = str(Beob_name).split(\"_\")\n",
|
|
" if len(teile) < 2:\n",
|
|
" return False\n",
|
|
" sp_pt, zp_pt = teile[-2], teile[-1]\n",
|
|
" return nur_10000er_Punkt(sp_pt) and nur_10000er_Punkt(zp_pt)\n",
|
|
"\n",
|
|
"def hole_startwerte(subs: dict, sym):\n",
|
|
" if sym in subs:\n",
|
|
" return float(subs[sym])\n",
|
|
" s = str(sym)\n",
|
|
" if s in subs:\n",
|
|
" return float(subs[s])\n",
|
|
" raise KeyError(f\"Kein Startwert für {sym} / '{s}' in fm.substitutionen_dict\")\n",
|
|
"\n",
|
|
"def koordinate(sym):\n",
|
|
" s = str(sym)\n",
|
|
" return s.startswith((\"X\", \"Y\", \"Z\"))\n",
|
|
"\n",
|
|
"def orientierung(sym):\n",
|
|
" return str(sym).startswith(\"O\")\n",
|
|
"\n",
|
|
"\n",
|
|
"# 0) Hole symbolisches Modell aus dem Funktionalen_Modell\n",
|
|
"A_symbolisch, unbekannte_spalten, beobachtungen_zeilen = fm.jacobi_matrix_symbolisch()\n",
|
|
"\n",
|
|
"# l0 (symbolisch) passend zu beobachtungen_zeilen\n",
|
|
"l0_symbolisch = fm.beobachtungsvektor_naeherung_symbolisch(beobachtungen_zeilen)\n",
|
|
"\n",
|
|
"# Beobachtungsvektor l (numerisch) passend zu beobachtungen_zeilen\n",
|
|
"l_numerisch = np.asarray(fm.beobachtungsvektor_numerisch(beobachtungen_zeilen), dtype=float).reshape(-1, 1)\n",
|
|
"\n",
|
|
"print(\"Modell enthält Beobachtungen:\", len(beobachtungen_zeilen))\n",
|
|
"print(\"Modell enthält Unbekannte:\", len(unbekannte_spalten))\n",
|
|
"\n",
|
|
"\n",
|
|
"# 1) Optional: Zeilenfilter nur 10000er Punkte nutzen\n",
|
|
"nutze_nur_10000er = True\n",
|
|
"if nutze_nur_10000er:\n",
|
|
" idx_behalte_beob = [i for i, lab in enumerate(beobachtungen_zeilen) if Beob_nur_mit_10000er(lab)]\n",
|
|
"else:\n",
|
|
" idx_behalte_beob = list(range(len(beobachtungen_zeilen)))\n",
|
|
"\n",
|
|
"beobachtungen_reduziert = [beobachtungen_zeilen[i] for i in idx_behalte_beob]\n",
|
|
"print(f\"Behalte Zeilen (10000er): {len(idx_behalte_beob)} / {len(beobachtungen_zeilen)}\")\n",
|
|
"\n",
|
|
"# reduzierter Beobachtungsvektor l\n",
|
|
"l_numerisch_reduziert = l_numerisch[idx_behalte_beob, :]\n",
|
|
"\n",
|
|
"# reduzierte A-Matrix und l0 Vektor symbolisch (nur Zeilen)\n",
|
|
"A_symbolisch_reduziert = A_symbolisch[idx_behalte_beob, :]\n",
|
|
"l0_symbolisch_reduziert = l0_symbolisch[idx_behalte_beob, :]\n",
|
|
"\n",
|
|
"\n",
|
|
"# 2) Punkte aus den zu verwendenden Beobachtungen sammeln\n",
|
|
"punkte_in_beob = set()\n",
|
|
"for i in beobachtungen_reduziert:\n",
|
|
" teile = str(i).split(\"_\")\n",
|
|
" if len(teile) < 2:\n",
|
|
" continue\n",
|
|
" sp_pt, zp_pt = teile[-2], teile[-1]\n",
|
|
" punkte_in_beob.add(sp_pt)\n",
|
|
" punkte_in_beob.add(zp_pt)\n",
|
|
"\n",
|
|
"print(\"Punkte in den behaltenen Beobachtungen:\", len(punkte_in_beob))\n",
|
|
"\n",
|
|
"\n",
|
|
"# 3) Optional: Spaltenfilter Koordinaten nur für die Punkte verwenden\n",
|
|
"idx_unbekannte_reduziert = []\n",
|
|
"for j, sym in enumerate(unbekannte_spalten):\n",
|
|
" name = str(sym)\n",
|
|
" if name.startswith((\"X\", \"Y\", \"Z\")):\n",
|
|
" pt = name[1:]\n",
|
|
" if pt in punkte_in_beob:\n",
|
|
" idx_unbekannte_reduziert.append(j)\n",
|
|
" elif orientierung(sym):\n",
|
|
" idx_unbekannte_reduziert.append(j)\n",
|
|
"\n",
|
|
"unk_red = [unbekannte_spalten[j] for j in idx_unbekannte_reduziert]\n",
|
|
"print(f\"Behalte Spalten: {len(idx_unbekannte_reduziert)} / {len(unbekannte_spalten)}\")\n",
|
|
"\n",
|
|
"\n",
|
|
"# 4) Reduzierte Symbolik + lambdify\n",
|
|
"A_sym_red = A_symbolisch_reduziert[:, idx_unbekannte_reduziert]\n",
|
|
"l0_sym_red = l0_symbolisch_reduziert\n",
|
|
"sym_needed = sorted(list(A_sym_red.free_symbols | l0_sym_red.free_symbols), key=lambda s: str(s))\n",
|
|
"A = sp.lambdify(sym_needed, A_sym_red, modules=\"numpy\", cse=True)\n",
|
|
"l0 = sp.lambdify(sym_needed, l0_sym_red, modules=\"numpy\", cse=True)\n",
|
|
"\n",
|
|
"\n",
|
|
"# 5) Datumsfestlegung mit liste_punktnummern\n",
|
|
"liste_punktnummern = []\n",
|
|
"seen = set()\n",
|
|
"for sym in unk_red:\n",
|
|
" s = str(sym)\n",
|
|
" if s.startswith(\"X\"):\n",
|
|
" pt = s[1:]\n",
|
|
" if pt not in seen:\n",
|
|
" seen.add(pt)\n",
|
|
" liste_punktnummern.append(pt)\n",
|
|
"\n",
|
|
"print(\"Anzahl Punkte (für Datum/G):\", len(liste_punktnummern))\n",
|
|
"\n",
|
|
"# Datumsauswahl: über alle Punkte\n",
|
|
"#auswahl = [(pt, c) for pt in liste_punktnummern for c in (\"X\", \"Y\", \"Z\")]\n",
|
|
"\n",
|
|
"datum_pts = liste_punktnummern[:10] # einfach die ersten 10\n",
|
|
"\n",
|
|
"auswahl = [\n",
|
|
" (datum_pts[0], \"X\"), (datum_pts[0], \"Y\"), (datum_pts[0], \"Z\"),\n",
|
|
" (datum_pts[1], \"X\"), (datum_pts[1], \"Y\"), (datum_pts[1], \"Z\"),\n",
|
|
" (datum_pts[2], \"X\"), (datum_pts[2], \"Y\"), (datum_pts[2], \"Z\"),\n",
|
|
" (datum_pts[3], \"X\"), (datum_pts[3], \"Y\"), (datum_pts[3], \"Z\"),\n",
|
|
" (datum_pts[4], \"X\"), (datum_pts[4], \"Y\"), (datum_pts[4], \"Z\"),\n",
|
|
" (datum_pts[5], \"X\"), (datum_pts[5], \"Y\"), (datum_pts[5], \"Z\"),\n",
|
|
" (datum_pts[6], \"X\"), (datum_pts[6], \"Y\"), (datum_pts[6], \"Z\"),\n",
|
|
" (datum_pts[7], \"X\"), (datum_pts[7], \"Y\"), (datum_pts[7], \"Z\"),\n",
|
|
" (datum_pts[8], \"X\"), (datum_pts[8], \"Y\"), (datum_pts[8], \"Z\"),\n",
|
|
" (datum_pts[9], \"X\"), (datum_pts[9], \"Y\"), (datum_pts[9], \"Z\"),\n",
|
|
"]\n",
|
|
"\n",
|
|
"print(\"Datumspunkte:\", datum_pts)\n",
|
|
"print(\"Anzahl Datumskomponenten:\", len(auswahl))\n",
|
|
"\n",
|
|
"# 6) Startwerte x0 als Subset in keep_cols\n",
|
|
"basis_subs = fm.substitutionen_dict\n",
|
|
"x_full = np.array([[ hole_startwerte(basis_subs, sym) ] for sym in unbekannte_spalten], dtype=float)\n",
|
|
"x = x_full[idx_unbekannte_reduziert, :].copy()\n",
|
|
"print(\"x0 min/max:\", float(x.min()), float(x.max()))\n",
|
|
"\n",
|
|
"\n",
|
|
"# 7) Testgewichtung: Qll = I\n",
|
|
"n = len(idx_behalte_beob)\n",
|
|
"Qll_I = np.eye(n, dtype=float)\n",
|
|
"\n",
|
|
"\n",
|
|
"# 8) Iterationen\n",
|
|
"max_iter = 5\n",
|
|
"tol = 1e-4\n",
|
|
"\n",
|
|
"for it in range(max_iter):\n",
|
|
" subs_it = dict(basis_subs)\n",
|
|
" for sym, val in zip(unk_red, x[:, 0]):\n",
|
|
" subs_it[sym] = float(val)\n",
|
|
" werte = []\n",
|
|
" for s in sym_needed:\n",
|
|
" if s in subs_it:\n",
|
|
" werte.append(subs_it[s])\n",
|
|
" else:\n",
|
|
" werte.append(subs_it[str(s)])\n",
|
|
"\n",
|
|
" A_np = np.asarray(A(*werte), dtype=float)\n",
|
|
" l0_np = np.asarray(l0(*werte), dtype=float).reshape(-1, 1)\n",
|
|
" dl_np = np.asarray(fm.berechnung_dl(l_numerisch_reduziert, l0_np, beobachtungen_reduziert), dtype=float).reshape(-1, 1)\n",
|
|
"\n",
|
|
" res_dict, dx = Parameterschaetzung.ausgleichung_lokal_numpy(\n",
|
|
" A=A_np,\n",
|
|
" dl=dl_np,\n",
|
|
" Q_ll=Qll_I,\n",
|
|
" x0=x,\n",
|
|
" liste_punktnummern=liste_punktnummern,\n",
|
|
" auswahl=auswahl,\n",
|
|
" mit_massstab=False\n",
|
|
" )\n",
|
|
"\n",
|
|
" dx_np = np.asarray(dx, dtype=float).reshape(-1, 1)\n",
|
|
" x = x + dx_np\n",
|
|
"\n",
|
|
" max_abs_dx = float(np.max(np.abs(dx_np)))\n",
|
|
" print(f\"Iter {it}: max|dx|={max_abs_dx:.3e}, sigma0={res_dict.get('sigma0_apost', None)}\")\n",
|
|
"\n",
|
|
" if max_abs_dx < tol:\n",
|
|
" print(\"Konvergenz erreicht.\")\n",
|
|
" break\n",
|
|
"\n",
|
|
"x\n"
|
|
],
|
|
"id": "aeab26e1692e2ed1",
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"Modell enthält Beobachtungen: 2835\n",
|
|
"Modell enthält Unbekannte: 257\n",
|
|
"Behalte Zeilen (10000er): 2628 / 2835\n",
|
|
"Punkte in den behaltenen Beobachtungen: 59\n",
|
|
"Behalte Spalten: 236 / 257\n",
|
|
"Anzahl Punkte (für Datum/G): 59\n",
|
|
"Datumspunkte: ['10009', '10006', '10010', '10018', '10008', '10005', '10003', '10004', '10007', '10001']\n",
|
|
"Anzahl Datumskomponenten: 30\n",
|
|
"x0 min/max: 0.0 5080169.7334700795\n",
|
|
"rank(Gi) = 6\n",
|
|
"Gi shape = (236, 6)\n",
|
|
"rank(S) = 4\n",
|
|
"S shape = (6, 6)\n",
|
|
"Iter 0: max|dx|=1.109e+02, sigma0=0.19923074676411007\n",
|
|
"rank(Gi) = 6\n",
|
|
"Gi shape = (236, 6)\n",
|
|
"rank(S) = 3\n",
|
|
"S shape = (6, 6)\n",
|
|
"Iter 1: max|dx|=1.388e+02, sigma0=0.2958008341388878\n",
|
|
"rank(Gi) = 6\n",
|
|
"Gi shape = (236, 6)\n",
|
|
"rank(S) = 3\n",
|
|
"S shape = (6, 6)\n",
|
|
"Iter 2: max|dx|=1.811e+02, sigma0=0.38044576942836994\n",
|
|
"rank(Gi) = 6\n",
|
|
"Gi shape = (236, 6)\n",
|
|
"rank(S) = 3\n",
|
|
"S shape = (6, 6)\n",
|
|
"Iter 3: max|dx|=4.593e+02, sigma0=0.76913776287138\n",
|
|
"rank(Gi) = 6\n",
|
|
"Gi shape = (236, 6)\n",
|
|
"rank(S) = 3\n",
|
|
"S shape = (6, 6)\n",
|
|
"Iter 4: max|dx|=5.662e+02, sigma0=0.9636348058551226\n"
|
|
]
|
|
},
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"array([[ 3.79477450e+06],\n",
|
|
" [ 5.46691953e+05],\n",
|
|
" [ 5.08014812e+06],\n",
|
|
" [ 3.79472486e+06],\n",
|
|
" [ 5.46727987e+05],\n",
|
|
" [ 5.08017306e+06],\n",
|
|
" [ 3.79485249e+06],\n",
|
|
" [ 5.46669640e+05],\n",
|
|
" [ 5.08015281e+06],\n",
|
|
" [ 3.79487665e+06],\n",
|
|
" [ 5.46720851e+05],\n",
|
|
" [ 5.08014498e+06],\n",
|
|
" [ 3.79478013e+06],\n",
|
|
" [ 5.46725703e+05],\n",
|
|
" [ 5.08011986e+06],\n",
|
|
" [ 3.79477133e+06],\n",
|
|
" [ 5.46756388e+05],\n",
|
|
" [ 5.08017930e+06],\n",
|
|
" [ 3.79481980e+06],\n",
|
|
" [ 5.46774891e+05],\n",
|
|
" [ 5.08014589e+06],\n",
|
|
" [ 3.79476061e+06],\n",
|
|
" [ 5.46753904e+05],\n",
|
|
" [ 5.08015165e+06],\n",
|
|
" [ 3.79482554e+06],\n",
|
|
" [ 5.46800094e+05],\n",
|
|
" [ 5.08014095e+06],\n",
|
|
" [ 3.79482358e+06],\n",
|
|
" [ 5.46814168e+05],\n",
|
|
" [ 5.08004854e+06],\n",
|
|
" [ 3.79483052e+06],\n",
|
|
" [ 5.46768610e+05],\n",
|
|
" [ 5.08010754e+06],\n",
|
|
" [ 3.79482793e+06],\n",
|
|
" [ 5.46822653e+05],\n",
|
|
" [ 5.08011514e+06],\n",
|
|
" [ 3.79467324e+06],\n",
|
|
" [ 5.46826900e+05],\n",
|
|
" [ 5.08005969e+06],\n",
|
|
" [ 3.79490821e+06],\n",
|
|
" [ 5.46802954e+05],\n",
|
|
" [ 5.08020440e+06],\n",
|
|
" [ 3.79496553e+06],\n",
|
|
" [ 5.46891951e+05],\n",
|
|
" [ 5.08017120e+06],\n",
|
|
" [ 3.79499647e+06],\n",
|
|
" [ 5.46993000e+05],\n",
|
|
" [ 5.08017231e+06],\n",
|
|
" [ 3.79498413e+06],\n",
|
|
" [ 5.47078352e+05],\n",
|
|
" [ 5.08013231e+06],\n",
|
|
" [ 3.79484933e+06],\n",
|
|
" [ 5.46828550e+05],\n",
|
|
" [ 5.08011829e+06],\n",
|
|
" [ 3.79484044e+06],\n",
|
|
" [ 5.46837427e+05],\n",
|
|
" [ 5.08011383e+06],\n",
|
|
" [ 3.79487107e+06],\n",
|
|
" [ 5.46857706e+05],\n",
|
|
" [ 5.08014250e+06],\n",
|
|
" [ 3.79487390e+06],\n",
|
|
" [ 5.46886724e+05],\n",
|
|
" [ 5.08014949e+06],\n",
|
|
" [ 3.79485165e+06],\n",
|
|
" [ 5.46843624e+05],\n",
|
|
" [ 5.08012560e+06],\n",
|
|
" [ 3.79485204e+06],\n",
|
|
" [ 5.46856310e+05],\n",
|
|
" [ 5.08013078e+06],\n",
|
|
" [ 3.79479481e+06],\n",
|
|
" [ 5.46830952e+05],\n",
|
|
" [ 5.08007093e+06],\n",
|
|
" [ 3.79484303e+06],\n",
|
|
" [ 5.46903172e+05],\n",
|
|
" [ 5.08008520e+06],\n",
|
|
" [ 3.79481752e+06],\n",
|
|
" [ 5.46865227e+05],\n",
|
|
" [ 5.08008656e+06],\n",
|
|
" [ 3.79503999e+06],\n",
|
|
" [ 5.47103505e+05],\n",
|
|
" [ 5.08013538e+06],\n",
|
|
" [ 3.79496892e+06],\n",
|
|
" [ 5.47033432e+05],\n",
|
|
" [ 5.08013256e+06],\n",
|
|
" [ 3.79504895e+06],\n",
|
|
" [ 5.47252038e+05],\n",
|
|
" [ 5.08014925e+06],\n",
|
|
" [ 3.79486645e+06],\n",
|
|
" [ 5.47084066e+05],\n",
|
|
" [ 5.08004794e+06],\n",
|
|
" [ 3.79493225e+06],\n",
|
|
" [ 5.47080102e+05],\n",
|
|
" [ 5.08011984e+06],\n",
|
|
" [ 3.79492828e+06],\n",
|
|
" [ 5.47020648e+05],\n",
|
|
" [ 5.08011158e+06],\n",
|
|
" [ 3.79482531e+06],\n",
|
|
" [ 5.47001161e+05],\n",
|
|
" [ 5.08005379e+06],\n",
|
|
" [ 3.79499520e+06],\n",
|
|
" [ 5.47149383e+05],\n",
|
|
" [ 5.08012759e+06],\n",
|
|
" [ 3.79483304e+06],\n",
|
|
" [ 5.47104032e+05],\n",
|
|
" [ 5.08002106e+06],\n",
|
|
" [ 3.79475152e+06],\n",
|
|
" [ 5.47080118e+05],\n",
|
|
" [ 5.07991809e+06],\n",
|
|
" [ 3.79483964e+06],\n",
|
|
" [ 5.47015073e+05],\n",
|
|
" [ 5.08007390e+06],\n",
|
|
" [ 3.79516182e+06],\n",
|
|
" [ 5.47435045e+05],\n",
|
|
" [ 5.08021660e+06],\n",
|
|
" [ 3.79500337e+06],\n",
|
|
" [ 5.47245632e+05],\n",
|
|
" [ 5.08012354e+06],\n",
|
|
" [ 3.79476965e+06],\n",
|
|
" [ 5.46844316e+05],\n",
|
|
" [ 5.08008226e+06],\n",
|
|
" [ 3.79467794e+06],\n",
|
|
" [ 5.47005327e+05],\n",
|
|
" [ 5.07994309e+06],\n",
|
|
" [ 3.79477701e+06],\n",
|
|
" [ 5.46824062e+05],\n",
|
|
" [ 5.08009490e+06],\n",
|
|
" [ 3.79480132e+06],\n",
|
|
" [ 5.46839326e+05],\n",
|
|
" [ 5.08009696e+06],\n",
|
|
" [ 3.79479860e+06],\n",
|
|
" [ 5.46904100e+05],\n",
|
|
" [ 5.08004933e+06],\n",
|
|
" [ 3.79480628e+06],\n",
|
|
" [ 5.46819002e+05],\n",
|
|
" [ 5.08010950e+06],\n",
|
|
" [ 3.79483340e+06],\n",
|
|
" [ 5.46937002e+05],\n",
|
|
" [ 5.08007066e+06],\n",
|
|
" [ 3.79476903e+06],\n",
|
|
" [ 5.47009706e+05],\n",
|
|
" [ 5.07994352e+06],\n",
|
|
" [ 3.79475696e+06],\n",
|
|
" [ 5.47022601e+05],\n",
|
|
" [ 5.07993613e+06],\n",
|
|
" [ 3.79461060e+06],\n",
|
|
" [ 5.47031562e+05],\n",
|
|
" [ 5.07983108e+06],\n",
|
|
" [ 3.79428282e+06],\n",
|
|
" [ 5.47201119e+05],\n",
|
|
" [ 5.07979205e+06],\n",
|
|
" [ 3.79490488e+06],\n",
|
|
" [ 5.47273756e+05],\n",
|
|
" [ 5.08007969e+06],\n",
|
|
" [ 3.79439934e+06],\n",
|
|
" [ 5.47212214e+05],\n",
|
|
" [ 5.07994328e+06],\n",
|
|
" [ 3.79431711e+06],\n",
|
|
" [ 5.47181840e+05],\n",
|
|
" [ 5.07989960e+06],\n",
|
|
" [ 3.79473022e+06],\n",
|
|
" [ 5.47260341e+05],\n",
|
|
" [ 5.08002980e+06],\n",
|
|
" [ 3.79463749e+06],\n",
|
|
" [ 5.47310689e+05],\n",
|
|
" [ 5.07998866e+06],\n",
|
|
" [ 3.79442545e+06],\n",
|
|
" [ 5.47265550e+05],\n",
|
|
" [ 5.07986736e+06],\n",
|
|
" [ 3.79411791e+06],\n",
|
|
" [ 5.47219095e+05],\n",
|
|
" [ 5.07974028e+06],\n",
|
|
" [ 3.79505205e+06],\n",
|
|
" [ 5.47429911e+05],\n",
|
|
" [ 5.08009792e+06],\n",
|
|
" [ 3.79454198e+06],\n",
|
|
" [ 5.47323755e+05],\n",
|
|
" [ 5.07988777e+06],\n",
|
|
" [ 4.54933117e-02],\n",
|
|
" [ 3.68472759e-02],\n",
|
|
" [-2.39174372e-02],\n",
|
|
" [-7.46871973e-01],\n",
|
|
" [-1.87344125e+00],\n",
|
|
" [ 7.14293432e-01],\n",
|
|
" [-1.16218140e+00],\n",
|
|
" [-7.76760862e-02],\n",
|
|
" [-3.54574961e-01],\n",
|
|
" [ 3.72328440e-02],\n",
|
|
" [-1.10107071e+00],\n",
|
|
" [-1.21517340e+00],\n",
|
|
" [-1.02344977e+00],\n",
|
|
" [-1.26272398e+00],\n",
|
|
" [ 2.87489208e-01],\n",
|
|
" [-4.29677520e-01],\n",
|
|
" [-1.84597441e-01],\n",
|
|
" [-1.75685061e+00],\n",
|
|
" [-2.53991995e-01],\n",
|
|
" [-2.52240394e-01],\n",
|
|
" [ 1.85283907e-01],\n",
|
|
" [ 7.60124886e-01],\n",
|
|
" [-1.01781424e+00],\n",
|
|
" [-5.82193313e-01],\n",
|
|
" [-1.33133483e+00],\n",
|
|
" [-8.57886778e-01],\n",
|
|
" [-1.69859274e+00],\n",
|
|
" [ 5.55745058e-01],\n",
|
|
" [ 4.72719233e-01],\n",
|
|
" [-6.72286716e-02],\n",
|
|
" [ 2.91206376e-01],\n",
|
|
" [ 7.66871638e-02],\n",
|
|
" [ 5.60837412e-01],\n",
|
|
" [-2.61829569e-01],\n",
|
|
" [ 1.59853188e+00],\n",
|
|
" [-6.06636722e-01],\n",
|
|
" [ 1.04842467e+00],\n",
|
|
" [ 1.71242169e-01],\n",
|
|
" [ 1.23597571e-01],\n",
|
|
" [-1.16376658e-01],\n",
|
|
" [-4.66644280e-01],\n",
|
|
" [ 1.62231766e-01],\n",
|
|
" [ 1.06881355e+00],\n",
|
|
" [ 8.52215516e-01],\n",
|
|
" [-3.26873856e-01],\n",
|
|
" [ 2.54737552e-01],\n",
|
|
" [-4.32746569e-01],\n",
|
|
" [-5.39637645e-01],\n",
|
|
" [-1.29901171e+00],\n",
|
|
" [-5.45973503e-01],\n",
|
|
" [-6.25878582e-01],\n",
|
|
" [-7.05309710e-01],\n",
|
|
" [-6.16455790e-02],\n",
|
|
" [-2.47957626e-01],\n",
|
|
" [ 1.12436501e+00],\n",
|
|
" [ 8.36458462e-02],\n",
|
|
" [ 3.43891397e-01],\n",
|
|
" [ 4.41895088e-01],\n",
|
|
" [ 7.59722346e-01]])"
|
|
]
|
|
},
|
|
"execution_count": 29,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"execution_count": 29
|
|
},
|
|
{
|
|
"metadata": {
|
|
"ExecuteTime": {
|
|
"end_time": "2026-01-07T17:06:57.985682Z",
|
|
"start_time": "2026-01-07T17:06:57.106092Z"
|
|
}
|
|
},
|
|
"cell_type": "code",
|
|
"source": [
|
|
"# Netzqualität: Genauigkeitsmaße\n",
|
|
"from Netzqualität_Genauigkeit import Genauigkeitsmaße\n",
|
|
"\n",
|
|
"# s0 aposteriori\n",
|
|
"s0_aposteriori = Genauigkeitsmaße.berechne_s0apost(v, P, r)\n",
|
|
"print(f\"s0 aposteriori: {s0_aposteriori:.4f}\")\n",
|
|
"\n",
|
|
"# Helmert'scher Punktfehler (3D)\n",
|
|
"helmert_punktfehler_3d = Genauigkeitsmaße.berechne_helmert_punktfehler_3D(\n",
|
|
" Qxx_matrix=Qxx_hat,\n",
|
|
" s0apost=s0_aposteriori,\n",
|
|
" punkt_namen=liste_punktnummern)\n",
|
|
"Export.Export.ausgleichung_to_datei(r\"Zwischenergebnisse\\helmert_punktfehler3d.csv\", helmert_punktfehler_3d)\n",
|
|
"print(\"Helmert Punktfehler (Auszug):\", list(helmert_punktfehler_3d.items())[:5])\n",
|
|
"\n",
|
|
"# Standardellipse bzw. Helmert'sche Fehlerellipsen (2D)\n",
|
|
"standardellipse = Genauigkeitsmaße.berechne_standardellipsen(Qxx, s0, namen)\n",
|
|
"Export.Export.ausgleichung_to_datei(r\"Zwischenergebnisse\\standardellipse.csv\", standardellipse)\n",
|
|
"\n",
|
|
"fig = Genauigkeitsmaße.plot_ellipsen(coords, standardellipse, scale=1000)\n",
|
|
"fig.show()\n",
|
|
"\n",
|
|
"# Konfidenzellipse\n",
|
|
"konfidenzellipse = Genauigkeitsmaße.berechne_konfidenzellipsen(\n",
|
|
" Qxx=res_dict['Q_xx'],\n",
|
|
" s0=s0_aposteriori,\n",
|
|
" r=r,\n",
|
|
" punkt_namen=liste_punktnummern,\n",
|
|
" wahrscheinlichkeit=0.95)\n",
|
|
"Export.Export.ausgleichung_to_datei(r\"Zwischenergebnisse\\konfidenzellipse.csv\", konfidenzellipse)\n",
|
|
"\n",
|
|
"fig = Genauigkeitsmaße.plot_ellipsen(coords, konfidenzellipse, scale=1000)\n",
|
|
"fig.show()\n"
|
|
],
|
|
"id": "7de561d7eaebb1c2",
|
|
"outputs": [
|
|
{
|
|
"ename": "NameError",
|
|
"evalue": "name 'v' 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[30]\u001B[39m\u001B[32m, line 5\u001B[39m\n\u001B[32m 2\u001B[39m \u001B[38;5;28;01mfrom\u001B[39;00m\u001B[38;5;250m \u001B[39m\u001B[34;01mNetzqualität_Genauigkeit\u001B[39;00m\u001B[38;5;250m \u001B[39m\u001B[38;5;28;01mimport\u001B[39;00m Genauigkeitsmaße\n\u001B[32m 4\u001B[39m \u001B[38;5;66;03m# s0 aposteriori\u001B[39;00m\n\u001B[32m----> \u001B[39m\u001B[32m5\u001B[39m s0_aposteriori = Genauigkeitsmaße.berechne_s0apost(\u001B[43mv\u001B[49m, P, r)\n\u001B[32m 6\u001B[39m \u001B[38;5;28mprint\u001B[39m(\u001B[33mf\u001B[39m\u001B[33m\"\u001B[39m\u001B[33ms0 aposteriori: \u001B[39m\u001B[38;5;132;01m{\u001B[39;00ms0_aposteriori\u001B[38;5;132;01m:\u001B[39;00m\u001B[33m.4f\u001B[39m\u001B[38;5;132;01m}\u001B[39;00m\u001B[33m\"\u001B[39m)\n\u001B[32m 8\u001B[39m \u001B[38;5;66;03m# Helmert'scher Punktfehler (3D)\u001B[39;00m\n",
|
|
"\u001B[31mNameError\u001B[39m: name 'v' is not defined"
|
|
]
|
|
}
|
|
],
|
|
"execution_count": 30
|
|
},
|
|
{
|
|
"metadata": {},
|
|
"cell_type": "code",
|
|
"source": [
|
|
"# Netzqualität: Zuverlässigkeitsmaße\n",
|
|
"from Netzqualität_Zuverlässigkeit import Zuverlaessigkeit\n",
|
|
"\n",
|
|
"# Gesamtredundanz r\n",
|
|
"r_gesamt = res_dict[\"r_gesamt\"]\n",
|
|
"print(f\"Die Gesamtredundanz des Netzes beträgt: {r_gesamt}\")\n",
|
|
"\n",
|
|
"# Redundanzanteile\n",
|
|
"\n",
|
|
"# Globaltest des Ausgleichungsmodell\n",
|
|
"\n",
|
|
"\n",
|
|
"# Lokaltest (Data snooping)\n",
|
|
"\n",
|
|
"\n",
|
|
"# Einfluss auf die Punktlage (EP)\n"
|
|
],
|
|
"id": "df191c2a371b88a6",
|
|
"outputs": [],
|
|
"execution_count": null
|
|
},
|
|
{
|
|
"metadata": {},
|
|
"cell_type": "code",
|
|
"source": [
|
|
"# Erzeugung eines Protokolls der hybriden Netzausgleichung\n",
|
|
"\n",
|
|
"# Funktion in Export.py schreiben\n",
|
|
"def export_results_txt(filename):\n",
|
|
" with open(filename, 'w', encoding='utf-8') as f:\n",
|
|
" f.write(\"Report: Hybride Netzausgleichung\\n\\n\")\n",
|
|
"\n",
|
|
"# Funktion aufrufen und die Daten vom Bearbeiter eintagen lassen (Datum, Bearbeiter, ...)\n",
|
|
"export_results_txt(\"Netzbericht.txt\")"
|
|
],
|
|
"id": "efef62555453950e",
|
|
"outputs": [],
|
|
"execution_count": null
|
|
}
|
|
],
|
|
"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
|
|
}
|