Stand Masterprojekt_V2 ohne Michelle
This commit is contained in:
587
Import.py
Normal file
587
Import.py
Normal file
@@ -0,0 +1,587 @@
|
||||
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
|
||||
|
||||
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:
|
||||
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."
|
||||
|
||||
Reference in New Issue
Block a user