{
 "cells": [
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-11-14T13:15:38.527230Z",
     "start_time": "2025-11-14T13:15:38.518151Z"
    }
   },
   "cell_type": "code",
   "source": [
    "import csv\n",
    "\n",
    "from prompt_toolkit.utils import to_float\n"
   ],
   "id": "9317c939b4662e39",
   "outputs": [],
   "execution_count": 1
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-10-26T17:16:07.067056Z",
     "start_time": "2025-10-26T17:16:07.064166Z"
    }
   },
   "cell_type": "code",
   "source": [
    "# ToDo: Materialized View für Mittel aus mehreren Vollsätzen verschiedener Standpunkte erstellen und nach dem importieren der Tachymeterdaten aaktualisieren (Dazu klären: Wo werden die Gewichte der einzelnen Beobachtungen gespeichert?)\n",
    "\n",
    "# Hier werden die Nutzereingaben vorgenommen:\n",
    "pfad_datenbank = r\"C:\\Users\\fabia\\OneDrive\\Jade HS\\Master\\MGW2\\Masterprojekt_allgemein\\Masterprojekt\\Programmierung\\Campusnetz\\Campusnetz.db\""
   ],
   "id": "33969d88a569b138",
   "outputs": [],
   "execution_count": 2
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-10-26T17:16:07.118676Z",
     "start_time": "2025-10-26T17:16:07.073244Z"
    }
   },
   "cell_type": "code",
   "source": [
    "# Es wird geprüft, ob die .db-Datei bereits vorhanden ist. Wenn dies nicht der Fall ist, wird die Datenbank mitsamt aller Tabellen angelegt.\n",
    "Datenbank.Datenbank_anlegen(pfad_datenbank)\n",
    "pfad = r\"C:\\Users\\fabia\\OneDrive\\Jade HS\\Master\\MGW2\\Masterprojekt_allgemein\\Masterprojekt\\Übungsnetz\\Tachymeterdaten\\Masterprobe_2.csv\""
   ],
   "id": "c55d4c3fccfa7902",
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<Datenbank.Datenbank_anlegen at 0x1472dd0b8c0>"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 3
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-10-26T17:16:07.199262Z",
     "start_time": "2025-10-26T17:16:07.196785Z"
    }
   },
   "cell_type": "code",
   "source": [
    "# ToDo: Dateipfad bereits vorhanden? --> Abbruch import\n",
    "# ToDo: Rundungsfehler überarbeiten!\n",
    "# ToDo: Print ausgabe Anzahl importierte Punkte\n",
    "# ToDo: Ggf. Ausgabe Rohdaten in Tabellenform (Berechnungen nachvollziehen)\n",
    "\n",
    "import sqlite3\n",
    "\n",
    "liste_netzpunkte = []\n",
    "liste_netzpunkte_neu = []\n",
    "liste_netzpunkte_vorhanden = []\n",
    "liste_zeilennummern_Orientierung = []\n",
    "liste_standpunkte = []\n",
    "liste_beobachtungen = []\n",
    "\n",
    "with open (pfad, newline='', encoding='utf-8') as csvfile:\n",
    "    r = csv.reader(csvfile, delimiter=';')\n",
    "    zeilennummer = 0\n",
    "    for row in r:\n",
    "        zeilennummer += 1\n",
    "        if zeilennummer < 4:\n",
    "            pass\n",
    "        else:\n",
    "            if row[0] != \"Orientierung\":\n",
    "                liste_netzpunkte.append(row[0].strip())\n",
    "            else:\n",
    "                liste_zeilennummern_Orientierung.append(zeilennummer-1)\n",
    "                liste_standpunkte.append(zeilennummer-1)\n",
    "                liste_zeilennummern_Orientierung.append(zeilennummer)\n",
    "           #print(row)\n",
    "\n",
    "\n",
    "liste_netzpunkte = list(set(liste_netzpunkte))\n",
    "\n",
    "con = sqlite3.connect(pfad_datenbank)\n",
    "cursor = con.cursor()\n",
    "cursor.execute(\"\"\"SELECT punktnummer FROM Netzpunkte\"\"\")\n",
    "liste_netzpunkte_in_db = {row[0] for row in cursor.fetchall()}\n",
    "\n",
    "liste_netzpunkte_neu = [np for np in liste_netzpunkte if np not in liste_netzpunkte_in_db]\n",
    "liste_netzpunkte_vorhanden = [np for np in liste_netzpunkte if np in liste_netzpunkte_in_db]\n",
    "\n",
    "for np_neu in liste_netzpunkte_neu:\n",
    "    cursor.execute(\"INSERT INTO Netzpunkte (punktnummer) VALUES (?)\", (np_neu,))\n",
    "\n",
    "with open (pfad, newline='', encoding='utf-8') as csvfile:\n",
    "    r = csv.reader(csvfile, delimiter=';')\n",
    "    standpunktsnummer = 0\n",
    "    for nummer, row in enumerate(r, start=1):\n",
    "        if nummer < 4:\n",
    "            pass\n",
    "        if nummer in liste_zeilennummern_Orientierung:\n",
    "            if row[0] != \"Orientierung\":\n",
    "                punktnummer = row[0].strip()\n",
    "            else:\n",
    "                standpunktsnummer += 1\n",
    "                cursor.execute(\"INSERT INTO Standpunkte_Tachymeter (punktnummer, orientierunghz, orientierungv, dateipfad, standpunktsnummer) VALUES (?, ?, ?, ?, ?)\", (punktnummer, row[1], row[2], pfad, standpunktsnummer))\n",
    "\n",
    "with open (pfad, newline='', encoding='utf-8') as csvfile:\n",
    "    r = csv.reader(csvfile, delimiter=';')\n",
    "    rows = list(r)\n",
    "\n",
    "    for index, row in enumerate(liste_standpunkte):\n",
    "        zeile_punktnummer = row - 1\n",
    "        punktnummer = rows[zeile_punktnummer][0].strip()\n",
    "        zeile_eins = zeile_punktnummer + 2\n",
    "        if index + 1 < len(liste_standpunkte):\n",
    "            zeile_zwei = liste_standpunkte[index + 1]\n",
    "        else:\n",
    "            zeile_zwei = len(rows)+1\n",
    "\n",
    "        for i in range (zeile_eins, zeile_zwei-1):\n",
    "            liste_beobachtungen.append([punktnummer] + rows[i])\n",
    "\n",
    "    standpunktsnummer = 0\n",
    "    standpunkt_alt = None\n",
    "while len(liste_beobachtungen) > 0:\n",
    "    standpunkt1 = liste_beobachtungen[0][0]\n",
    "    zielpunkt1 = liste_beobachtungen[0][1]\n",
    "    horizonalwinkel1 = to_float(liste_beobachtungen[0][2].replace(',', '.'))\n",
    "    vertikalwinkel1 = to_float(liste_beobachtungen[0][3].replace(',', '.'))\n",
    "    distanz1 = to_float(liste_beobachtungen[0][4].replace(',', '.'))\n",
    "    liste_beobachtungen.pop(0)\n",
    "\n",
    "    if standpunkt_alt != standpunkt1:\n",
    "        standpunktsnummer += 1\n",
    "\n",
    "    standpunkt_alt = standpunkt1\n",
    "\n",
    "    standpunktsid = cursor.execute(\"SELECT spID FROM Standpunkte_Tachymeter WHERE punktnummer = ? AND dateipfad = ? AND standpunktsnummer = ?\", (standpunkt1, pfad, standpunktsnummer)).fetchall()[0][0]\n",
    "\n",
    "    index_beobachtung2 = None\n",
    "    for index in range(len(liste_beobachtungen)):\n",
    "        beobachtung = liste_beobachtungen[index]\n",
    "        if beobachtung[0] == standpunkt1 and beobachtung[1] == zielpunkt1:\n",
    "            index_beobachtung2 = index\n",
    "            break\n",
    "    if index_beobachtung2 is None:\n",
    "        print(f\"Zweite Lage für Standpunkt: {standpunkt1}, Zielpunkt: {zielpunkt1} wurde nicht gefund!\")\n",
    "\n",
    "    standpunkt2 = liste_beobachtungen[index_beobachtung2][0]\n",
    "    zielpunkt2 = liste_beobachtungen[index_beobachtung2][1]\n",
    "    horizonalwinkel2 = to_float(liste_beobachtungen[index_beobachtung2][2].replace(',', '.'))\n",
    "    vertikalwinkel2 = to_float(liste_beobachtungen[index_beobachtung2][3].replace(',', '.'))\n",
    "    distanz2 = to_float(liste_beobachtungen[index_beobachtung2][4].replace(',', '.'))\n",
    "\n",
    "    if horizonalwinkel1 > horizonalwinkel2:\n",
    "        horizontalwinkel_vollsatz = (horizonalwinkel1 + horizonalwinkel2 + 200) / 2\n",
    "    else:\n",
    "        horizontalwinkel_vollsatz = (horizonalwinkel1 + horizonalwinkel2) / 2\n",
    "\n",
    "    if vertikalwinkel1 < vertikalwinkel2:\n",
    "        vertikalwinkel_satzmittel = (400 + (vertikalwinkel1 - vertikalwinkel2)) / 2\n",
    "    else:\n",
    "        vertikalwinkel_satzmittel = (400 + (vertikalwinkel2 - vertikalwinkel1)) / 2\n",
    "\n",
    "    distanz_satzmittel = (distanz1 + distanz2) / 2\n",
    "\n",
    "    print(f\"spid: {standpunktsid}, standpunktsnummer: {standpunktsnummer},standpunkt1: {standpunkt1}, standpunkt2: {standpunkt2}, zielpunkt1: {zielpunkt1}, zielpunkt2: {zielpunkt2}, horizonalwinkel1: {horizonalwinkel1}, horizonalwinkel2: {horizonalwinkel2}, horizontalwinkel_vollsatz: {horizontalwinkel_vollsatz},vertikalwinkel1: {vertikalwinkel1}, vertikalwinkel2: {vertikalwinkel2}, vertikalwinkel_vollsatz: {vertikalwinkel_satzmittel},distanz1: {distanz1}, distanz2: {distanz2}, distanz_satzmittel: {distanz_satzmittel}\")\n",
    "\n",
    "    liste_beobachtungen.pop(index_beobachtung2)\n",
    "\n",
    "    cursor.execute(\"INSERT INTO Beobachtungen_Tachymeter (spID, punktnummer, hz, v, distanz) VALUES (?, ?, ?, ?, ?)\", (standpunktsid, standpunkt1, horizontalwinkel_vollsatz, vertikalwinkel_satzmittel, distanz_satzmittel))\n",
    "\n",
    "        #print(row)\n",
    "    #print(len(liste_standpunkte))\n",
    "    #print(len(list(r)))\n",
    "\n",
    "\n",
    "con.commit()\n",
    "con.close()\n",
    "\n",
    "\n",
    "print(liste_beobachtungen)\n",
    "print(f\"Es wurden {len(liste_netzpunkte_neu)} neue Punkte importiert. Dies sind: {', '.join(map(str, liste_netzpunkte_neu))}\")\n",
    "print(f\"Es sind bereits {len(liste_netzpunkte_vorhanden)} Punkte im Netz enthalten. Dies sind: {', '.join(map(str, liste_netzpunkte_vorhanden))}\")\n",
    "# ToDo: Näherungswerte für Koordinaten aus Tychymetermessungen berechnen\n",
    "# ToDo: Wenn GNSS-Daten vorliegen: Koordinaten von GNSS verwenden!"
   ],
   "id": "d200a8b43e3646c",
   "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
}
