{ "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" ], "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 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_zeilenbeschriftungen = 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", "fm.jacobi_matrix_zahlen_iteration_0(Jacobimatrix_symbolisch, \"naeherung_us\", Jacobimatrix_symbolisch_liste_unbekannte, Jacobimatrix_symbolisch_liste_zeilenbeschriftungen)" ], "id": "dba5ecd0354bbc48", "outputs": [], "execution_count": null }, { "metadata": {}, "cell_type": "code", "source": [ "importlib.reload(Datenbank)\n", "db_zugriff = Datenbank.Datenbankzugriff(pfad_datenbank)\n", "db_zugriff.get_beobachtungen_from_beobachtungenid()" ], "id": "8a8fce6ee4dc1f0f", "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 }