This commit is contained in:
2026-02-05 15:02:28 +01:00
parent 65b390bf2d
commit 3828de1f9b
2 changed files with 274 additions and 178 deletions

View File

@@ -5,8 +5,8 @@
"id": "2bc687b1b4adb7bd", "id": "2bc687b1b4adb7bd",
"metadata": { "metadata": {
"ExecuteTime": { "ExecuteTime": {
"end_time": "2026-02-05T12:24:09.512813Z", "end_time": "2026-02-05T14:00:31.786023Z",
"start_time": "2026-02-05T12:24:07.910581Z" "start_time": "2026-02-05T14:00:29.848681Z"
} }
}, },
"source": [ "source": [
@@ -39,8 +39,8 @@
"id": "4f7efd7ba6ec18f9", "id": "4f7efd7ba6ec18f9",
"metadata": { "metadata": {
"ExecuteTime": { "ExecuteTime": {
"end_time": "2026-02-05T12:24:09.522346Z", "end_time": "2026-02-05T14:00:31.793259Z",
"start_time": "2026-02-05T12:24:09.520187Z" "start_time": "2026-02-05T14:00:31.788027Z"
} }
}, },
"source": [ "source": [
@@ -70,8 +70,8 @@
"id": "57fcd841405b7866", "id": "57fcd841405b7866",
"metadata": { "metadata": {
"ExecuteTime": { "ExecuteTime": {
"end_time": "2026-02-05T12:24:09.763148Z", "end_time": "2026-02-05T14:00:31.938578Z",
"start_time": "2026-02-05T12:24:09.708149Z" "start_time": "2026-02-05T14:00:31.798396Z"
} }
}, },
"source": [ "source": [
@@ -94,8 +94,8 @@
{ {
"metadata": { "metadata": {
"ExecuteTime": { "ExecuteTime": {
"end_time": "2026-02-05T12:24:10.248982Z", "end_time": "2026-02-05T14:00:32.562111Z",
"start_time": "2026-02-05T12:24:10.242901Z" "start_time": "2026-02-05T14:00:32.496934Z"
} }
}, },
"cell_type": "code", "cell_type": "code",
@@ -107,11 +107,51 @@
"id": "2cf681b8ca7f268", "id": "2cf681b8ca7f268",
"outputs": [ "outputs": [
{ {
"name": "stdout", "data": {
"output_type": "stream", "text/plain": [
"text": [ "<pandas.io.formats.style.Styler at 0x273311d82c0>"
"Es wurden noch keine Instrumente angelegt. Bitte in der folgenden Zelle nachholen und diese Zelle erneut ausführen!\n" ],
"text/html": [
"<style type=\"text/css\">\n",
"</style>\n",
"<table id=\"T_cef2d\">\n",
" <thead>\n",
" <tr>\n",
" <th id=\"T_cef2d_level0_col0\" class=\"col_heading level0 col0\" >InstrumenteID</th>\n",
" <th id=\"T_cef2d_level0_col1\" class=\"col_heading level0 col1\" >Typ</th>\n",
" <th id=\"T_cef2d_level0_col2\" class=\"col_heading level0 col2\" >Bezeichnung</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <td id=\"T_cef2d_row0_col0\" class=\"data row0 col0\" >1</td>\n",
" <td id=\"T_cef2d_row0_col1\" class=\"data row0 col1\" >Tachymeter</td>\n",
" <td id=\"T_cef2d_row0_col2\" class=\"data row0 col2\" >Trimble S9</td>\n",
" </tr>\n",
" <tr>\n",
" <td id=\"T_cef2d_row1_col0\" class=\"data row1 col0\" >2</td>\n",
" <td id=\"T_cef2d_row1_col1\" class=\"data row1 col1\" >Anschlusspunkte</td>\n",
" <td id=\"T_cef2d_row1_col2\" class=\"data row1 col2\" >lA</td>\n",
" </tr>\n",
" <tr>\n",
" <td id=\"T_cef2d_row2_col0\" class=\"data row2 col0\" >3</td>\n",
" <td id=\"T_cef2d_row2_col1\" class=\"data row2 col1\" >Nivellier</td>\n",
" <td id=\"T_cef2d_row2_col2\" class=\"data row2 col2\" >Trimble DiNi 0.3</td>\n",
" </tr>\n",
" <tr>\n",
" <td id=\"T_cef2d_row3_col0\" class=\"data row3 col0\" >4</td>\n",
" <td id=\"T_cef2d_row3_col1\" class=\"data row3 col1\" >GNSS</td>\n",
" <td id=\"T_cef2d_row3_col2\" class=\"data row3 col2\" >GNSS-Rover</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n"
] ]
},
"metadata": {},
"output_type": "display_data",
"jetTransient": {
"display_id": null
}
} }
], ],
"execution_count": 4 "execution_count": 4
@@ -119,8 +159,8 @@
{ {
"metadata": { "metadata": {
"ExecuteTime": { "ExecuteTime": {
"end_time": "2026-02-05T12:24:10.710361Z", "end_time": "2026-02-05T14:00:39.124168Z",
"start_time": "2026-02-05T12:24:10.684088Z" "start_time": "2026-02-05T14:00:39.112708Z"
} }
}, },
"cell_type": "code", "cell_type": "code",
@@ -148,9 +188,9 @@
"name": "stdout", "name": "stdout",
"output_type": "stream", "output_type": "stream",
"text": [ "text": [
"Das Instrument Trimble S9 wurde erfolgreich hinzugefügt.\n", "Das Instrument Trimble S9 ist bereits in der Datenbank vorhanden.\n",
"Das Instrument Trimble DiNi 0.3 wurde erfolgreich hinzugefügt.\n", "Das Instrument Trimble DiNi 0.3 ist bereits in der Datenbank vorhanden.\n",
"Das Instrument GNSS-Rover wurde erfolgreich hinzugefügt.\n" "Das Instrument GNSS-Rover ist bereits in der Datenbank vorhanden.\n"
] ]
} }
], ],
@@ -159,8 +199,8 @@
{ {
"metadata": { "metadata": {
"ExecuteTime": { "ExecuteTime": {
"end_time": "2026-02-05T12:24:11.161918Z", "end_time": "2026-02-05T14:00:39.720324Z",
"start_time": "2026-02-05T12:24:11.156510Z" "start_time": "2026-02-05T14:00:39.713477Z"
} }
}, },
"cell_type": "code", "cell_type": "code",
@@ -172,11 +212,56 @@
"id": "3a90f746c44a1ebb", "id": "3a90f746c44a1ebb",
"outputs": [ "outputs": [
{ {
"name": "stdout", "data": {
"output_type": "stream", "text/plain": [
"text": [ "<pandas.io.formats.style.Styler at 0x2733163fe90>"
"Es wurden noch keine apriori Genauigkeiten zu den Beobachtungsgruppen erfasst. Bitte in der folgenden Zelle nachholen und diese Zelle erneut ausführen.\n" ],
"text/html": [
"<style type=\"text/css\">\n",
"</style>\n",
"<table id=\"T_25de8\">\n",
" <thead>\n",
" <tr>\n",
" <th id=\"T_25de8_level0_col0\" class=\"col_heading level0 col0\" >instrumenteID</th>\n",
" <th id=\"T_25de8_level0_col1\" class=\"col_heading level0 col1\" >beobachtungsart</th>\n",
" <th id=\"T_25de8_level0_col2\" class=\"col_heading level0 col2\" >stabw_apriori_konstant</th>\n",
" <th id=\"T_25de8_level0_col3\" class=\"col_heading level0 col3\" >stabw_apriori_streckenprop</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <td id=\"T_25de8_row0_col0\" class=\"data row0 col0\" >1</td>\n",
" <td id=\"T_25de8_row0_col1\" class=\"data row0 col1\" >Tachymeter_Richtung</td>\n",
" <td id=\"T_25de8_row0_col2\" class=\"data row0 col2\" >0.000002</td>\n",
" <td id=\"T_25de8_row0_col3\" class=\"data row0 col3\" >nan</td>\n",
" </tr>\n",
" <tr>\n",
" <td id=\"T_25de8_row1_col0\" class=\"data row1 col0\" >1</td>\n",
" <td id=\"T_25de8_row1_col1\" class=\"data row1 col1\" >Tachymeter_Strecke</td>\n",
" <td id=\"T_25de8_row1_col2\" class=\"data row1 col2\" >0.000800</td>\n",
" <td id=\"T_25de8_row1_col3\" class=\"data row1 col3\" >1.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <td id=\"T_25de8_row2_col0\" class=\"data row2 col0\" >1</td>\n",
" <td id=\"T_25de8_row2_col1\" class=\"data row2 col1\" >Tachymeter_Zenitwinkel</td>\n",
" <td id=\"T_25de8_row2_col2\" class=\"data row2 col2\" >0.000002</td>\n",
" <td id=\"T_25de8_row2_col3\" class=\"data row2 col3\" >nan</td>\n",
" </tr>\n",
" <tr>\n",
" <td id=\"T_25de8_row3_col0\" class=\"data row3 col0\" >3</td>\n",
" <td id=\"T_25de8_row3_col1\" class=\"data row3 col1\" >Geometrisches_Nivellement</td>\n",
" <td id=\"T_25de8_row3_col2\" class=\"data row3 col2\" >0.000100</td>\n",
" <td id=\"T_25de8_row3_col3\" class=\"data row3 col3\" >0.300000</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n"
] ]
},
"metadata": {},
"output_type": "display_data",
"jetTransient": {
"display_id": null
}
} }
], ],
"execution_count": 6 "execution_count": 6
@@ -184,8 +269,8 @@
{ {
"metadata": { "metadata": {
"ExecuteTime": { "ExecuteTime": {
"end_time": "2026-02-05T12:24:11.784546Z", "end_time": "2026-02-05T14:00:40.399822Z",
"start_time": "2026-02-05T12:24:11.763928Z" "start_time": "2026-02-05T14:00:40.386179Z"
} }
}, },
"cell_type": "code", "cell_type": "code",
@@ -215,10 +300,10 @@
"name": "stdout", "name": "stdout",
"output_type": "stream", "output_type": "stream",
"text": [ "text": [
"Die Genauigkeitsangabe für Tachymeter_Richtung (Instrument: Trimble S9) wurde erfolgreich hinzugefügt.\n", "Die Genauigkeitsangabe für Tachymeter_Richtung (Instrument: Trimble S9) wurde aktualisiert.\n",
"Die Genauigkeitsangabe für Tachymeter_Strecke (Instrument: Trimble S9) wurde erfolgreich hinzugefügt.\n", "Die Genauigkeitsangabe für Tachymeter_Strecke (Instrument: Trimble S9) wurde aktualisiert.\n",
"Die Genauigkeitsangabe für Tachymeter_Zenitwinkel (Instrument: Trimble S9) wurde erfolgreich hinzugefügt.\n", "Die Genauigkeitsangabe für Tachymeter_Zenitwinkel (Instrument: Trimble S9) wurde aktualisiert.\n",
"Die Genauigkeitsangabe für Geometrisches_Nivellement (Instrument: Trimble DiNi 0.3) wurde erfolgreich hinzugefügt.\n" "Die Genauigkeitsangabe für Geometrisches_Nivellement (Instrument: Trimble DiNi 0.3) wurde aktualisiert.\n"
] ]
} }
], ],
@@ -229,8 +314,8 @@
"id": "b28afe0c64aa59d6", "id": "b28afe0c64aa59d6",
"metadata": { "metadata": {
"ExecuteTime": { "ExecuteTime": {
"end_time": "2026-02-05T12:24:12.490480Z", "end_time": "2026-02-05T14:00:41.093891Z",
"start_time": "2026-02-05T12:24:12.356523Z" "start_time": "2026-02-05T14:00:40.992896Z"
} }
}, },
"source": [ "source": [
@@ -262,10 +347,10 @@
"name": "stdout", "name": "stdout",
"output_type": "stream", "output_type": "stream",
"text": [ "text": [
"Der Import der Näherungskoordinaten wurde erfolgreich abgeschlossen\n", "Der Import wurde abgebrochen, weil mindestens ein Teil der Punktnummern aus der Datei Daten\\campsnetz_koordinaten_plus_nachmessungen.csv bereits in der Datenbank vorhanden ist. Bitte in der Datei ändern und Import wiederholen.\n",
"Korrektur erfolgreich abgeschlossen. Ausgabe: Daten\\campsnetz_beobachtungen_plus_nachmessungen_korrigiert.csv\n", "Korrektur erfolgreich abgeschlossen. Ausgabe: Daten\\campsnetz_beobachtungen_plus_nachmessungen_korrigiert.csv\n",
"Ersetzungen in der CSV-Datei (Rundung -> JXL volle Nachkommastellen): {'Hz': 1639, 'Z': 1838, 'SD': 747}\n", "Ersetzungen in der CSV-Datei (Rundung -> JXL volle Nachkommastellen): {'Hz': 1639, 'Z': 1838, 'SD': 747}\n",
"Der Import der Datei Daten\\campsnetz_beobachtungen_plus_nachmessungen_korrigiert.csv wurde erfolgreich abgeschlossen.\n" "Der Import wurde abgebrochen, weil die Beobachtungen aus der Datei Daten\\campsnetz_beobachtungen_plus_nachmessungen_korrigiert.csv bereits in der Datenbank vorhanden sind.\n"
] ]
} }
], ],
@@ -274,8 +359,8 @@
{ {
"metadata": { "metadata": {
"ExecuteTime": { "ExecuteTime": {
"end_time": "2026-02-05T12:24:12.916365Z", "end_time": "2026-02-05T14:00:41.667677Z",
"start_time": "2026-02-05T12:24:12.899749Z" "start_time": "2026-02-05T14:00:41.657349Z"
} }
}, },
"cell_type": "code", "cell_type": "code",
@@ -305,7 +390,7 @@
"name": "stdout", "name": "stdout",
"output_type": "stream", "output_type": "stream",
"text": [ "text": [
"Der Import der Datei Daten\\Basislinien_ohne0648und10002.asc.txt wurde erfolgreich abgeschlossen.\n" "Der Import wurde abgebrochen, weil die Beobachtungen aus der Datei Daten\\Basislinien_ohne0648und10002.asc.txt bereits in der Datenbank vorhanden sind.\n"
] ]
} }
], ],
@@ -316,8 +401,8 @@
"id": "2d8a0533726304a8", "id": "2d8a0533726304a8",
"metadata": { "metadata": {
"ExecuteTime": { "ExecuteTime": {
"end_time": "2026-02-05T12:24:14.974452Z", "end_time": "2026-02-05T14:00:51.315237Z",
"start_time": "2026-02-05T12:24:13.540713Z" "start_time": "2026-02-05T14:00:42.322654Z"
} }
}, },
"source": [ "source": [
@@ -337,28 +422,86 @@
"name": "stdout", "name": "stdout",
"output_type": "stream", "output_type": "stream",
"text": [ "text": [
"Anzahl verwendete Punkte für die Helmerttransformation: 9\n", "Anzahl verwendete Punkte für die Helmerttransformation: 68\n",
"Iteration Nr.1 abgeschlossen\n", "Iteration Nr.1 abgeschlossen\n",
"Iteration Nr.2 abgeschlossen\n", "Iteration Nr.2 abgeschlossen\n",
"Iteration Nr.3 abgeschlossen\n", "Iteration Nr.3 abgeschlossen\n",
"Iteration Nr.4 abgeschlossen\n", "Iteration Nr.4 abgeschlossen\n",
"Iteration Nr.5 abgeschlossen\n", "Iteration Nr.5 abgeschlossen\n",
"Iteration Nr.6 abgeschlossen\n",
"Koordinaten berechnet aus Helmerttransformation:\n", "Koordinaten berechnet aus Helmerttransformation:\n",
"10001: 3794901.521, 546745.584, 5080065.755\n", "10001: 3794901.521, 546745.584, 5080065.755\n",
"10002: 3794867.011, 546729.617, 5080092.695\n",
"10003: 3794841.061, 546735.120, 5080111.557\n",
"10004: 3794803.469, 546714.145, 5080141.394\n",
"10005: 3794793.850, 546722.325, 5080147.942\n",
"10006: 3794766.364, 546707.643, 5080169.743\n",
"10007: 3794831.055, 546758.730, 5080116.675\n",
"10008: 3794783.870, 546746.646, 5080152.758\n", "10008: 3794783.870, 546746.646, 5080152.758\n",
"10009: 3794767.479, 546740.091, 5080165.961\n",
"10010: 3794758.643, 546767.670, 5080169.471\n",
"10011: 3794894.930, 546833.119, 5080061.164\n",
"10012: 3794853.608, 546805.240, 5080094.900\n",
"10013: 3794849.615, 546826.872, 5080095.440\n",
"10014: 3794838.746, 546812.367, 5080105.181\n", "10014: 3794838.746, 546812.367, 5080105.181\n",
"10015: 3794839.472, 546793.520, 5080106.782\n",
"10016: 3794826.666, 546788.731, 5080116.878\n",
"10017: 3794825.022, 546831.703, 5080113.383\n",
"10018: 3794762.253, 546797.694, 5080163.986\n",
"10019: 3794800.100, 546833.327, 5080131.731\n",
"10020: 3794782.615, 546834.473, 5080145.041\n",
"10021: 3794776.034, 546833.743, 5080150.018\n",
"10022: 3794778.341, 546841.753, 5080147.280\n",
"10023: 3794780.799, 546848.104, 5080144.929\n",
"10024: 3794772.819, 546857.098, 5080149.838\n",
"10025: 3794774.211, 546871.813, 5080147.362\n",
"10026: 3794753.858, 546827.445, 5080167.092\n", "10026: 3794753.858, 546827.445, 5080167.092\n",
"10027: 3794757.593, 546874.333, 5080159.319\n",
"10028: 3794889.671, 546908.764, 5080056.920\n", "10028: 3794889.671, 546908.764, 5080056.920\n",
"10029: 3794845.029, 546914.918, 5080089.105\n",
"10030: 3794845.357, 546901.029, 5080090.362\n",
"10031: 3794821.763, 546877.550, 5080110.752\n",
"10032: 3794807.851, 546888.488, 5080119.750\n",
"10033: 3794800.019, 546874.654, 5080127.209\n",
"10034: 3794886.107, 546965.700, 5080053.411\n",
"10035: 3794845.950, 546961.514, 5080084.091\n",
"10036: 3794815.055, 546969.597, 5080106.065\n",
"10037: 3794800.626, 546960.749, 5080117.709\n", "10037: 3794800.626, 546960.749, 5080117.709\n",
"10038: 3794806.325, 546929.732, 5080116.901\n",
"10039: 3794804.164, 546914.733, 5080120.142\n",
"10040: 3794780.721, 546956.425, 5080133.161\n",
"10041: 3794778.154, 546925.879, 5080138.723\n",
"10042: 3794758.957, 546937.061, 5080151.609\n",
"10043: 3794747.274, 546919.151, 5080162.149\n",
"10044: 3794752.686, 546958.324, 5080154.237\n", "10044: 3794752.686, 546958.324, 5080154.237\n",
"10045: 3794881.901, 547019.784, 5080050.718\n",
"10046: 3794846.580, 547012.997, 5080077.441\n",
"10047: 3794831.534, 547018.239, 5080088.124\n",
"10048: 3794809.105, 547017.302, 5080105.013\n",
"10049: 3794786.888, 547021.076, 5080121.441\n",
"10050: 3794766.769, 547012.526, 5080137.481\n",
"10051: 3794767.056, 546988.699, 5080139.995\n",
"10052: 3794743.624, 546984.416, 5080157.827\n",
"10053: 3794748.143, 547017.574, 5080150.924\n",
"10054: 3794889.163, 547086.949, 5080038.116\n", "10054: 3794889.163, 547086.949, 5080038.116\n",
"10055: 3794838.849, 547081.903, 5080075.695\n",
"10056: 3794825.037, 547094.810, 5080084.484\n",
"10057: 3794800.815, 547078.670, 5080104.567\n",
"10058: 3794766.103, 547091.752, 5080129.113\n",
"10059: 3794736.830, 547079.447, 5080152.362\n", "10059: 3794736.830, 547079.447, 5080152.362\n",
"666: 3794868.128, 547082.279, 5080054.295\n",
"812: 3794850.535, 547010.934, 5080075.089\n",
"816: 3794817.790, 547004.825, 5080100.040\n",
"FH11: 3794853.321, 546973.225, 5080077.224\n",
"FH13: 3794832.559, 546754.704, 5080116.651\n",
"FH14: 3794853.863, 546972.809, 5080076.935\n",
"FH15: 3794794.213, 546870.696, 5080132.914\n",
"FH3: 3794810.977, 547013.441, 5080105.068\n",
"FH4: 3794773.597, 546985.341, 5080135.930\n",
"Streckendifferenzen zwischen Näherungskoordinate aus statischer GNSS-Messung und ergebnis der Helmerttransformation:\n", "Streckendifferenzen zwischen Näherungskoordinate aus statischer GNSS-Messung und ergebnis der Helmerttransformation:\n",
"[0.027793, 0.025879, 0.016527, 0.01604, 0.066139, 0.07164, 0.025138, 0.125881, 0.142477]\n", "[0.027793, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.025879, 0.0, 0.0, 0.0, 0.0, 0.0, 0.016527, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.01604, 0.0, 0.066139, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.07164, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.025138, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.125881, 0.0, 0.0, 0.0, 0.0, 0.142477, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]\n",
"\n", "\n",
"Differenz Schwerpunkt zwischen Näherungskoordinate aus statischer GNSS-Messung und ergebnis der Helmerttransformation::\n", "Differenz Schwerpunkt zwischen Näherungskoordinate aus statischer GNSS-Messung und ergebnis der Helmerttransformation::\n",
"Matrix([[3.10e-10], [1.16e-10], [1.03e-10]])\n", "Matrix([[-2.59e-10], [6.85e-12], [-2.32e-10]])\n",
"Betrag der Schwerpunkt-Differenz zwischen Näherungskoordinate aus statischer GNSS-Messung und ergebnis der Helmerttransformation::\n", "Betrag der Schwerpunkt-Differenz zwischen Näherungskoordinate aus statischer GNSS-Messung und ergebnis der Helmerttransformation::\n",
"0.000m\n" "0.000m\n"
] ]
@@ -371,8 +514,8 @@
"id": "ed9be38e35cfc619", "id": "ed9be38e35cfc619",
"metadata": { "metadata": {
"ExecuteTime": { "ExecuteTime": {
"end_time": "2026-02-05T12:24:15.067892Z", "end_time": "2026-02-05T14:00:51.354852Z",
"start_time": "2026-02-05T12:24:15.058891Z" "start_time": "2026-02-05T14:00:51.347388Z"
} }
}, },
"source": [ "source": [
@@ -402,8 +545,8 @@
"id": "2d2156381d974d94", "id": "2d2156381d974d94",
"metadata": { "metadata": {
"ExecuteTime": { "ExecuteTime": {
"end_time": "2026-02-05T12:24:15.151220Z", "end_time": "2026-02-05T14:00:51.361580Z",
"start_time": "2026-02-05T12:24:15.146192Z" "start_time": "2026-02-05T14:00:51.354852Z"
} }
}, },
"source": [ "source": [
@@ -433,8 +576,8 @@
"id": "c2db29680c53f8c4", "id": "c2db29680c53f8c4",
"metadata": { "metadata": {
"ExecuteTime": { "ExecuteTime": {
"end_time": "2026-02-05T12:24:15.928494Z", "end_time": "2026-02-05T14:00:51.372347Z",
"start_time": "2026-02-05T12:24:15.908077Z" "start_time": "2026-02-05T14:00:51.364107Z"
} }
}, },
"source": [ "source": [
@@ -456,19 +599,9 @@
"name": "stdout", "name": "stdout",
"output_type": "stream", "output_type": "stream",
"text": [ "text": [
"Folgende Stand- und Zielpunkte des geometrischen Nivellements werden für die Beobachtungsgruppe ausgeglichen: ['812', '10047', '10046', '10045', '10034', 'FH14', 'FH11', '10035', '10029', '10030', '10031', '10017', '10013', '10012', '10014', '10015', '10016', '10007', 'FH13', '666', '10054', '10056', '10058', '10052', '10043', '10026', '10010', '10006', '816', '10048', 'FH3', '10049', '10053', '10050', '10051', 'FH4', '10040', '10037', '10038', '10039', '10032', 'FH15', '10033', '10025', '10024', '10023', '10022', '10021', '10020', '10019', '10036', '10028', '10011', '10001', '10003', '10008', '10005', '10004', '10002', '10055', '10057', '10059', '10044', '10041', '10042', '10027', '10018', '10009']\n", "Der Import wurde abgebrochen, weil die Beobachtungen aus der Datei Daten\\Niv_bereinigt.DAT.csv bereits in der Datenbank vorhanden sind.\n",
"Für folgende Punkte wird aktuell keine Höhe in der Ausgleichung berechnet: ['80001', '80002', '90001', '90002', '90003', '90004', '90005', '90006', '90007', '90008', '90009', '90010', '90011', '90012', '90013', '90014', '70001', '70002', '60001', 'FH5', '60002', '60003', '60004', '60005', '60006', '60007', '60008', '60009', '60010', '30001', '30002', '30003', '30004', '30005', '30006', '30007', '30008']. Bei Bedarf im folgenden Schritt ändern!\n" "Der Import wurde abgebrochen, weil die Beobachtungen aus der Datei Daten\\Niv_bereinigt.DAT.csv bereits in der Datenbank vorhanden sind.\n"
] ]
},
{
"data": {
"text/plain": [
"'Die Beobachtungen aus der Datei Daten\\\\Niv_bereinigt.DAT.csv wurden erfolgreich importiert.'"
]
},
"execution_count": 13,
"metadata": {},
"output_type": "execute_result"
} }
], ],
"execution_count": 13 "execution_count": 13
@@ -479,7 +612,7 @@
"is_executing": true "is_executing": true
}, },
"ExecuteTime": { "ExecuteTime": {
"start_time": "2026-02-05T12:24:17.017690Z" "start_time": "2026-02-05T14:00:51.377686Z"
} }
}, },
"cell_type": "code", "cell_type": "code",
@@ -827,6 +960,14 @@
"id": "23aa13721f563c90", "id": "23aa13721f563c90",
"outputs": [], "outputs": [],
"execution_count": null "execution_count": null
},
{
"metadata": {},
"cell_type": "code",
"outputs": [],
"execution_count": null,
"source": "",
"id": "8525da086619229b"
} }
], ],
"metadata": { "metadata": {

View File

@@ -8,7 +8,52 @@ import Datumsfestlegung
import numpy as np import numpy as np
def ausgleichung_global(A, dl, Q_ext, P):
class Iterationen:
"""Iterative Ausgleichung auf Basis des funktionalen und stochastischen Modells.
Die Klasse führt eine iterative Parameterschätzung nach dem Gauss-Markov-Modell durch. Zudem stellt Sie eine Methode zur Verfügung für:
- einmaligen Aufbau der symbolischen Matrizen/Vektoren (Jacobi-Matrix, Näherungs-Beobachtungsvektor, Qll, QAA, Unbekanntenvektor),
- numerische Auswertung je Iteration (A(x_k), l0(x_k), dl_k) und Berechnung des Vektors dx,
- Fortschreibung des Unbekanntenvektors x_{k+1} = x_k + dx,
- Abbruchprüfung über Konvergenzkriterium (max|dx_xyz|) und Stagnation,
- optionaler Export von Zwischenergebnisse als CSV in den Ordner Zwischenergebnisse.
Die Iteration verwendet bei weicher Lagerung eine erweiterte Kovarianzmatrix (Q_ext) inklusive Anschlusspunkten (lA_*),
aus der die Gewichtsmatrix P abgeleitet wird.
"""
def __init__(self, pfad_datenbank: str, pfad_tif_quasigeoidundolation: str, a: float, b: float) -> None:
"""Initialisiert die Iterationssteuerung.
Speichert Datenbankpfade und Ellipsoidparameter, initialisiert das funktionale Modell sowie das stochastische Modell
und legt den Datenbankzugriff an.
:param pfad_datenbank: Pfad zur SQLite-Datenbank.
:type pfad_datenbank: str
:param pfad_tif_quasigeoidundolation: Pfad zum GeoTIFF der Quasigeoidundulation (BKG), benötigt für UTM/Normalhöhen in Transformationen.
:type pfad_tif_quasigeoidundolation: str
:param a: Große Halbachse a des Referenzellipsoids in Meter.
:type a: float
:param b: Kleine Halbachse b des Referenzellipsoids in Meter.
:type b: float
:return: None
:rtype: None
"""
self.pfad_datenbank = pfad_datenbank
self.pfad_tif_quasigeoidundolation = pfad_tif_quasigeoidundolation
self.a = a
self.b = b
self.stoch_modell = Stochastisches_Modell.StochastischesModell(pfad_datenbank)
self.db_zugriff = Datenbank.Datenbankzugriff(pfad_datenbank)
self.fm = Funktionales_Modell.FunktionalesModell(self.pfad_datenbank, self.a, self.b, self.pfad_tif_quasigeoidundolation)
def ausgleichung_global(self, A, dl, Q_ext, P):
""" """
Führt eine Ausgleichung nach kleinsten Quadraten durch. Führt eine Ausgleichung nach kleinsten Quadraten durch.
@@ -77,96 +122,6 @@ def ausgleichung_global(A, dl, Q_ext, P):
return dict_ausgleichung, dx return dict_ausgleichung, dx
def ausgleichung_lokal(A, dl, Q_ll):
A = np.asarray(A, dtype=float)
dl = np.asarray(dl, dtype=float).reshape(-1, 1)
Q_ll = np.asarray(Q_ll, dtype=float)
# 1) Gewichtsmatrix
P = np.linalg.inv(Q_ll)
# 2) Normalgleichungen
N = A.T @ P @ A
n = A.T @ P @ dl
# 3) Datumsfestlegung
G = Datumsfestlegung.build_G_from_names(x0, Jacobimatrix_symbolisch_liste_unbekannte, liste_punktnummern, mit_massstab=True)
u = A.shape[1]
aktive = Datumsfestlegung.aktive_indices_from_selection(auswahl, Jacobimatrix_symbolisch_liste_unbekannte)
E = Datumsfestlegung.auswahlmatrix_E(u, aktive)
Gi = E @ G
# 3) Zuschlagsvektor dx
dx, k = Datumsfestlegung.berechne_dx_geraendert(N, n, Gi)
# 5) Residuen
v = dl - A @ dx
# 5) Kofaktormatrix der Unbekannten Q_xx
Q_xx = StochastischesModell.berechne_Q_xx(N)
# 6) Kofaktormatrix der Beobachtungen Q_ll_dach
Q_ll_dach = StochastischesModell.berechne_Q_ll_dach(A, Q_xx)
# 7) Kofaktormatrix der Verbesserungen Q_vv
Q_vv = StochastischesModell.berechne_Qvv(Q_ll, Q_ll_dach)
# 8) Ausgabe
dict_ausgleichung = {
"dx": dx,
"v": v,
"P": P,
"N": N,
"Q_xx": Q_xx,
"Q_ll_dach": Q_ll_dach,
"Q_vv": Q_vv,
"Q_ll": Q_ll,
}
return dict_ausgleichung, dx
class Iterationen:
"""Iterative Ausgleichung auf Basis des funktionalen und stochastischen Modells.
Die Klasse führt eine iterative Parameterschätzung nach dem Gauss-Markov-Modell durch. Zudem stellt Sie eine Methode zur Verfügung für:
- einmaligen Aufbau der symbolischen Matrizen/Vektoren (Jacobi-Matrix, Näherungs-Beobachtungsvektor, Qll, QAA, Unbekanntenvektor),
- numerische Auswertung je Iteration (A(x_k), l0(x_k), dl_k) und Berechnung des Vektors dx,
- Fortschreibung des Unbekanntenvektors x_{k+1} = x_k + dx,
- Abbruchprüfung über Konvergenzkriterium (max|dx_xyz|) und Stagnation,
- optionaler Export von Zwischenergebnisse als CSV in den Ordner Zwischenergebnisse.
Die Iteration verwendet bei weicher Lagerung eine erweiterte Kovarianzmatrix (Q_ext) inklusive Anschlusspunkten (lA_*),
aus der die Gewichtsmatrix P abgeleitet wird.
"""
def __init__(self, pfad_datenbank: str, pfad_tif_quasigeoidundolation: str, a: float, b: float) -> None:
"""Initialisiert die Iterationssteuerung.
Speichert Datenbankpfade und Ellipsoidparameter, initialisiert das funktionale Modell sowie das stochastische Modell
und legt den Datenbankzugriff an.
:param pfad_datenbank: Pfad zur SQLite-Datenbank.
:type pfad_datenbank: str
:param pfad_tif_quasigeoidundolation: Pfad zum GeoTIFF der Quasigeoidundulation (BKG), benötigt für UTM/Normalhöhen in Transformationen.
:type pfad_tif_quasigeoidundolation: str
:param a: Große Halbachse a des Referenzellipsoids in Meter.
:type a: float
:param b: Kleine Halbachse b des Referenzellipsoids in Meter.
:type b: float
:return: None
:rtype: None
"""
self.pfad_datenbank = pfad_datenbank
self.pfad_tif_quasigeoidundolation = pfad_tif_quasigeoidundolation
self.a = a
self.b = b
self.stoch_modell = Stochastisches_Modell.StochastischesModell(pfad_datenbank)
self.db_zugriff = Datenbank.Datenbankzugriff(pfad_datenbank)
self.fm = Funktionales_Modell.FunktionalesModell(self.pfad_datenbank, self.a, self.b, self.pfad_tif_quasigeoidundolation)
def iterationen(self, datumfestlegung: str, speichern_in_csv: bool) -> tuple[np.ndarray, list, list, np.ndarray, np.ndarray, np.ndarray, dict]: def iterationen(self, datumfestlegung: str, speichern_in_csv: bool) -> tuple[np.ndarray, list, list, np.ndarray, np.ndarray, np.ndarray, dict]:
"""Führt die iterative Ausgleichung (Parameterschätzung) aus und gibt die Ergebnisse zurück. """Führt die iterative Ausgleichung (Parameterschätzung) aus und gibt die Ergebnisse zurück.
@@ -365,7 +320,7 @@ class Iterationen:
dl_k = np.asarray(dl_k, float) dl_k = np.asarray(dl_k, float)
# Parameterschätzung für die aktuelle Iteration berechnen # Parameterschätzung für die aktuelle Iteration berechnen
ausgabe_parameterschaetzung, dx = Parameterschaetzung.ausgleichung_global(A_matrix_numerisch, dl_k, Q_k, P) ausgabe_parameterschaetzung, dx = self.ausgleichung_global(A_matrix_numerisch, dl_k, Q_k, P)
dx = np.asarray(dx, float).reshape(-1, 1) dx = np.asarray(dx, float).reshape(-1, 1)
# Matrizen je Iteration als CSV-Datei speichern # Matrizen je Iteration als CSV-Datei speichern