import csv import sqlite3 from decimal import Decimal import Berechnungen class Import: def __init__(self, pfad_datenbank): self.pfad_datenbank = pfad_datenbank pass def string_to_float(self, zahl): zahl = zahl.replace(',', '.') return float(zahl) def string_to_decimal(self, zahl): zahl = zahl.replace(',', '.') return Decimal(zahl) 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], self.string_to_float(row[1]), self.string_to_float(row[2]), self.string_to_float(row[3]))) con.commit() cursor.close() con.close() print("Der Import der Näherungskoordinaten wurde erfolgreich abgeschlossen") def import_beobachtungen_tachymeter(self, pfad_datei, instrumentenID): # Prüfen, ob Bereits Daten aus der Datei in der Datenbank vorhanden sind con = sqlite3.connect(self.pfad_datenbank) cursor = con.cursor() liste_dateinamen_in_db = [r[0] for r in cursor.execute( "SELECT DISTINCT dateiname FROM Beobachtungen" ).fetchall()] liste_beobachtungsgruppeID = [r[0] for r in cursor.execute("""SELECT DISTINCT beobachtungsgruppeID FROM Beobachtungen""").fetchall()] liste_instrumentenid = [r[0] for r in cursor.execute("SELECT instrumenteID FROM Instrumente").fetchall()] con.close() cursor.close Import_fortsetzen = True if pfad_datei in liste_dateinamen_in_db: Import_fortsetzen = False if Import_fortsetzen: nummer_zielpunkt = 0 try: nummer_beobachtungsgruppeID = max(liste_beobachtungsgruppeID) except: nummer_beobachtungsgruppeID = 0 if nummer_beobachtungsgruppeID is None: nummer_beobachtungsgruppeID = 0 with (open(pfad_datei, "r", encoding="utf-8") as f): liste_fehlerhafte_zeile = [] liste_beobachtungen_vorbereitung = [] for i, zeile in enumerate(f): if i < 3: continue zeile = zeile.strip().split(";") if zeile[1] == "" and zeile[2] == "" and zeile[3] == "": nummer_beobachtungsgruppeID += 1 # print("Standpunkt: ",nummer_beobachtungsgruppeID ,zeile[0]) standpunkt = zeile[0] if nummer_zielpunkt % 6 != 0: liste_fehlerhafte_zeile.append(i) nummer_zielpunkt = 0 liste_zielpunkte_hs = [] liste_zielpunkte_vs2 = [] liste_zielpunkte_vs3 = [] else: nummer_zielpunkt += 1 if zeile[0] not in liste_zielpunkte_hs: liste_zielpunkte_hs.append(zeile[0]) if zeile[0] in liste_zielpunkte_vs3: # print(f"{nummer_zielpunkt} VS3 HS1 {zeile}") liste_beobachtungen_vorbereitung.append( [nummer_beobachtungsgruppeID, "VS3", "HS1", standpunkt, zeile[0], zeile[1], zeile[2], zeile[3]]) elif zeile[0] in liste_zielpunkte_vs2: # print(f"{nummer_zielpunkt} VS2 HS1 {zeile}") liste_beobachtungen_vorbereitung.append( [nummer_beobachtungsgruppeID, "VS2", "HS1", standpunkt, zeile[0], zeile[1], zeile[2], zeile[3]]) else: # print(f"{nummer_zielpunkt} VS1 HS1 {zeile}") liste_beobachtungen_vorbereitung.append( [nummer_beobachtungsgruppeID, "VS1", "HS1", standpunkt, zeile[0], zeile[1], zeile[2], zeile[3]]) else: liste_zielpunkte_hs.remove(zeile[0]) if zeile[0] in liste_zielpunkte_vs3: # print(f"{nummer_zielpunkt} VS3 HS2 {zeile}") liste_beobachtungen_vorbereitung.append( [nummer_beobachtungsgruppeID, "VS3", "HS2", standpunkt, zeile[0], zeile[1], zeile[2], zeile[3]]) elif zeile[0] in liste_zielpunkte_vs2: if zeile[0] not in liste_zielpunkte_vs3: liste_zielpunkte_vs3.append(zeile[0]) # print(f"{nummer_zielpunkt} VS2 HS2 {zeile}") liste_beobachtungen_vorbereitung.append( [nummer_beobachtungsgruppeID, "VS2", "HS2", standpunkt, zeile[0], zeile[1], zeile[2], zeile[3]]) else: if zeile[0] not in liste_zielpunkte_vs2: liste_zielpunkte_vs2.append(zeile[0]) # print(f"{nummer_zielpunkt} VS1 HS2 {zeile}") liste_beobachtungen_vorbereitung.append( [nummer_beobachtungsgruppeID, "VS1", "HS2", standpunkt, zeile[0], zeile[1], zeile[2], zeile[3]]) if liste_fehlerhafte_zeile == []: # print(f"Einlesen der Datei {pfad_datei} erfolgreich beendet.") pass else: print( f"Das Einlesen der Datei {pfad_datei} wurde abgebrochen.\nBitte bearbeiten Sie die Zeilen rund um: {", ".join(map(str, liste_fehlerhafte_zeile))} in der csv-Datei und wiederholen Sie den Import.") Import_fortsetzen = False else: print( f"Der Import wurde abgebrochen, weil die Beobachtungen aus der Datei {pfad_datei} bereits in der Datenbank vorhanden sind.") if Import_fortsetzen: liste_beobachtungen_import = [] while len(liste_beobachtungen_vorbereitung) > 0: liste_aktueller_zielpunkt = liste_beobachtungen_vorbereitung[0] aktueller_zielpunkt = liste_aktueller_zielpunkt[4] # print(liste_beobachtungen_vorbereitung[0]) for index in range(1, len(liste_beobachtungen_vorbereitung)): liste = liste_beobachtungen_vorbereitung[index] if liste[4] == aktueller_zielpunkt: # print(liste) richtung1 = self.string_to_decimal(liste_aktueller_zielpunkt[5]) richtung2 = self.string_to_decimal(liste[5]) - Decimal(200) zenitwinkel_vollsatz_gon = (self.string_to_decimal(liste_aktueller_zielpunkt[6]) - self.string_to_decimal( liste[6]) + 400) / 2 zenitwinkel_vollsatz_rad = Berechnungen.Einheitenumrechnung.gon_to_rad_Decimal(zenitwinkel_vollsatz_gon) distanz_vollsatz = (self.string_to_decimal(liste_aktueller_zielpunkt[7]) + self.string_to_decimal( liste[7])) / 2 if richtung2 < 0 and richtung1 != Decimal(0): richtung2 += Decimal(400) elif richtung2 > 400: richtung2 -= Decimal(400) richtung_vollsatz_gon = (richtung1 + richtung2) / 2 richtung_vollsatz_rad = Berechnungen.Einheitenumrechnung.gon_to_rad_Decimal(richtung_vollsatz_gon) # print(richtung_vollsatz) # print(zenitwinkel_vollsatz) # print(distanz_vollsatz) liste_beobachtungen_import.append( [liste[0], liste[3], liste[4], richtung_vollsatz_rad, zenitwinkel_vollsatz_rad, distanz_vollsatz]) del liste_beobachtungen_vorbereitung[index] del liste_beobachtungen_vorbereitung[0] break if instrumentenID not in liste_instrumentenid: Import_fortsetzen = False print( "Der Import wurde abgebrochen. Bitte eine gültige InstrumentenID eingeben. Bei Bedarf ist das Instrument neu anzulegen.") if Import_fortsetzen: con = sqlite3.connect(self.pfad_datenbank) cursor = con.cursor() for beobachtung_import in liste_beobachtungen_import: cursor.execute( "INSERT INTO Beobachtungen (punktnummer_sp, punktnummer_zp, instrumenteID, beobachtungsgruppeID, tachymeter_richtung, tachymeter_zenitwinkel, tachymeter_distanz, dateiname) VALUES (?, ?, ?, ?, ?, ?, ?, ?)", (beobachtung_import[1], beobachtung_import[2], instrumentenID, beobachtung_import[0], float(beobachtung_import[3]), float(beobachtung_import[4]), float(beobachtung_import[5]), pfad_datei)) con.commit() cursor.close() con.close() print(f"Der Import der Datei {pfad_datei} wurde erfolgreich abgeschlossen.") def vorbereitung_import_beobachtungen_nivellement_naeherung_punkthoehen(self, pfad_datei, instrumentenID): # Prüfen, ob Bereits Daten aus der Datei in der Datenbank vorhanden sind con = sqlite3.connect(self.pfad_datenbank) cursor = con.cursor() liste_dateinamen_in_db = [r[0] for r in cursor.execute( "SELECT DISTINCT dateiname FROM Beobachtungen" ).fetchall()] liste_beobachtungsgruppeID = [r[0] for r in cursor.execute("""SELECT DISTINCT beobachtungsgruppeID FROM Beobachtungen""").fetchall()] liste_instrumentenid = [r[0] for r in cursor.execute("SELECT instrumenteID FROM Instrumente").fetchall()] liste_netzpunkte = [r[0] for r in cursor.execute("SELECT punktnummer FROM Netzpunkte").fetchall()] cursor.close() con.close() Import_fortsetzen = True if pfad_datei in liste_dateinamen_in_db: Import_fortsetzen = False print(f"Der Import wurde abgebrochen, weil die Beobachtungen aus der Datei {pfad_datei} bereits in der Datenbank vorhanden sind.") if instrumentenID not in liste_instrumentenid: Import_fortsetzen = False print( "Der Import wurde abgebrochen. Bitte eine gültige InstrumentenID eingeben. Bei Bedarf ist das Instrument neu anzulegen.") if Import_fortsetzen: # Berechnete Punkthöhe Importieren muster_berechnete_zielweiten = "| | |Z " dict_punkt_alle_punkthoehen = {} dict_punkt_mittelwert_punkthoehen = {} with open(pfad_datei, newline="", encoding="utf-8") as csvfile: r = csv.reader(csvfile, delimiter=";") for i, row in enumerate(r): if any(muster_berechnete_zielweiten in feld for feld in row): zeile = " ".join([str(feld) for feld in row]) punktnummer = None if "KD1" in zeile: teil = zeile.split("KD1", 1)[1].strip() if teil != "": punktnummer = teil.split()[0] wert_z = None if "|Z" in zeile: teil = zeile.split("|Z", 1)[1].strip() if teil != "": wert_z = self.string_to_float(teil.split()[0]) if punktnummer is not None and wert_z is not None: #print(f"{punktnummer}, {float(wert_z)}") if punktnummer not in dict_punkt_alle_punkthoehen: dict_punkt_alle_punkthoehen[punktnummer] = [] dict_punkt_alle_punkthoehen[punktnummer].append(wert_z) for punktnummer, liste_z in dict_punkt_alle_punkthoehen.items(): # Hier wird auf 6 Nachkommastellen gerundet! dict_punkt_mittelwert_punkthoehen[punktnummer] = round(sum(liste_z) / len(liste_z),6) if Import_fortsetzen: # Ausgabe, welche Niv-Punkte bereits in der Tabelle Netzpunkte enthalten sind liste_punktnummern_nivellement = dict_punkt_mittelwert_punkthoehen.keys() liste_punktnummern_in_db = [] liste_punktnummern_nicht_in_db = [] for punktnummer in liste_punktnummern_nivellement: if punktnummer in liste_netzpunkte: liste_punktnummern_in_db.append(punktnummer) else: liste_punktnummern_nicht_in_db.append(punktnummer) if Import_fortsetzen: print(f"Für folgende Nivellementpunkte werden die Höhen in der Ausgleichung berechnet: {liste_punktnummern_in_db}\nFür folgende Punkte wird aktuell keine Höhe in der Ausgleichung berechnet: {liste_punktnummern_nicht_in_db}. Bei Bedarf im folgenden Schritt ändern!") return dict_punkt_mittelwert_punkthoehen, liste_punktnummern_in_db def import_beobachtungen_nivellement_naeherung_punkthoehen(self, dict_punkt_mittelwert_punkthoehen, liste_punktnummern_in_db, liste_punktnummern_hinzufuegen): con = sqlite3.connect(self.pfad_datenbank) cursor = con.cursor() liste_punkte_neu_hinzugefuegt = [] liste_punkte_bereits_vorhanden = [] liste_punkte_geaendert = [] for punktnummer in liste_punktnummern_hinzufuegen: try: cursor.execute(f"INSERT INTO Netzpunkte (punktnummer, normalhoehe_hfp) VALUES (?, ?)", (punktnummer, dict_punkt_mittelwert_punkthoehen[punktnummer])) liste_punkte_neu_hinzugefuegt.append(punktnummer) except sqlite3.IntegrityError: liste_punkte_bereits_vorhanden.append(punktnummer) cursor.execute( "UPDATE Netzpunkte SET normalhoehe_hfp = ? WHERE punktnummer = ?", (dict_punkt_mittelwert_punkthoehen[punktnummer], punktnummer) ) liste_punkte_geaendert.append(punktnummer) for punktnummer in liste_punktnummern_in_db: cursor.execute(f"UPDATE Netzpunkte SET normalhoehe_hfp = ? WHERE punktnummer = ?", (dict_punkt_mittelwert_punkthoehen[punktnummer], punktnummer)) liste_punkte_geaendert.append(punktnummer) con.commit() cursor.close() con.close() print(f"Neu hinzugefügt ({len(liste_punkte_neu_hinzugefuegt)}): {liste_punkte_neu_hinzugefuegt}") print(f"Bereits vorhanden ({len(liste_punkte_bereits_vorhanden)}): {liste_punkte_bereits_vorhanden}") print(f"Geändert ({len(liste_punkte_geaendert)}): {liste_punkte_geaendert}\n") return f"Für folgende Punkte werden die Höhen Ausgeglichen: {liste_punktnummern_hinzufuegen + liste_punktnummern_in_db}" def import_beobachtungen_nivellement_RVVR(self, pfad_datei, instrumentenID): # Prüfen, ob Bereits Daten aus der Datei in der Datenbank vorhanden sind con = sqlite3.connect(self.pfad_datenbank) cursor = con.cursor() liste_dateinamen_in_db = [r[0] for r in cursor.execute( "SELECT DISTINCT dateiname FROM Beobachtungen" ).fetchall()] liste_instrumentenid = [r[0] for r in cursor.execute("SELECT instrumenteID FROM Instrumente").fetchall()] liste_netzpunkte = [r[0] for r in cursor.execute("SELECT punktnummer FROM Netzpunkte").fetchall()] cursor.close() con.close() Import_fortsetzen = True if pfad_datei in liste_dateinamen_in_db: Import_fortsetzen = False print(f"Der Import wurde abgebrochen, weil die Beobachtungen aus der Datei {pfad_datei} bereits in der Datenbank vorhanden sind.") if instrumentenID not in liste_instrumentenid: Import_fortsetzen = False print( "Der Import wurde abgebrochen. Bitte eine gültige InstrumentenID eingeben. Bei Bedarf ist das Instrument neu anzulegen.") if Import_fortsetzen: anzahl_zeilen_rvvr = 0 liste_zeilen_rvvr = [] liste_punktpaare = [] with open(pfad_datei, "r", encoding="utf-8") as f: for i, zeile in enumerate(f): if ("Lr" in zeile) or ("Lv" in zeile): #print(zeile.rstrip()) liste_zeilen_rvvr.append(zeile) anzahl_zeilen_rvvr += 1 if anzahl_zeilen_rvvr % 4 == 0: index = 0 while index < len(liste_zeilen_rvvr): block_4 = liste_zeilen_rvvr[index:index + 4] liste_punktnummern_block = [] for zeile_block in block_4: punktnummer = None if "|KD1" in zeile_block: teil = zeile_block.split("|KD1", 1)[1].strip() if teil != "": punktnummer = teil.split()[0] if punktnummer is not None: if punktnummer not in liste_punktnummern_block: liste_punktnummern_block.append(punktnummer) r1 = None v1 = None v2 = None r2 = None e_1 = None e_2 = None e_3 = None e_4 = None zugnummer = None if "|Lr" in block_4[0]: teil = block_4[0].split("|Lr", 1)[0].strip() if teil != "": zugnummer = int(teil.split()[-1]) teil = block_4[0].split("Lr", 1)[1].strip() if "Lr" in block_4[0] else block_4[0].split("Lv", 1)[ 1].strip() r1 = self.string_to_float(teil.split()[0]) teil = block_4[1].split("Lr", 1)[1].strip() if "Lr" in block_4[1] else block_4[1].split("Lv", 1)[ 1].strip() v1 = self.string_to_float(teil.split()[0]) teil = block_4[2].split("Lr", 1)[1].strip() if "Lr" in block_4[2] else block_4[2].split("Lv", 1)[ 1].strip() v2 = self.string_to_float(teil.split()[0]) teil = block_4[3].split("Lr", 1)[1].strip() if "Lr" in block_4[3] else block_4[3].split("Lv", 1)[ 1].strip() r2 = self.string_to_float(teil.split()[0]) if "|E" in block_4[0]: teil = block_4[0].split("|E", 1)[1].strip() if teil != "": e_1 = self.string_to_float(teil.split()[0]) if "|E" in block_4[1]: teil = block_4[1].split("|E", 1)[1].strip() if teil != "": e_2 = self.string_to_float(teil.split()[0]) if "|E" in block_4[2]: teil = block_4[2].split("|E", 1)[1].strip() if teil != "": e_3 = self.string_to_float(teil.split()[0]) if "|E" in block_4[3]: teil = block_4[3].split("|E", 1)[1].strip() if teil != "": e_4 = self.string_to_float(teil.split()[0]) # Achtung: Hier Rundung auf 8 Nachkommastellen dh = round((r1 - v1 - v2 + r2) / 2, 8) entfernung = round((e_1 + e_2 + e_3 + e_4) / 2, 8) liste_punktpaare.append((zugnummer, liste_punktnummern_block[0], liste_punktnummern_block[1], dh, entfernung)) index += 4 liste_beobachtungen_reduziert = [] liste_beobachtungen_bearbeitung = [] zugnummer_vorher = liste_punktpaare[0][0] for einzelbeobachtung in liste_punktpaare: zugnummer = einzelbeobachtung[0] if zugnummer == zugnummer_vorher: if einzelbeobachtung[1] in liste_netzpunkte and einzelbeobachtung[2] in liste_netzpunkte: #print(einzelbeobachtung) liste_beobachtungen_reduziert.append(einzelbeobachtung + (1,)) elif einzelbeobachtung[1] in liste_netzpunkte and einzelbeobachtung[2] not in liste_netzpunkte: #print(f"Zielpunkt nicht enthalten {einzelbeobachtung}") liste_beobachtungen_bearbeitung.append(einzelbeobachtung) elif einzelbeobachtung[1] not in liste_netzpunkte and einzelbeobachtung[2] in liste_netzpunkte: #print(f"Startpunkt nicht enthalten {einzelbeobachtung}") liste_beobachtungen_bearbeitung.append(einzelbeobachtung) startpunkt = None zielpunkt = None summe_dh = None summe_entfernung = None anzahl_standpunkte = 1 for i, beobachtung_bearbeiten in enumerate(liste_beobachtungen_bearbeitung): if i == 0: startpunkt = beobachtung_bearbeiten[1] summe_dh = beobachtung_bearbeiten[3] summe_entfernung = beobachtung_bearbeiten[4] anzahl_standpunkte = 1 else: zielpunkt = beobachtung_bearbeiten[2] summe_dh += beobachtung_bearbeiten[3] summe_entfernung += beobachtung_bearbeiten[4] anzahl_standpunkte += 1 # Achtung:Hier Rundung auf 8 Nachkommastellen! liste_beobachtungen_reduziert.append( (zugnummer, startpunkt, zielpunkt, round(summe_dh, 8), round(summe_entfernung, 8), anzahl_standpunkte)) liste_beobachtungen_bearbeitung = [] else: #print(f"Startpunkt und Zielpunkt nicht enthalten {einzelbeobachtung}") liste_beobachtungen_bearbeitung.append(einzelbeobachtung) else: #print(f"-----------------------------") if einzelbeobachtung[1] in liste_netzpunkte and einzelbeobachtung[2] in liste_netzpunkte: #print(einzelbeobachtung) liste_beobachtungen_reduziert.append(einzelbeobachtung + (1,)) elif einzelbeobachtung[1] in liste_netzpunkte and einzelbeobachtung[2] not in liste_netzpunkte: #print(f"Zielpunkt nicht enthalten {einzelbeobachtung}") liste_beobachtungen_bearbeitung.append(einzelbeobachtung) elif einzelbeobachtung[1] not in liste_netzpunkte and einzelbeobachtung[2] in liste_netzpunkte: #print(f"Startpunkt nicht enthalten {einzelbeobachtung}") liste_beobachtungen_bearbeitung.append(einzelbeobachtung) startpunkt = None zielpunkt = None summe_dh = None summe_entfernung = None anzahl_standpunkte = 1 for i, beobachtung_bearbeiten in enumerate(liste_beobachtungen_bearbeitung): if i == 0: startpunkt = beobachtung_bearbeiten[1] summe_dh = beobachtung_bearbeiten[3] summe_entfernung = beobachtung_bearbeiten[4] anzahl_standpunkte = 1 else: zielpunkt = beobachtung_bearbeiten[2] summe_dh += beobachtung_bearbeiten[3] summe_entfernung += beobachtung_bearbeiten[4] anzahl_standpunkte += 1 #Achtung:Hier Rundung auf 8 Nachkommastellen! liste_beobachtungen_reduziert.append( (zugnummer, startpunkt, zielpunkt, round(summe_dh,8), round(summe_entfernung,8), anzahl_standpunkte)) liste_beobachtungen_bearbeitung = [] else: # print(f"Startpunkt und Zielpunkt nicht enthalten {einzelbeobachtung}") liste_beobachtungen_bearbeitung.append(einzelbeobachtung) zugnummer_vorher = zugnummer con = sqlite3.connect(self.pfad_datenbank) cursor = con.cursor() for beobachtung_reduziert in liste_beobachtungen_reduziert: cursor.execute(f"INSERT INTO Beobachtungen (punktnummer_sp, punktnummer_zp, instrumenteID, niv_dh, niv_strecke, niv_anz_standpkte, dateiname) VALUES (?, ?, ?, ?, ?, ?, ?)", (beobachtung_reduziert[1], beobachtung_reduziert[2], instrumentenID, beobachtung_reduziert[3], beobachtung_reduziert[4], beobachtung_reduziert[5], pfad_datei)) con.commit() cursor.close() con.close() return f"Die Beobachtungen aus der Datei {pfad_datei} wurden erfolgreich importiert." else: print(f"Anzahl nicht RVVR durch 4 teilbar. Bitte die Datei {pfad_datei} überprüfen! Der Import wurde abgebrochen.") Import_fortsetzen = False def import_koordinaten_gnss(self, pfad_datei, liste_sapos_stationen_genauigkeiten): liste_zeilen = [] dict_koordinaten = {} 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 i, row in enumerate(r): row_neu = [] for eintrag in row: eintrag = str(eintrag).strip() eintrag = eintrag.replace("'", "") aufgeteilt = eintrag.split() for teil in aufgeteilt: teil = teil.split(",") row_neu.extend(teil) if row_neu[1] == 'Referenz' and row_neu[7] == '0.0000' and row_neu[8] == '0.0000' and row_neu[9] == '0.0000': row_neu[7] = liste_sapos_stationen_genauigkeiten[0] row_neu[8] = liste_sapos_stationen_genauigkeiten[1] row_neu[9] = liste_sapos_stationen_genauigkeiten[2] cursor.execute(f"""INSERT INTO Netzpunkte (punktnummer, naeherungx_us, naeherungy_us, naeherungz_us, stabw_vorinfo_x, stabw_vorinfo_y, stabw_vorinfo_z) VALUES (?, ?, ?, ?, ?, ?, ?) ON CONFLICT (punktnummer) DO UPDATE SET naeherungx_us = excluded.naeherungx_us, naeherungy_us = excluded.naeherungy_us, naeherungz_us = excluded.naeherungz_us, stabw_vorinfo_x = excluded.stabw_vorinfo_x, stabw_vorinfo_y = excluded.stabw_vorinfo_y, stabw_vorinfo_z = excluded.stabw_vorinfo_z""", (row_neu[0], row_neu[4], row_neu[5], row_neu[6], row_neu[7], row_neu[8], row_neu[9]) ) #liste_zeilen.append(row_neu) con.commit() con.close() return "Import der Koordinaten aus stationärem GNSS abgeschlossen." def import_basislinien_gnss(self, pfad_datei): Import_fortsetzen = True # Prüfen, ob Bereits Daten aus der Datei in der Datenbank vorhanden sind con = sqlite3.connect(self.pfad_datenbank) cursor = con.cursor() liste_dateinamen_in_db = [r[0] for r in cursor.execute( "SELECT DISTINCT dateiname FROM Beobachtungen" ).fetchall()] con.close() cursor.close if pfad_datei in liste_dateinamen_in_db: Import_fortsetzen = False if Import_fortsetzen: liste_basilinien = [] tupel_basislinie = () with (open(pfad_datei, "r", encoding="utf-8") as txt): for i, zeile in enumerate(txt): zeile = str(zeile).rstrip("\n").rstrip("\r") aufgeteilt = zeile.split() if aufgeteilt[0][:2] == "@+": #print(aufgeteilt[0][2:]) tupel_basislinie += (aufgeteilt[0][2:],) if aufgeteilt[0][:2] == "@-": #print(aufgeteilt[0][2:], aufgeteilt[1], aufgeteilt[2], aufgeteilt[3]) tupel_basislinie += (aufgeteilt[0][2:], aufgeteilt[1], aufgeteilt[2], aufgeteilt[3],) if aufgeteilt[0][:2] == "@=": #print(aufgeteilt[1], aufgeteilt[2], aufgeteilt[3], aufgeteilt[4], aufgeteilt[5], aufgeteilt[6], aufgeteilt[7]) tupel_basislinie += (aufgeteilt[1], aufgeteilt[2], aufgeteilt[3], aufgeteilt[4], aufgeteilt[5], aufgeteilt[6], aufgeteilt[7], ) liste_basilinien.append(tupel_basislinie) tupel_basislinie = () #print(liste_basilinien) else: print( f"Der Import wurde abgebrochen, weil die Beobachtungen aus der Datei {pfad_datei} bereits in der Datenbank vorhanden sind.") if Import_fortsetzen: con = sqlite3.connect(self.pfad_datenbank) cursor = con.cursor() for basislinie in liste_basilinien: cursor.execute( "INSERT INTO Beobachtungen (punktnummer_sp, punktnummer_zp, gnss_bx, gnss_by, gnss_bz, gnss_s0, gnss_cxx, gnss_cxy, gnss_cxz, gnss_cyy, gnss_cyz, gnss_czz, dateiname) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", (basislinie[0], basislinie[1], float(basislinie[2]), float(basislinie[3]), float(basislinie[4]), float(basislinie[5]), float(basislinie[6]), float(basislinie[7]), float(basislinie[8]), float(basislinie[9]), float(basislinie[10]), float(basislinie[11]), pfad_datei)) con.commit() cursor.close() con.close() print(f"Der Import der Datei {pfad_datei} wurde erfolgreich abgeschlossen.")