482 lines
16 KiB
Plaintext
482 lines
16 KiB
Plaintext
{
|
|
"cells": [
|
|
{
|
|
"cell_type": "code",
|
|
"id": "initial_id",
|
|
"metadata": {
|
|
"collapsed": true
|
|
},
|
|
"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"
|
|
],
|
|
"outputs": [],
|
|
"execution_count": null
|
|
},
|
|
{
|
|
"metadata": {},
|
|
"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": "82d514cd426db78b",
|
|
"outputs": [],
|
|
"execution_count": null
|
|
},
|
|
{
|
|
"metadata": {},
|
|
"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": "d3bce3991a8962dc",
|
|
"outputs": [],
|
|
"execution_count": null
|
|
},
|
|
{
|
|
"metadata": {},
|
|
"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": "196ff0c8f8b5aea1",
|
|
"outputs": [],
|
|
"execution_count": null
|
|
},
|
|
{
|
|
"metadata": {},
|
|
"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": "3989b7b41874c16a",
|
|
"outputs": [],
|
|
"execution_count": null
|
|
},
|
|
{
|
|
"metadata": {},
|
|
"cell_type": "code",
|
|
"source": [
|
|
"# ToDo: Sobald GNSS vorliegend Koordinaten im ETRS89 / DREF 91 (2025) daraus berechnen!\n",
|
|
"liste_koordinaten_naeherung_us_alt = {\n",
|
|
" 10001: (3794874.98408291, 546741.751930012, 5079995.3838),\n",
|
|
" 10002: (3794842.53340714, 546726.907150697, 5080039.8778),\n",
|
|
" 10008: (3794757.41294192, 546742.822339098, 5080107.3198),\n",
|
|
" 10012: (3794827.11937161, 546801.412652168, 5080028.5852),\n",
|
|
" 10026: (3794727.06042449, 546823.571170112, 5080134.2029),\n",
|
|
" 10028: (3794862.91900719, 546904.943464041, 5079920.8994),\n",
|
|
" 10037: (3794774.14751515, 546955.423068316, 5079960.9426),\n",
|
|
" 10044: (3794725.78597473, 546954.557211544, 5080009.9234),\n",
|
|
" 10054: (3794852.07416848, 547094.399826613, 5079715.1737),\n",
|
|
" 10059: (3794710.34348443, 547075.630380075, 5080119.6491),\n",
|
|
"}\n",
|
|
"\n",
|
|
"liste_koordinaten_naeherung_us_V2 = {\n",
|
|
" 10001: (3794874.984, 546741.752, 5080029.990),\n",
|
|
" 10002: (3794842.533, 546726.907, 5080071.133),\n",
|
|
" 10008: (3794757.413, 546742.822, 5080135.400),\n",
|
|
" 10012: (3794827.119, 546801.413, 5080065.404),\n",
|
|
" 10026: (3794727.060, 546823.571, 5080179.951),\n",
|
|
" 10028: (3794862.919, 546904.943, 5079963.214),\n",
|
|
" 10037: (3794774.148, 546955.423, 5080040.520),\n",
|
|
" 10044: (3794725.786, 546954.557, 5080084.411),\n",
|
|
" 10054: (3794852.074, 547094.400, 5079771.845),\n",
|
|
" 10059: (3794710.343, 547075.630, 5080153.653),\n",
|
|
"}\n",
|
|
"\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": "f64d9c01318b40f1",
|
|
"outputs": [],
|
|
"execution_count": null
|
|
},
|
|
{
|
|
"metadata": {},
|
|
"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": "21d60465e432c649",
|
|
"outputs": [],
|
|
"execution_count": null
|
|
},
|
|
{
|
|
"metadata": {},
|
|
"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": "df0dcccb73299fcf",
|
|
"outputs": [],
|
|
"execution_count": null
|
|
},
|
|
{
|
|
"metadata": {},
|
|
"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": "f6993d81c8a145dd",
|
|
"outputs": [],
|
|
"execution_count": null
|
|
},
|
|
{
|
|
"metadata": {},
|
|
"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(\"Tachymeter\")\n",
|
|
"db_zugriff.set_instrument(\"Tachymeter\", \"Trimble S9\")\n",
|
|
"db_zugriff.get_instrument(\"Tachymeter\")"
|
|
],
|
|
"id": "e376b4534297016c",
|
|
"outputs": [],
|
|
"execution_count": null
|
|
},
|
|
{
|
|
"metadata": {},
|
|
"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)"
|
|
],
|
|
"id": "97e24245ce3398a2",
|
|
"outputs": [],
|
|
"execution_count": null
|
|
},
|
|
{
|
|
"metadata": {},
|
|
"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": "509e462917e98145",
|
|
"outputs": [],
|
|
"execution_count": null
|
|
},
|
|
{
|
|
"metadata": {},
|
|
"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": "d38939f7108e1788",
|
|
"outputs": [],
|
|
"execution_count": null
|
|
},
|
|
{
|
|
"metadata": {},
|
|
"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": "4a0b1790c65d59ee",
|
|
"outputs": [],
|
|
"execution_count": null
|
|
},
|
|
{
|
|
"metadata": {},
|
|
"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": "38f698b6694bebe7",
|
|
"outputs": [],
|
|
"execution_count": null
|
|
},
|
|
{
|
|
"metadata": {},
|
|
"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": "e5cca13bbb6b95c5",
|
|
"outputs": [],
|
|
"execution_count": null
|
|
},
|
|
{
|
|
"metadata": {},
|
|
"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": "eb0452c52e7afa6b",
|
|
"outputs": [],
|
|
"execution_count": null
|
|
},
|
|
{
|
|
"metadata": {},
|
|
"cell_type": "code",
|
|
"source": [
|
|
"# Auftstellen der Qll-Matrix\n",
|
|
"\n",
|
|
"importlib.reload(Stochastisches_Modell)\n",
|
|
"stoch_modell = Stochastisches_Modell.StochastischesModell(A_matrix_numerisch_iteration0.rows)\n",
|
|
"\n",
|
|
"stoch_modell.Qll_symbolisch(pfad_datenbank, Jacobimatrix_symbolisch_liste_beobachtungsvektor)"
|
|
],
|
|
"id": "40a3df8fe549c81",
|
|
"outputs": [],
|
|
"execution_count": null
|
|
},
|
|
{
|
|
"metadata": {},
|
|
"cell_type": "code",
|
|
"source": "",
|
|
"id": "5f693ea7d699db5",
|
|
"outputs": [],
|
|
"execution_count": null
|
|
},
|
|
{
|
|
"metadata": {},
|
|
"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",
|
|
"\n",
|
|
"dx = Parameterschaetzung.ausgleichung_global(A_matrix_numerisch_iteration0, fm.berechnung_dl(beobachtungsvektor_numerisch, beobachtungsvektor_naeherung_numerisch_iteration0), stoch_modell)[1]"
|
|
],
|
|
"id": "f53849ee4757d5e8",
|
|
"outputs": [],
|
|
"execution_count": null
|
|
},
|
|
{
|
|
"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": "122dca077d1d267c",
|
|
"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
|
|
}
|