From 727a0a07a5b07b81890465bb0f0d408b5a60d0fb Mon Sep 17 00:00:00 2001 From: fabia Date: Fri, 5 Dec 2025 17:10:05 +0100 Subject: [PATCH] =?UTF-8?q?Import=20N=C3=A4herungskoordinaten=20aus=20Tach?= =?UTF-8?q?ymetermessung=20in=20DB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Campusnetz.ipynb | 55 +++++++++++++++---- Daten/campusnetz_koordinaten_25_11.csv | 53 ++++++++++++++++++ Datenbank.py | 28 ++++++++++ Import.py | 53 ++++++++++++++++++ .../{ => Müll}/Transformation_Helmert_V1.py | 0 .../{ => Müll}/Transformation_Helmert_V2.py | 0 ....py => Transformation_Helmert_V3_final.py} | 18 ++++-- 7 files changed, 192 insertions(+), 15 deletions(-) create mode 100644 Daten/campusnetz_koordinaten_25_11.csv create mode 100644 Datenbank.py create mode 100644 Import.py rename Vorbereitungen_Fabian/{ => Müll}/Transformation_Helmert_V1.py (100%) rename Vorbereitungen_Fabian/{ => Müll}/Transformation_Helmert_V2.py (100%) rename Vorbereitungen_Fabian/{Transformation_Helmert_V3.py => Transformation_Helmert_V3_final.py} (94%) diff --git a/Campusnetz.ipynb b/Campusnetz.ipynb index 8c575a4..46c6400 100644 --- a/Campusnetz.ipynb +++ b/Campusnetz.ipynb @@ -6,29 +6,62 @@ "metadata": { "collapsed": true, "ExecuteTime": { - "end_time": "2025-12-01T08:31:31.422078Z", - "start_time": "2025-12-01T08:31:28.994551Z" + "end_time": "2025-12-05T16:08:32.972973Z", + "start_time": "2025-12-05T16:08:32.962798Z" } }, - "source": "", + "source": [ + "# Hier werden alle verwendeten Pythonmodule importiert\n", + "import Datenbank\n", + "import Import" + ], "outputs": [], - "execution_count": null + "execution_count": 1 }, { - "metadata": {}, + "metadata": { + "ExecuteTime": { + "end_time": "2025-12-05T16:08:32.981718Z", + "start_time": "2025-12-05T16:08:32.978622Z" + } + }, "cell_type": "code", - "source": "", + "source": [ + "# 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)" + ], "id": "82d514cd426db78b", "outputs": [], - "execution_count": null + "execution_count": 2 }, { - "metadata": {}, + "metadata": { + "ExecuteTime": { + "end_time": "2025-12-05T16:08:32.992364Z", + "start_time": "2025-12-05T16:08:32.987964Z" + } + }, "cell_type": "code", - "source": "", + "source": [ + "# Import der Koordinatendatei(en) vom Tachymeter\n", + "pfad_datei = r\"Daten\\campusnetz_koordinaten_25_11.csv\"\n", + "imp.import_koordinaten_lh_tachymeter(pfad_datei)\n" + ], "id": "d3bce3991a8962dc", - "outputs": [], - "execution_count": null + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Der Import wurde abgebrochen, weil mindestens ein Teil der Punktnummern aus der Datei Daten\\campusnetz_koordinaten_25_11.csv bereits in der Datenbank vorhanden ist. Bitte in der Datei ändern und Import wiederholen.\n" + ] + } + ], + "execution_count": 3 } ], "metadata": { diff --git a/Daten/campusnetz_koordinaten_25_11.csv b/Daten/campusnetz_koordinaten_25_11.csv new file mode 100644 index 0000000..6e3bace --- /dev/null +++ b/Daten/campusnetz_koordinaten_25_11.csv @@ -0,0 +1,53 @@ +10009;1000,0000;2000,0000;100,0000; +10006;1000,0000;2032,6863;99,5825; +10010;1011,8143;1973,3252;99,9259; +10018;1008,5759;1942,7620;100,2553; +10008;979,7022;1991,4010;99,7320; +10005;966,5154;2014,6496;99,7200; +10003;908,4312;1996,1248;99,7403; +10004;954,1536;2021,6822;99,4916; +10007;921,7481;1973,6201;99,9176; +10001;833,9439;1978,3737;99,8946; +10002;875,9684;1998,5174;99,5867; +100016;928,2783;1944,0082;100,0459; +10011;908,4308;1996,1277;99,7822; +10011a;844,9567;1891,1570;99,8117; +10026;1020,0059;1913,8703;100,3059; +10027;1016,9451;1866,2914;100,3251; +10043;1031,2077;1822,4739;100,3035; +10044;1025,9760;1782,4835;100,5461; +10021;992,7607;1904,8854;100,3533; +10020;984,6187;1903,3601;100,3423; +10024;997,4831;1881,7862;100,3032; +10025;996,3241;1866,8440;100,4102; +10022;990,0679;1896,5360;100,2194; +10023;987,3223;1889,8762;100,3430; +10019;962,6387;1902,3565;99,9772; +10033;964,0191;1860,8023;99,8551; +10017;931,6761;1900,9945;99,9572; +10052;1037,8750;1757,2999;100,2737; +10042;1017,3489;1803,0742;100,3441; +10053;1033,3758;1723,4258;100,2774; +10037;966,2253;1774,2051;99,9957; +10040;990,8832;1780,9678;100,1677; +10041;993,2769;1812,0310;100,4749; +10038;958,1899;1804,7135;100,0741; +10051;1008,9811;1750,1838;100,2880; +10036;948,6403;1763,5807;100,0063; +10035;910,1265;1768,0099;100,0781; +10039;960,3884;1820,0543;100,0983; +10059;1049,2587;1662,5451;100,0148; +10050;1010,0246;1726,2445;100,1493; +10049;984,7667;1714,5709;100,0101; +100;957,3912;1716,2864;99,7777; +10013;900,9076;1902,8730;99,7911; +10028;853,9608;1815,7417;99,7793; +10012;895,3032;1924,1523;99,8758; +10014;913,9706;1918,7731;99,8872; +10031;937,1557;1855,2805;99,8479; +10015;912,5157;1937,6471;99,9834; +10032;954,6732;1845,9356;99,7240; +10030;908,4749;1828,8008;99,5581; +10029;909,3343;1814,8767;99,5486; +10034;860,2357;1758,9282;99,7370; +10045;867,2324;1705,0630;99,7214; diff --git a/Datenbank.py b/Datenbank.py new file mode 100644 index 0000000..c9ddc24 --- /dev/null +++ b/Datenbank.py @@ -0,0 +1,28 @@ +import os +import sqlite3 + + +class Datenbank_anlegen: + def __init__(self, pfad_datenbank): + self.pfad_datenbank = pfad_datenbank + self.db_anlegen() + + def db_anlegen(self): + # pfad = r"C:\Users\fabia\OneDrive\Jade HS\Master\MGW2\Masterprojekt_allgemein\Masterprojekt\Programmierung\Campusnetz\Campusnetz.db" + if not os.path.exists(self.pfad_datenbank): + con = sqlite3.connect(self.pfad_datenbank) + cursor = con.cursor() + cursor.executescript("""CREATE TABLE Netzpunkte ( + punktnummer TEXT(10), + naeherungx_lh NUMERIC(9,3), + naeherungy_lh NUMERIC(7,3), + naeherungz_lh NUMERIC(8,3), + naeherungx_us NUMERIC(9,3), + naeherungy_us NUMERIC(7,3), + naeherungz_us NUMERIC(8,3), + CONSTRAINT pk_Netzpunkte PRIMARY KEY (punktnummer) + ); + """); + con.commit() + cursor.close() + con.close() \ No newline at end of file diff --git a/Import.py b/Import.py new file mode 100644 index 0000000..6b1a692 --- /dev/null +++ b/Import.py @@ -0,0 +1,53 @@ +import csv +import sqlite3 + +class Import: + def __init__(self, pfad_datenbank): + self.pfad_datenbank = pfad_datenbank + pass + + def import_koordinaten_lh_tachymeter(self, pfad_datei): + liste_punktnummern = [] + liste_punktnummern_vorher = [] + liste_punktnummern_vorher_db = [] + Import_abbrechen = False + + + with open (pfad_datei, newline='', encoding='utf-8') as csvfile: + con = sqlite3.connect(self.pfad_datenbank) + cursor = con.cursor() + liste_punktnummern_db = [r[0] for r in cursor.execute("SELECT DISTINCT punktnummer FROM Netzpunkte").fetchall()] + cursor.close() + con.close() + + r = csv.reader(csvfile, delimiter=';') + for row in r: + liste_punktnummern.append(row[0]) + if row[0] in liste_punktnummern_vorher: + Import_abbrechen = True + print(f"Der Import wurde abgebrochen, weil in der Datei {pfad_datei} Punktnummern doppelt vorhanden sind. Bitte in der Datei ändern und Import wiederholen.") + break + + liste_punktnummern_vorher.append(row[0]) + + if row[0] in liste_punktnummern_db: + Import_abbrechen = True + print(f"Der Import wurde abgebrochen, weil mindestens ein Teil der Punktnummern aus der Datei {pfad_datei} bereits in der Datenbank vorhanden ist. Bitte in der Datei ändern und Import wiederholen.") + break + liste_punktnummern_vorher_db.append(row[0]) + + if Import_abbrechen == False: + con = sqlite3.connect(self.pfad_datenbank) + cursor = con.cursor() + + with open(pfad_datei, newline='', encoding='utf-8') as csvfile: + r = csv.reader(csvfile, delimiter=';') + for row in r: + cursor.execute( + "INSERT INTO Netzpunkte (punktnummer, naeherungx_lh, naeherungy_lh, naeherungz_lh) VALUES (?, ?, ?, ?)", + (row[0], row[1], row[2], row[3])) + + con.commit() + cursor.close() + con.close() + print("Der Import der Näherungskoordinaten wurde erfolgreich abgeschlossen") \ No newline at end of file diff --git a/Vorbereitungen_Fabian/Transformation_Helmert_V1.py b/Vorbereitungen_Fabian/Müll/Transformation_Helmert_V1.py similarity index 100% rename from Vorbereitungen_Fabian/Transformation_Helmert_V1.py rename to Vorbereitungen_Fabian/Müll/Transformation_Helmert_V1.py diff --git a/Vorbereitungen_Fabian/Transformation_Helmert_V2.py b/Vorbereitungen_Fabian/Müll/Transformation_Helmert_V2.py similarity index 100% rename from Vorbereitungen_Fabian/Transformation_Helmert_V2.py rename to Vorbereitungen_Fabian/Müll/Transformation_Helmert_V2.py diff --git a/Vorbereitungen_Fabian/Transformation_Helmert_V3.py b/Vorbereitungen_Fabian/Transformation_Helmert_V3_final.py similarity index 94% rename from Vorbereitungen_Fabian/Transformation_Helmert_V3.py rename to Vorbereitungen_Fabian/Transformation_Helmert_V3_final.py index 530bc5d..04772d5 100644 --- a/Vorbereitungen_Fabian/Transformation_Helmert_V3.py +++ b/Vorbereitungen_Fabian/Transformation_Helmert_V3_final.py @@ -133,7 +133,7 @@ l = sp.Matrix([P1[0], P1[1], P1[2], P2[0], P2[1], P2[2], P3[0], P3[1], P3[2], P4 while True: if anzahl_iterationen == 0: - zahlen_0 = {dX: float(Translation[0]), dY: float(Translation[1]), dZ: float(Translation[2]), m: float(m0), q0: float(q0_wert), q1: floaT(q1_wert), + zahlen_0 = {dX: float(Translation[0]), dY: float(Translation[1]), dZ: float(Translation[2]), m: float(m0), q0: float(q0_wert), q1: float(q1_wert), q2: float(q2_wert), q3: float(q3_wert), xp1: p1[0], yp1: p1[1], zp1: p1[2], xp2: p2[0], yp2: p2[1], zp2: p2[2], xp3: p3[0], yp3: p3[1], zp3: p3[2], xp4: p4[0], yp4: p4[1], zp4: p4[2], xp5: p5[0], yp5: p5[1], zp5: p5[2]} @@ -215,7 +215,7 @@ while True: alle_kleiner = False - if alle_kleiner and alle_kleiner_vorherige_iteration or anzahl_iterationen == 200: + if alle_kleiner and alle_kleiner_vorherige_iteration or anzahl_iterationen == 20: break alle_kleiner_vorherige_iteration = alle_kleiner @@ -251,8 +251,18 @@ for v in l_berechnet_i: print(f"{float(v):.3f}") print("Streckendifferenzen:") -streckendifferenzen = [P - L].norm() for P, L in zip(liste_punkte_zielsystem, l_berechnet_i) -print([roundfloat(s.evalf()) for s in strecken]) +streckendifferenzen = [(P - L).norm() for P, L in zip(liste_punkte_zielsystem, liste_l_berechnet_i)] +print([round(float(s), 6) for s in streckendifferenzen]) +Schwerpunkt_Zielsystem = sum(liste_punkte_zielsystem, sp.Matrix([0, 0, 0])) / len(liste_punkte_zielsystem) +Schwerpunkt_berechnet = sum(liste_l_berechnet_i, sp.Matrix([0, 0, 0])) / len(liste_l_berechnet_i) + +Schwerpunktsdifferenz = Schwerpunkt_Zielsystem - Schwerpunkt_berechnet + +print("\nDifferenz Schwerpunkt (Vektor):") +print(Schwerpunktsdifferenz.evalf(3)) + +print("Betrag der Schwerpunkt-Differenz:") +print(f"{float(Schwerpunktsdifferenz.norm()):.3f}m") #ToDo: Abweichungen in Printausgabe ausgeben! \ No newline at end of file