Stand Masterprojekt_V2 ohne Michelle

This commit is contained in:
2025-12-30 09:56:04 +01:00
commit 0a65208d71
41 changed files with 22312 additions and 0 deletions

8
.idea/.gitignore generated vendored Normal file
View File

@@ -0,0 +1,8 @@
# Default ignored files
/shelf/
/workspace.xml
# Editor-based HTTP Client requests
/httpRequests/
# Datasource local storage ignored files
/dataSources/
/dataSources.local.xml

8
.idea/Masterprojekt_V3.iml generated Normal file
View File

@@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<module type="PYTHON_MODULE" version="4">
<component name="NewModuleRootManager">
<content url="file://$MODULE_DIR$" />
<orderEntry type="jdk" jdkName="Python 3.14" jdkType="Python SDK" />
<orderEntry type="sourceFolder" forTests="false" />
</component>
</module>

View File

@@ -0,0 +1,6 @@
<component name="InspectionProjectProfileManager">
<profile version="1.0">
<option name="myName" value="Project Default" />
<inspection_tool class="Eslint" enabled="true" level="WARNING" enabled_by_default="true" />
</profile>
</component>

View File

@@ -0,0 +1,6 @@
<component name="InspectionProjectProfileManager">
<settings>
<option name="USE_PROJECT_PROFILE" value="false" />
<version value="1.0" />
</settings>
</component>

7
.idea/misc.xml generated Normal file
View File

@@ -0,0 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="Black">
<option name="sdkName" value="Python 3.14" />
</component>
<component name="ProjectRootManager" version="2" project-jdk-name="Python 3.14" project-jdk-type="Python SDK" />
</project>

8
.idea/modules.xml generated Normal file
View File

@@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectModuleManager">
<modules>
<module fileurl="file://$PROJECT_DIR$/.idea/Masterprojekt_V3.iml" filepath="$PROJECT_DIR$/.idea/Masterprojekt_V3.iml" />
</modules>
</component>
</project>

6
.idea/vcs.xml generated Normal file
View File

@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="VcsDirectoryMappings">
<mapping directory="" vcs="Git" />
</component>
</project>

71
Berechnungen.py Normal file
View File

@@ -0,0 +1,71 @@
import sympy as sp
from decimal import Decimal
import math
class Berechnungen:
def __init__(self, a, b):
self.a_wert = a
self.b_wert = b
self.e_quadrat_wert = self.e_quadrat()
self.e_strich_quadrat_wert = self.e_strich_quadrat()
def e_quadrat(self):
return (self.a_wert**2 - self.b_wert**2) / self.a_wert **2
def e_strich_quadrat(self):
return (self.a_wert**2 - self.b_wert**2) / self.b_wert **2
def P(self, x, y):
return sp.sqrt(x**2 + y**2)
def hilfswinkel(self, z, x, y):
hw = sp.atan2(z * self.a_wert, self.P(x, y) * self.b_wert)
return hw
def B(self, z, x, y):
hilfswinkel = self.hilfswinkel(z, x, y)
B = sp.atan2((z + self.e_strich_quadrat_wert * self.b_wert * sp.sin(hilfswinkel) ** 3), (self.P(x, y) - self.e_quadrat_wert * self.a_wert * sp.cos(hilfswinkel) ** 3))
return B
def L(self, x, y):
return sp.atan2(y, x)
def H(self, x, y, z):
B = self.B(z, x, y)
H = (self.P(x, y) / sp.cos(B)) - self.a_wert / (sp.sqrt(1 - self.e_quadrat_wert * sp.sin(B) ** 2))
return H
def geometrische_breite_laenge(self, dict_koordinaten):
for punktnummer, matrix in dict_koordinaten.items():
dict_koordinaten[punktnummer] = [matrix, self.B(matrix[2], matrix[0], matrix[1]), self.L(matrix[0], matrix[1])]
return dict_koordinaten
class Einheitenumrechnung:
def __init__(self):
pass
def mas_to_rad(mas):
umrechnungsfaktor = 1 / 1000 * 1 / 3600 * sp.pi / 180
grad = mas * umrechnungsfaktor
return grad
def mm_to_m(mm):
m = mm / 1000
return m
def ppb(ppb):
ppb *= 10 ** (-9)
return ppb
def gon_to_rad_Decimal(gon):
gon = Decimal(gon)
pi = Decimal(str(math.pi))
rad = (gon / Decimal(200)) * pi
return rad
def mgon_to_rad_Decimal(gon):
gon = Decimal(gon)
pi = Decimal(str(math.pi))
rad = (gon / Decimal(200000)) * pi
return rad

1292
Campusnetz.ipynb Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,17 @@
0645,Referenz,11/24/2025 07:59:44,3793994.4529,495758.0093,5085958.2047,0.0000,0.0000,0.0000
0648,Referenz,11/24/2025 07:59:44,3762551.5682,538424.8576,5104809.1503,0.0000,0.0000,0.0000
0656,Referenz,11/24/2025 07:59:44,3794838.5802,546995.3112,5080116.5503,0.0000,0.0000,0.0000
0995,Referenz,11/24/2025 07:59:44,3794519.9177,588539.9138,5075743.9332,0.0000,0.0000,0.0000
1675,Referenz,11/24/2025 07:59:44,3813621.0427,566004.8947,5064056.9300,0.0000,0.0000,0.0000
ESTE,Referenz,11/24/2025 07:59:44,3816914.7110,507636.8120,5067733.4670,0.0000,0.0000,0.0000
GNA2,Referenz,11/24/2025 07:59:44,3767530.6335,597990.0978,5094563.5073,0.0000,0.0000,0.0000
10054,Gemittelt,11/24/2025 16:26:50,3794889.0494,547086.9874,5080038.1528,0.0030,0.0017,0.0023
10014,Gemittelt,11/24/2025 11:45:48,3794838.7464,546812.3658,5080105.2000,0.0024,0.0010,0.0031
10008,Gemittelt,11/24/2025 16:27:15,3794783.8581,546746.6347,5080152.7404,0.0026,0.0008,0.0031
10059,Gemittelt,11/24/2025 14:56:52,3794736.9649,547079.4678,5080152.3224,0.0034,0.0036,0.0039
10037,Gemittelt,11/24/2025 13:31:07,3794800.5693,546960.7477,5080117.6650,0.0034,0.0018,0.0044
10044,Gemittelt,11/24/2025 16:26:33,3794752.6696,546958.3218,5080154.2579,0.0042,0.0013,0.0054
10026,Gemittelt,11/24/2025 14:56:51,3794753.8595,546827.4296,5080167.0938,0.0048,0.0021,0.0058
10001,Gemittelt,11/24/2025 11:46:05,3794901.5252,546745.5590,5080065.7672,0.0068,0.0042,0.0064
10002,Gemittelt,11/24/2025 13:31:18,3794866.9711,546729.5958,5080092.6364,0.0087,0.0025,0.0117
10028,Gemittelt,11/24/2025 16:26:51,3794889.7348,546908.7636,5080056.9381,0.0105,0.0026,0.0135
1 0645 Referenz 11/24/2025 07:59:44 3793994.4529 495758.0093 5085958.2047 0.0000 0.0000 0.0000
2 0648 Referenz 11/24/2025 07:59:44 3762551.5682 538424.8576 5104809.1503 0.0000 0.0000 0.0000
3 0656 Referenz 11/24/2025 07:59:44 3794838.5802 546995.3112 5080116.5503 0.0000 0.0000 0.0000
4 0995 Referenz 11/24/2025 07:59:44 3794519.9177 588539.9138 5075743.9332 0.0000 0.0000 0.0000
5 1675 Referenz 11/24/2025 07:59:44 3813621.0427 566004.8947 5064056.9300 0.0000 0.0000 0.0000
6 ESTE Referenz 11/24/2025 07:59:44 3816914.7110 507636.8120 5067733.4670 0.0000 0.0000 0.0000
7 GNA2 Referenz 11/24/2025 07:59:44 3767530.6335 597990.0978 5094563.5073 0.0000 0.0000 0.0000
8 10054 Gemittelt 11/24/2025 16:26:50 3794889.0494 547086.9874 5080038.1528 0.0030 0.0017 0.0023
9 10014 Gemittelt 11/24/2025 11:45:48 3794838.7464 546812.3658 5080105.2000 0.0024 0.0010 0.0031
10 10008 Gemittelt 11/24/2025 16:27:15 3794783.8581 546746.6347 5080152.7404 0.0026 0.0008 0.0031
11 10059 Gemittelt 11/24/2025 14:56:52 3794736.9649 547079.4678 5080152.3224 0.0034 0.0036 0.0039
12 10037 Gemittelt 11/24/2025 13:31:07 3794800.5693 546960.7477 5080117.6650 0.0034 0.0018 0.0044
13 10044 Gemittelt 11/24/2025 16:26:33 3794752.6696 546958.3218 5080154.2579 0.0042 0.0013 0.0054
14 10026 Gemittelt 11/24/2025 14:56:51 3794753.8595 546827.4296 5080167.0938 0.0048 0.0021 0.0058
15 10001 Gemittelt 11/24/2025 11:46:05 3794901.5252 546745.5590 5080065.7672 0.0068 0.0042 0.0064
16 10002 Gemittelt 11/24/2025 13:31:18 3794866.9711 546729.5958 5080092.6364 0.0087 0.0025 0.0117
17 10028 Gemittelt 11/24/2025 16:26:51 3794889.7348 546908.7636 5080056.9381 0.0105 0.0026 0.0135

996
Daten/Niv_bereinigt.DAT.csv Normal file
View File

@@ -0,0 +1,996 @@
For M5|Adr 1|TO campusne.dat | | | |
For M5|Adr 2|TO Zugbeginn RVVR 4| | | |
For M5|Adr 3|KD1 812 4| | |Z 3.99900 m |
For M5|Adr 4|KD1 812 09:53:303 4|Lr 1.39706 m |E 11.549 m | |
For M5|Adr 5|KD1 10047 09:54:203 4|Lv 1.68890 m |E 12.750 m | |
For M5|Adr 6|KD1 10047 09:54:333 4|Lv 1.68890 m |E 12.749 m | |
For M5|Adr 7|KD1 812 09:55:033 4|Lr 1.39703 m |E 11.551 m | |
For M5|Adr 8|KD1 10047 09:55:03 4| | |Z 3.70714 m |
For M5|Adr 9|KD1 10047 09:59:533 4|Lr 1.65691 m |E 9.203 m | |
For M5|Adr 10|KD1 10046 10:00:303 4|Lv 1.71918 m |E 9.976 m | |
For M5|Adr 11|KD1 10046 10:00:433 4|Lv 1.71914 m |E 9.979 m | |
For M5|Adr 12|KD1 10047 10:01:083 4|Lr 1.65699 m |E 9.197 m | |
For M5|Adr 13|KD1 10046 10:01:08 4| | |Z 3.64493 m |
For M5|Adr 14|KD1 10046 10:04:453 4|Lr 1.64909 m |E 22.277 m | |
For M5|Adr 15|KD1 10045 10:05:313 4|Lv 1.46372 m |E 22.458 m | |
For M5|Adr 16|KD1 10045 10:05:423 4|Lv 1.46374 m |E 22.456 m | |
For M5|Adr 17|KD1 10046 10:06:053 4|Lr 1.64912 m |E 22.280 m | |
For M5|Adr 18|KD1 10045 10:06:05 4| | |Z 3.83031 m |
For M5|Adr 19|KD1 10045 10:12:053 4|Lr 1.66446 m |E 27.048 m | |
For M5|Adr 20|KD1 10034 10:12:413 4|Lv 1.64826 m |E 27.294 m | |
For M5|Adr 21|KD1 10034 10:12:553 4|Lv 1.64832 m |E 27.302 m | |
For M5|Adr 22|KD1 10045 10:13:153 4|Lr 1.66447 m |E 27.043 m | |
For M5|Adr 23|KD1 10034 10:13:15 4| | |Z 3.84648 m |
For M5|Adr 24|KD1 10034 10:18:393 4|Lr 1.44965 m |E 19.268 m | |
For M5|Adr 25|KD1 FH14 10:19:383 4|Lv 1.17715 m |E 21.291 m | |
For M5|Adr 26|KD1 FH14 10:19:513 4|Lv 1.17714 m |E 21.294 m | |
For M5|Adr 27|KD1 10034 10:20:183 4|Lr 1.44965 m |E 19.271 m | |
For M5|Adr 28|KD1 FH14 10:20:18 4| | |Z 4.11899 m |
For M5|Adr 29|KD1 FH14 10:27:123 4|Lr 1.31064 m |E 6.766 m | |
For M5|Adr 30|KD1 80001 10:27:563 4|Lv 1.38606 m |E 6.459 m | |
For M5|Adr 31|KD1 80001 10:28:073 4|Lv 1.38605 m |E 6.460 m | |
For M5|Adr 32|KD1 FH14 10:28:333 4|Lr 1.31062 m |E 6.764 m | |
For M5|Adr 33|KD1 80001 10:28:33 4| | |Z 4.04356 m |
For M5|Adr 34|KD1 80001 10:30:063 4|Lr 1.39870 m |E 6.429 m | |
For M5|Adr 35|KD1 FH11 10:31:393 4|Lv 1.37748 m |E 6.981 m | |
For M5|Adr 36|KD1 FH11 10:31:493 4|Lv 1.37749 m |E 6.980 m | |
For M5|Adr 37|KD1 80001 10:32:173 4|Lr 1.39874 m |E 6.427 m | |
For M5|Adr 38|KD1 FH11 10:32:17 4| | |Z 4.06480 m |
For M5|Adr 39|KD1 FH11 10:37:503 4|Lr 1.35705 m |E 7.697 m | |
For M5|Adr 40|KD1 10035 10:38:303 4|Lv 1.23483 m |E 7.710 m | |
For M5|Adr 41|KD1 10035 10:38:423 4|Lv 1.23483 m |E 7.710 m | |
For M5|Adr 42|KD1 FH11 10:39:123 4|Lr 1.35706 m |E 7.695 m | |
For M5|Adr 43|KD1 10035 10:39:12 4| | |Z 4.18702 m |
For M5|Adr 50|KD1 10035 10:50:433 4|Lr 1.95597 m |E 23.656 m | |
For M5|Adr 51|KD1 10029 10:51:233 4|Lv 2.48616 m |E 23.246 m | |
For M5|Adr 52|KD1 10029 10:51:353 4|Lv 2.48630 m |E 23.241 m | |
For M5|Adr 53|KD1 10035 10:52:063 4|Lr 1.95605 m |E 23.649 m | |
For M5|Adr 54|KD1 10029 10:52:06 4| | |Z 3.65680 m |
For M5|Adr 55|KD1 10029 10:57:193 4|Lr 1.67832 m |E 6.896 m | |
For M5|Adr 56|KD1 10030 10:57:423 4|Lv 1.64905 m |E 6.987 m | |
For M5|Adr 57|KD1 10030 10:57:523 4|Lv 1.64902 m |E 6.989 m | |
For M5|Adr 58|KD1 10029 10:58:153 4|Lr 1.67837 m |E 6.892 m | |
For M5|Adr 59|KD1 10030 10:58:15 4| | |Z 3.68611 m |
For M5|Adr 60|KD1 10030 11:01:423 4|Lr 1.50486 m |E 19.416 m | |
For M5|Adr 61|KD1 10031 11:02:143 4|Lv 1.21639 m |E 19.867 m | |
For M5|Adr 62|KD1 10031 11:02:233 4|Lv 1.21638 m |E 19.868 m | |
For M5|Adr 63|KD1 10030 11:02:503 4|Lr 1.50478 m |E 19.416 m | |
For M5|Adr 64|KD1 10031 11:02:50 4| | |Z 3.97455 m |
For M5|Adr 83|KD1 10031 11:14:183 4|Lr 1.63655 m |E 23.104 m | |
For M5|Adr 84|KD1 10017 11:14:403 4|Lv 1.52782 m |E 22.926 m | |
For M5|Adr 85|KD1 10017 11:14:503 4|Lv 1.52774 m |E 22.928 m | |
For M5|Adr 86|KD1 10031 11:15:153 4|Lr 1.63651 m |E 23.104 m | |
For M5|Adr 87|KD1 10017 11:15:15 4| | |Z 4.08330 m |
For M5|Adr 88|KD1 10017 11:22:123 4|Lr 1.47830 m |E 15.439 m | |
For M5|Adr 89|KD1 10013 11:22:393 4|Lv 1.64947 m |E 15.415 m | |
For M5|Adr 90|KD1 10013 11:22:493 4|Lv 1.64949 m |E 15.414 m | |
For M5|Adr 91|KD1 10017 11:23:133 4|Lr 1.47831 m |E 15.436 m | |
For M5|Adr 92|KD1 10013 11:23:13 4| | |Z 3.91212 m |
For M5|Adr 93|KD1 10013 11:27:253 4|Lr 1.73178 m |E 10.896 m | |
For M5|Adr 94|KD1 10012 11:27:543 4|Lv 1.63664 m |E 11.066 m | |
For M5|Adr 95|KD1 10012 11:28:063 4|Lv 1.63662 m |E 11.066 m | |
For M5|Adr 99|KD1 10013 11:28:513 4|Lr 1.73186 m |E 10.894 m | |
For M5|Adr 100|KD1 10012 11:28:51 4| | |Z 4.00731 m |
For M5|Adr 101|KD1 10012 11:33:303 4|Lr 1.80824 m |E 9.890 m | |
For M5|Adr 102|KD1 10014 11:34:093 4|Lv 1.80461 m |E 9.826 m | |
For M5|Adr 103|KD1 10014 11:34:203 4|Lv 1.80462 m |E 9.827 m | |
For M5|Adr 104|KD1 10012 11:34:443 4|Lr 1.80825 m |E 9.894 m | |
For M5|Adr 105|KD1 10014 11:34:44 4| | |Z 4.01094 m |
For M5|Adr 106|KD1 10014 11:40:133 4|Lr 1.65135 m |E 9.470 m | |
For M5|Adr 107|KD1 10015 11:40:423 4|Lv 1.56393 m |E 9.446 m | |
For M5|Adr 108|KD1 10015 11:40:513 4|Lv 1.56390 m |E 9.445 m | |
For M5|Adr 109|KD1 10014 11:41:113 4|Lr 1.65136 m |E 9.469 m | |
For M5|Adr 110|KD1 10015 11:41:11 4| | |Z 4.09838 m |
For M5|Adr 111|KD1 10015 11:44:553 4|Lr 1.63558 m |E 8.618 m | |
For M5|Adr 112|KD1 10016 11:45:203 4|Lv 1.56235 m |E 8.348 m | |
For M5|Adr 113|KD1 10016 11:45:293 4|Lv 1.56236 m |E 8.348 m | |
For M5|Adr 114|KD1 10015 11:45:523 4|Lr 1.63568 m |E 8.615 m | |
For M5|Adr 115|KD1 10016 11:45:52 4| | |Z 4.17166 m |
For M5|Adr 116|KD1 10016 11:49:533 4|Lr 1.52939 m |E 15.124 m | |
For M5|Adr 117|KD1 10007 11:50:273 4|Lv 1.66752 m |E 15.190 m | |
For M5|Adr 118|KD1 10007 11:50:363 4|Lv 1.66757 m |E 15.189 m | |
For M5|Adr 119|KD1 10016 11:51:033 4|Lr 1.52940 m |E 15.123 m | |
For M5|Adr 120|KD1 10007 11:51:03 4| | |Z 4.03351 m |
For M5|Adr 121|KD1 10007 11:55:073 4|Lr 1.61183 m |E 2.055 m | |
For M5|Adr 122|KD1 FH13 11:56:333 4|Lv 1.09650 m |E 2.175 m | |
For M5|Adr 123|KD1 FH13 11:56:453 4|Lv 1.09651 m |E 2.174 m | |
For M5|Adr 124|KD1 10007 11:57:153 4|Lr 1.61180 m |E 2.055 m | |
For M5|Adr 125|KD1 FH13 11:57:15 4| | |Z 4.54882 m |
For M5|Adr 126|KD1 FH13 11:58:373 4|Lr 1.09649 m |E 2.175 m | |
For M5|Adr 127|KD1 10007 11:59:343 4|Lv 1.61180 m |E 2.054 m | |
For M5|Adr 128|KD1 10007 11:59:423 4|Lv 1.61181 m |E 2.053 m | |
For M5|Adr 129|KD1 FH13 12:00:133 4|Lr 1.09649 m |E 2.175 m | |
For M5|Adr 130|KD1 10007 12:00:13 4| | |Z 4.03350 m |
For M5|Adr 131|KD1 10007 12:02:323 4|Lr 1.63719 m |E 15.129 m | |
For M5|Adr 132|KD1 10016 12:03:073 4|Lv 1.49910 m |E 15.204 m | |
For M5|Adr 133|KD1 10016 12:03:173 4|Lv 1.49909 m |E 15.208 m | |
For M5|Adr 134|KD1 10007 12:04:023 4|Lr 1.63728 m |E 15.125 m | |
For M5|Adr 135|KD1 10016 12:04:02 4| | |Z 4.17164 m |
For M5|Adr 136|KD1 10016 12:07:103 4|Lr 1.52278 m |E 8.383 m | |
For M5|Adr 137|KD1 10015 12:08:033 4|Lv 1.59614 m |E 8.574 m | |
For M5|Adr 138|KD1 10015 12:08:123 4|Lv 1.59608 m |E 8.574 m | |
For M5|Adr 139|KD1 10016 12:08:373 4|Lr 1.52283 m |E 8.383 m | |
For M5|Adr 140|KD1 10015 12:08:37 4| | |Z 4.09834 m |
For M5|Adr 143|KD1 10015 12:10:393 4|Lr 1.57310 m |E 9.538 m | |
For M5|Adr 144|KD1 10014 12:11:063 4|Lv 1.66049 m |E 9.372 m | |
For M5|Adr 145|KD1 10014 12:11:163 4|Lv 1.66050 m |E 9.372 m | |
For M5|Adr 146|KD1 10015 12:11:393 4|Lr 1.57309 m |E 9.538 m | |
For M5|Adr 147|KD1 10014 12:11:39 4| | |Z 4.01094 m |
For M5|Adr 148|KD1 10014 12:14:493 4|Lr 1.75416 m |E 9.886 m | |
For M5|Adr 149|KD1 10012 12:15:223 4|Lv 1.75767 m |E 9.820 m | |
For M5|Adr 150|KD1 10012 12:15:313 4|Lv 1.75767 m |E 9.817 m | |
For M5|Adr 151|KD1 10014 12:16:023 4|Lr 1.75414 m |E 9.888 m | |
For M5|Adr 152|KD1 10012 12:16:02 4| | |Z 4.00742 m |
For M5|Adr 153|KD1 10012 12:18:173 4|Lr 1.57379 m |E 10.939 m | |
For M5|Adr 154|KD1 10013 12:18:463 4|Lv 1.66894 m |E 11.020 m | |
For M5|Adr 155|KD1 10013 12:18:553 4|Lv 1.66899 m |E 11.018 m | |
For M5|Adr 156|KD1 10012 12:19:203 4|Lr 1.57377 m |E 10.942 m | |
For M5|Adr 157|KD1 10013 12:19:20 4| | |Z 3.91223 m |
For M5|Adr 158|KD1 10013 12:21:593 4|Lr 1.60035 m |E 15.475 m | |
For M5|Adr 159|KD1 10017 12:22:283 4|Lv 1.42909 m |E 15.360 m | |
For M5|Adr 160|KD1 10017 12:22:383 4|Lv 1.42915 m |E 15.358 m | |
For M5|Adr 161|KD1 10013 12:23:023 4|Lr 1.60037 m |E 15.474 m | |
For M5|Adr 162|KD1 10017 12:23:02 4| | |Z 4.08347 m |
For M5|Adr 163|KD1 10017 12:25:283 4|Lr 1.53530 m |E 22.899 m | |
For M5|Adr 164|KD1 10031 12:26:003 4|Lv 1.64401 m |E 23.127 m | |
For M5|Adr 165|KD1 10031 12:26:103 4|Lv 1.64400 m |E 23.132 m | |
For M5|Adr 166|KD1 10017 12:26:413 4|Lr 1.53537 m |E 22.892 m | |
For M5|Adr 167|KD1 10031 12:26:41 4| | |Z 3.97480 m |
For M5|Adr 168|KD1 10031 12:29:053 4|Lr 1.17075 m |E 19.935 m | |
For M5|Adr 169|KD1 10030 12:31:403 4|Lv 1.45912 m |E 19.344 m | |
For M5|Adr 170|KD1 10030 12:31:493 4|Lv 1.45914 m |E 19.343 m | |
For M5|Adr 171|KD1 10031 12:32:123 4|Lr 1.17090 m |E 19.923 m | |
For M5|Adr 172|KD1 10030 12:32:12 4| | |Z 3.68650 m |
For M5|Adr 173|KD1 10030 12:34:163 4|Lr 1.64673 m |E 6.987 m | |
For M5|Adr 174|KD1 10029 12:34:453 4|Lv 1.67597 m |E 6.897 m | |
For M5|Adr 175|KD1 10029 12:34:543 4|Lv 1.67596 m |E 6.898 m | |
For M5|Adr 176|KD1 10030 12:35:243 4|Lr 1.64669 m |E 6.989 m | |
For M5|Adr 177|KD1 10029 12:35:24 4| | |Z 3.65724 m |
For M5|Adr 178|KD1 10029 12:40:173 4|Lr 2.43659 m |E 23.323 m | |
For M5|Adr 179|KD1 10035 12:41:223 4|Lv 1.90619 m |E 23.600 m | |
For M5|Adr 180|KD1 10035 12:41:323 4|Lv 1.90625 m |E 23.596 m | |
For M5|Adr 181|KD1 10029 12:42:273 4|Lr 2.43658 m |E 23.334 m | |
For M5|Adr 182|KD1 10035 12:42:27 4| | |Z 4.18761 m |
For M5|Adr 183|KD1 10035 12:44:263 4|Lr 1.22866 m |E 7.709 m | |
For M5|Adr 184|KD1 FH11 12:45:123 4|Lv 1.35067 m |E 7.709 m | |
For M5|Adr 185|KD1 FH11 12:45:223 4|Lv 1.35067 m |E 7.708 m | |
For M5|Adr 186|KD1 10035 12:45:453 4|Lr 1.22870 m |E 7.708 m | |
For M5|Adr 187|KD1 FH11 12:45:45 4| | |Z 4.06562 m |
For M5|Adr 188|KD1 FH11 12:49:173 4|Lr 1.38479 m |E 6.608 m | |
For M5|Adr 189|KD1 80002 12:49:473 4|Lv 1.40789 m |E 6.861 m | |
For M5|Adr 190|KD1 80002 12:49:563 4|Lv 1.40790 m |E 6.861 m | |
For M5|Adr 191|KD1 FH11 12:50:223 4|Lr 1.38473 m |E 6.612 m | |
For M5|Adr 192|KD1 80002 12:50:22 4| | |Z 4.04248 m |
For M5|Adr 193|KD1 80002 12:50:563 4|Lr 1.40787 m |E 6.861 m | |
For M5|Adr 194|KD1 FH14 12:51:293 4|Lv 1.33063 m |E 6.482 m | |
For M5|Adr 195|KD1 FH14 12:51:383 4|Lv 1.33063 m |E 6.483 m | |
For M5|Adr 196|KD1 80002 12:52:033 4|Lr 1.40787 m |E 6.860 m | |
For M5|Adr 197|KD1 FH14 12:52:03 4| | |Z 4.11972 m |
For M5|Adr 198|KD1 FH14 12:55:383 4|Lr 1.15536 m |E 21.362 m | |
For M5|Adr 199|KD1 10034 12:56:173 4|Lv 1.42796 m |E 19.192 m | |
For M5|Adr 200|KD1 10034 12:56:283 4|Lv 1.42787 m |E 19.193 m | |
For M5|Adr 201|KD1 FH14 12:56:553 4|Lr 1.15532 m |E 21.365 m | |
For M5|Adr 202|KD1 10034 12:56:55 4| | |Z 3.84715 m |
For M5|Adr 203|KD1 10034 13:00:053 4|Lr 1.65228 m |E 27.229 m | |
For M5|Adr 204|KD1 10045 13:00:433 4|Lv 1.66849 m |E 27.097 m | |
For M5|Adr 205|KD1 10045 13:00:523 4|Lv 1.66855 m |E 27.099 m | |
For M5|Adr 206|KD1 10034 13:01:163 4|Lr 1.65218 m |E 27.223 m | |
For M5|Adr 207|KD1 10045 13:01:16 4| | |Z 3.83086 m |
For M5|Adr 208|KD1 10045 13:07:513 4|Lr 1.51518 m |E 24.208 m | |
For M5|Adr 209|KD1 10046 13:08:393 4|Lv 1.70048 m |E 20.544 m | |
For M5|Adr 210|KD1 10046 13:08:493 4|Lv 1.70049 m |E 20.547 m | |
For M5|Adr 211|KD1 10045 13:09:273 4|Lr 1.51526 m |E 24.198 m | |
For M5|Adr 212|KD1 10046 13:09:27 4| | |Z 3.64559 m |
For M5|Adr 213|KD1 10046 13:11:463 4|Lr 1.70298 m |E 9.796 m | |
For M5|Adr 214|KD1 10047 13:12:153 4|Lv 1.64111 m |E 9.353 m | |
For M5|Adr 215|KD1 10047 13:12:233 4|Lv 1.64098 m |E 9.359 m | |
For M5|Adr 216|KD1 10046 13:12:453 4|Lr 1.70302 m |E 9.800 m | |
For M5|Adr 217|KD1 10047 13:12:45 4| | |Z 3.70755 m |
For M5|Adr 218|KD1 10047 13:16:453 4|Lr 1.59226 m |E 12.622 m | |
For M5|Adr 219|KD1 812 13:17:123 4|Lv 1.30021 m |E 11.674 m | |
For M5|Adr 220|KD1 812 13:17:233 4|Lv 1.30017 m |E 11.678 m | |
For M5|Adr 221|KD1 10047 13:17:443 4|Lr 1.59221 m |E 12.623 m | |
For M5|Adr 222|KD1 812 13:17:44 4| | |Z 3.99959 m |
For M5|Adr 223|KD1 812 4|Sh 0.00059 m |dz -0.00059 m |Z 3.99900 m |
For M5|Adr 224|KD2 812 38 4|Sr 515.85 m |Sv 512.71 m |Z 3.99959 m |
For M5|Adr 225|TO Zugende 4| | | |
For M5|Adr 226|TO Zugbeginn RVVR 5| | | |
For M5|Adr 227|KD1 666 5| | |Z 3.89100 m |
For M5|Adr 228|KD1 666 14:37:163 5|Lr 1.39867 m |E 13.038 m | |
For M5|Adr 229|KD1 10054 14:37:573 5|Lv 1.47673 m |E 14.220 m | |
For M5|Adr 230|KD1 10054 14:38:053 5|Lv 1.47668 m |E 14.218 m | |
For M5|Adr 231|KD1 666 14:38:453 5|Lr 1.39866 m |E 13.045 m | |
For M5|Adr 232|KD1 10054 14:38:45 5| | |Z 3.81296 m |
For M5|Adr 233|KD1 10054 14:42:253 5|Lr 1.45840 m |E 28.371 m | |
For M5|Adr 234|KD1 90001 14:45:043 5|Lv 1.58418 m |E 28.252 m | |
For M5|Adr 235|KD1 90001 14:45:143 5|Lv 1.58404 m |E 28.259 m | |
For M5|Adr 236|KD1 10054 14:45:363 5|Lr 1.45849 m |E 28.366 m | |
For M5|Adr 237|KD1 90001 14:45:36 5| | |Z 3.68729 m |
For M5|Adr 238|KD1 90001 14:50:003 5|Lr 1.55312 m |E 11.759 m | |
For M5|Adr 239|KD1 10056 14:50:293 5|Lv 1.70349 m |E 12.042 m | |
For M5|Adr 240|KD1 10056 14:50:373 5|Lv 1.70349 m |E 12.043 m | |
For M5|Adr 241|KD1 90001 14:51:023 5|Lr 1.55307 m |E 11.760 m | |
For M5|Adr 242|KD1 10056 14:51:02 5| | |Z 3.53690 m |
For M5|Adr 243|KD1 10056 14:58:063 5|Lr 1.74315 m |E 17.451 m | |
For M5|Adr 244|KD1 90002 14:59:493 5|Lv 1.43533 m |E 17.098 m | |
For M5|Adr 245|KD1 90002 14:59:583 5|Lv 1.43532 m |E 17.100 m | |
For M5|Adr 246|KD1 10056 15:00:233 5|Lr 1.74313 m |E 17.455 m | |
For M5|Adr 247|KD1 90002 15:00:23 5| | |Z 3.84471 m |
For M5|Adr 248|KD1 90002 15:04:153 5|Lr 1.62973 m |E 19.670 m | |
For M5|Adr 249|KD1 10058 15:04:483 5|Lv 1.49413 m |E 19.740 m | |
For M5|Adr 250|KD1 10058 15:04:573 5|Lv 1.49416 m |E 19.739 m | |
For M5|Adr 251|KD1 90002 15:05:193 5|Lr 1.62970 m |E 19.674 m | |
For M5|Adr 252|KD1 10058 15:05:19 5| | |Z 3.98028 m |
For M5|Adr 253|KD1 10058 15:17:083 5|Lr 1.76359 m |E 19.431 m | |
For M5|Adr 254|KD1 90003 15:17:373 5|Lv 1.48142 m |E 19.399 m | |
For M5|Adr 255|KD1 90003 15:17:533 5|Lv 1.48141 m |E 19.405 m | |
For M5|Adr 256|KD1 10058 15:18:213 5|Lr 1.76359 m |E 19.432 m | |
For M5|Adr 257|KD1 90003 15:18:21 5| | |Z 4.26246 m |
For M5|Adr 258|KD1 90003 15:21:413 5|Lr 1.70182 m |E 28.153 m | |
For M5|Adr 259|KD1 90004 15:23:523 5|Lv 1.52352 m |E 28.112 m | |
For M5|Adr 260|KD1 90004 15:24:013 5|Lv 1.52362 m |E 28.114 m | |
For M5|Adr 261|KD1 90003 15:24:303 5|Lr 1.70185 m |E 28.154 m | |
For M5|Adr 262|KD1 90004 15:24:30 5| | |Z 4.44073 m |
For M5|Adr 263|KD1 90004 15:30:413 5|Lr 1.55902 m |E 24.249 m | |
For M5|Adr 264|KD1 10052 15:31:173 5|Lv 1.60091 m |E 24.643 m | |
For M5|Adr 265|KD1 10052 15:31:273 5|Lv 1.60083 m |E 24.645 m | |
For M5|Adr 266|KD1 90004 15:31:483 5|Lr 1.55909 m |E 24.246 m | |
For M5|Adr 267|KD1 10052 15:31:48 5| | |Z 4.39891 m |
For M5|Adr 268|KD1 10052 15:36:233 5|Lr 1.80901 m |E 19.945 m | |
For M5|Adr 269|KD1 90005 15:37:113 5|Lv 1.59310 m |E 17.113 m | |
For M5|Adr 270|KD1 90005 15:37:223 5|Lv 1.59308 m |E 17.114 m | |
For M5|Adr 271|KD1 10052 15:37:533 5|Lr 1.80903 m |E 19.938 m | |
For M5|Adr 272|KD1 90005 15:37:53 5| | |Z 4.61484 m |
For M5|Adr 273|KD1 90005 15:41:253 5|Lr 1.52989 m |E 14.156 m | |
For M5|Adr 274|KD1 10043 15:41:593 5|Lv 1.71581 m |E 14.289 m | |
For M5|Adr 275|KD1 10043 15:42:083 5|Lv 1.71582 m |E 14.293 m | |
For M5|Adr 276|KD1 90005 15:42:293 5|Lr 1.52998 m |E 14.156 m | |
For M5|Adr 277|KD1 10043 15:42:29 5| | |Z 4.42896 m |
For M5|Adr 278|KD1 10043 15:48:113 5|Lr 1.58481 m |E 23.024 m | |
For M5|Adr 279|KD1 90006 15:48:473 5|Lv 1.53904 m |E 22.992 m | |
For M5|Adr 280|KD1 90006 15:48:563 5|Lv 1.53903 m |E 22.993 m | |
For M5|Adr 281|KD1 10043 15:49:263 5|Lr 1.58478 m |E 23.023 m | |
For M5|Adr 282|KD1 90006 15:49:26 5| | |Z 4.47472 m |
For M5|Adr 283|KD1 90006 15:53:493 5|Lr 1.61106 m |E 23.101 m | |
For M5|Adr 284|KD1 10026 15:54:193 5|Lv 1.66814 m |E 22.955 m | |
For M5|Adr 285|KD1 10026 15:54:313 5|Lv 1.66810 m |E 22.963 m | |
For M5|Adr 286|KD1 90006 15:54:503 5|Lr 1.61105 m |E 23.102 m | |
For M5|Adr 287|KD1 10026 15:54:50 5| | |Z 4.41766 m |
For M5|Adr 288|KD1 10026 16:01:473 5|Lr 1.65763 m |E 14.994 m | |
For M5|Adr 289|KD1 90007 16:02:203 5|Lv 1.70698 m |E 15.001 m | |
For M5|Adr 290|KD1 90007 16:02:283 5|Lv 1.70700 m |E 15.004 m | |
For M5|Adr 291|KD1 10026 16:02:583 5|Lr 1.65762 m |E 14.993 m | |
For M5|Adr 292|KD1 90007 16:02:58 5| | |Z 4.36829 m |
For M5|Adr 293|KD1 90007 16:06:323 5|Lr 1.48945 m |E 15.112 m | |
For M5|Adr 294|KD1 10010 16:07:183 5|Lv 1.81492 m |E 14.908 m | |
For M5|Adr 295|KD1 10010 16:07:273 5|Lv 1.81492 m |E 14.909 m | |
For M5|Adr 296|KD1 90007 16:07:543 5|Lr 1.48952 m |E 15.104 m | |
For M5|Adr 297|KD1 10010 16:07:54 5| | |Z 4.04286 m |
For M5|Adr 298|KD1 10010 16:14:043 5|Lr 1.54850 m |E 30.713 m | |
For M5|Adr 299|KD1 10006 16:14:383 5|Lv 1.89019 m |E 30.148 m | |
For M5|Adr 300|KD1 10006 16:14:543 5|Lv 1.89018 m |E 30.147 m | |
For M5|Adr 301|KD1 10010 16:15:183 5|Lr 1.54849 m |E 30.712 m | |
For M5|Adr 302|KD1 10006 16:15:18 5| | |Z 3.70117 m |
For M5|Adr 303|KD1 10006 16:15:443 5|Lr 1.89023 m |E 30.145 m | |
For M5|Adr 304|KD1 10010 16:16:203 5|Lv 1.54850 m |E 30.715 m | |
For M5|Adr 305|KD1 10010 16:16:293 5|Lv 1.54853 m |E 30.710 m | |
For M5|Adr 306|KD1 10006 16:17:173 5|Lr 1.89020 m |E 30.146 m | |
For M5|Adr 307|KD1 10010 16:17:17 5| | |Z 4.04287 m |
For M5|Adr 308|KD1 10010 16:20:003 5|Lr 1.81252 m |E 14.967 m | |
For M5|Adr 309|KD1 90008 16:20:383 5|Lv 1.48511 m |E 15.065 m | |
For M5|Adr 310|KD1 90008 16:20:473 5|Lv 1.48511 m |E 15.064 m | |
For M5|Adr 311|KD1 10010 16:21:133 5|Lr 1.81251 m |E 14.967 m | |
For M5|Adr 312|KD1 90008 16:21:13 5| | |Z 4.37027 m |
For M5|Adr 313|KD1 90008 16:24:023 5|Lr 1.72972 m |E 14.969 m | |
For M5|Adr 314|KD1 10026 16:24:453 5|Lv 1.68214 m |E 14.993 m | |
For M5|Adr 315|KD1 10026 16:24:543 5|Lv 1.68214 m |E 14.993 m | |
For M5|Adr 316|KD1 90008 16:25:143 5|Lr 1.72973 m |E 14.969 m | |
For M5|Adr 317|KD1 10026 16:25:14 5| | |Z 4.41786 m |
For M5|Adr 318|KD1 10026 16:27:293 5|Lr 1.70960 m |E 22.912 m | |
For M5|Adr 319|KD1 90009 16:27:583 5|Lv 1.65195 m |E 23.128 m | |
For M5|Adr 320|KD1 90009 16:28:113 5|Lv 1.65194 m |E 23.130 m | |
For M5|Adr 321|KD1 10026 16:28:323 5|Lr 1.70955 m |E 22.912 m | |
For M5|Adr 322|KD1 90009 16:28:32 5| | |Z 4.47549 m |
For M5|Adr 323|KD1 90009 16:31:043 5|Lr 1.54039 m |E 22.927 m | |
For M5|Adr 324|KD1 10043 16:31:383 5|Lv 1.58675 m |E 23.104 m | |
For M5|Adr 325|KD1 10043 16:31:493 5|Lv 1.58680 m |E 23.103 m | |
For M5|Adr 326|KD1 90009 16:32:323 5|Lr 1.54042 m |E 22.929 m | |
For M5|Adr 327|KD1 10043 16:32:32 5| | |Z 4.42912 m |
For M5|Adr 328|KD1 10043 16:34:403 5|Lr 1.72117 m |E 14.338 m | |
For M5|Adr 329|KD1 90010 16:35:213 5|Lv 1.53519 m |E 14.077 m | |
For M5|Adr 330|KD1 90010 16:35:313 5|Lv 1.53520 m |E 14.075 m | |
For M5|Adr 331|KD1 10043 16:35:513 5|Lr 1.72118 m |E 14.335 m | |
For M5|Adr 332|KD1 90010 16:35:51 5| | |Z 4.61510 m |
For M5|Adr 333|KD1 90010 16:38:073 5|Lr 1.58466 m |E 17.097 m | |
For M5|Adr 334|KD1 10052 16:38:473 5|Lv 1.80056 m |E 19.995 m | |
For M5|Adr 335|KD1 10052 16:38:573 5|Lv 1.80055 m |E 19.994 m | |
For M5|Adr 336|KD1 90010 16:39:223 5|Lr 1.58471 m |E 17.092 m | |
For M5|Adr 337|KD1 10052 16:39:22 5| | |Z 4.39923 m |
For M5|Adr 338|KD1 10052 16:41:353 5|Lr 1.61506 m |E 24.763 m | |
For M5|Adr 339|KD1 90011 16:42:083 5|Lv 1.57441 m |E 24.137 m | |
For M5|Adr 340|KD1 90011 16:42:223 5|Lv 1.57435 m |E 24.141 m | |
For M5|Adr 344|KD1 10052 16:43:093 5|Lr 1.61509 m |E 24.763 m | |
For M5|Adr 345|KD1 90011 16:43:09 5| | |Z 4.43992 m |
For M5|Adr 346|KD1 90011 16:45:243 5|Lr 1.47995 m |E 27.999 m | |
For M5|Adr 347|KD1 90012 16:47:103 5|Lv 1.65760 m |E 28.242 m | |
For M5|Adr 348|KD1 90012 16:47:263 5|Lv 1.65761 m |E 28.244 m | |
For M5|Adr 349|KD1 90011 16:47:493 5|Lr 1.47989 m |E 28.005 m | |
For M5|Adr 350|KD1 90012 16:47:49 5| | |Z 4.26224 m |
For M5|Adr 351|KD1 90012 16:50:263 5|Lr 1.51218 m |E 19.328 m | |
For M5|Adr 352|KD1 10058 16:50:553 5|Lv 1.79366 m |E 19.510 m | |
For M5|Adr 353|KD1 10058 16:51:063 5|Lv 1.79364 m |E 19.511 m | |
For M5|Adr 354|KD1 90012 16:51:303 5|Lr 1.51214 m |E 19.333 m | |
For M5|Adr 355|KD1 10058 16:51:30 5| | |Z 3.98075 m |
For M5|Adr 356|KD1 10058 16:53:383 5|Lr 1.50891 m |E 19.790 m | |
For M5|Adr 357|KD1 90013 16:54:203 5|Lv 1.64471 m |E 19.613 m | |
For M5|Adr 358|KD1 90013 16:54:353 5|Lv 1.64470 m |E 19.614 m | |
For M5|Adr 359|KD1 10058 16:55:103 5|Lr 1.50889 m |E 19.789 m | |
For M5|Adr 360|KD1 90013 16:55:10 5| | |Z 3.84494 m |
For M5|Adr 361|KD1 90013 16:58:343 5|Lr 1.44948 m |E 17.096 m | |
For M5|Adr 362|KD1 10056 16:59:153 5|Lv 1.75707 m |E 17.451 m | |
For M5|Adr 363|KD1 10056 16:59:333 5|Lv 1.75706 m |E 17.449 m | |
For M5|Adr 364|KD1 90013 17:00:063 5|Lr 1.44951 m |E 17.095 m | |
For M5|Adr 365|KD1 10056 17:00:06 5| | |Z 3.53737 m |
For M5|Adr 366|KD1 10056 17:02:103 5|Lr 1.70377 m |E 12.043 m | |
For M5|Adr 367|KD1 90014 17:02:503 5|Lv 1.55344 m |E 11.776 m | |
For M5|Adr 368|KD1 90014 17:03:053 5|Lv 1.55343 m |E 11.777 m | |
For M5|Adr 369|KD1 10056 17:03:363 5|Lr 1.70376 m |E 12.039 m | |
For M5|Adr 370|KD1 90014 17:03:36 5| | |Z 3.68770 m |
For M5|Adr 371|KD1 90014 17:06:143 5|Lr 1.57937 m |E 28.592 m | |
For M5|Adr 372|KD1 10054 17:06:543 5|Lv 1.45366 m |E 28.099 m | |
For M5|Adr 373|KD1 10054 17:07:083 5|Lv 1.45366 m |E 28.098 m | |
For M5|Adr 374|KD1 90014 17:08:103 5|Lr 1.57943 m |E 28.610 m | |
For M5|Adr 375|KD1 10054 17:08:10 5| | |Z 3.81344 m |
For M5|Adr 376|KD1 10054 17:10:543 5|Lr 1.41573 m |E 14.338 m | |
For M5|Adr 377|KD1 666 17:11:283 5|Lv 1.33762 m |E 13.233 m | |
For M5|Adr 378|KD1 666 17:11:433 5|Lv 1.33760 m |E 13.233 m | |
For M5|Adr 379|KD1 10054 17:12:493 5|Lr 1.41572 m |E 14.351 m | |
For M5|Adr 380|KD1 666 17:12:49 5| | |Z 3.89156 m |
For M5|Adr 381|KD1 666 5|Sh 0.00056 m |dz -0.00056 m |Z 3.89100 m |
For M5|Adr 382|KD2 666 30 5|Sr 604.48 m |Sv 604.07 m |Z 3.89156 m |
For M5|Adr 383|TO Zugende 5| | | |
For M5|Adr 556|TO Zugbeginn RVVR 3| | | |
For M5|Adr 557|KD1 816 3| | |Z 3.99500 m |
For M5|Adr 558|KD1 816 13:55:263 3|Lr 1.25780 m |E 8.247 m | |
For M5|Adr 559|KD1 10048 13:56:053 3|Lv 1.35560 m |E 7.735 m | |
For M5|Adr 560|KD1 10048 13:56:153 3|Lv 1.35559 m |E 7.735 m | |
For M5|Adr 561|KD1 816 13:56:393 3|Lr 1.25781 m |E 8.250 m | |
For M5|Adr 562|KD1 10048 13:56:39 3| | |Z 3.89721 m |
For M5|Adr 565|KD1 10048 14:01:423 3|Lr 1.45841 m |E 25.048 m | |
For M5|Adr 566|KD1 812 14:02:073 3|Lv 1.35803 m |E 26.564 m | |
For M5|Adr 567|KD1 812 14:02:153 3|Lv 1.35806 m |E 26.564 m | |
For M5|Adr 568|KD1 10048 14:02:393 3|Lr 1.45843 m |E 25.043 m | |
For M5|Adr 569|KD1 812 14:02:39 3| | |Z 3.99758 m |
For M5|Adr 570|KD1 812 14:04:273 3|Lr 1.35796 m |E 26.564 m | |
For M5|Adr 571|KD1 FH3 14:05:353 3|Lv 0.64553 m |E 23.684 m | |
For M5|Adr 572|KD1 FH3 14:05:443 3|Lv 0.64561 m |E 23.683 m | |
For M5|Adr 573|KD1 812 14:06:053 3|Lr 1.35800 m |E 26.564 m | |
For M5|Adr 574|KD1 FH3 14:06:05 3| | |Z 4.70999 m |
For M5|Adr 575|KD1 FH3 14:09:593 3|Lr 0.85590 m |E 15.274 m | |
For M5|Adr 578|KD1 10049 14:10:523 3|Lv 1.46108 m |E 15.044 m | |
For M5|Adr 579|KD1 10049 14:11:003 3|Lv 1.46109 m |E 15.042 m | |
For M5|Adr 580|KD1 FH3 14:11:253 3|Lr 0.85595 m |E 15.273 m | |
For M5|Adr 581|KD1 10049 14:11:25 3| | |Z 4.10483 m |
For M5|Adr 584|KD1 10049 14:17:043 3|Lr 1.86477 m |E 25.296 m | |
For M5|Adr 585|KD1 10053 14:17:353 3|Lv 1.58367 m |E 23.503 m | |
For M5|Adr 586|KD1 10053 14:17:443 3|Lv 1.58367 m |E 23.505 m | |
For M5|Adr 587|KD1 10049 14:18:123 3|Lr 1.86480 m |E 25.295 m | |
For M5|Adr 588|KD1 10053 14:18:12 3| | |Z 4.38595 m |
For M5|Adr 595|KD1 10053 14:24:043 3|Lr 1.59302 m |E 11.937 m | |
For M5|Adr 596|KD1 10050 14:24:273 3|Lv 1.70498 m |E 11.859 m | |
For M5|Adr 597|KD1 10050 14:24:353 3|Lv 1.70499 m |E 11.860 m | |
For M5|Adr 598|KD1 10053 14:24:593 3|Lr 1.59302 m |E 11.938 m | |
For M5|Adr 599|KD1 10050 14:24:59 3| | |Z 4.27398 m |
For M5|Adr 600|KD1 10050 14:28:033 3|Lr 1.64664 m |E 11.995 m | |
For M5|Adr 601|KD1 10051 14:28:273 3|Lv 1.52512 m |E 11.920 m | |
For M5|Adr 602|KD1 10051 14:28:363 3|Lv 1.52508 m |E 11.921 m | |
For M5|Adr 603|KD1 10050 14:28:573 3|Lr 1.64667 m |E 11.994 m | |
For M5|Adr 604|KD1 10051 14:28:57 3| | |Z 4.39554 m |
For M5|Adr 605|KD1 10051 14:32:573 3|Lr 1.73789 m |E 4.658 m | |
For M5|Adr 606|KD1 FH4 14:33:433 3|Lv 1.40480 m |E 3.784 m | |
For M5|Adr 607|KD1 FH4 14:33:523 3|Lv 1.40481 m |E 3.784 m | |
For M5|Adr 608|KD1 10051 14:34:153 3|Lr 1.73788 m |E 4.659 m | |
For M5|Adr 609|KD1 FH4 14:34:15 3| | |Z 4.72862 m |
For M5|Adr 610|KD1 FH4 14:39:433 3|Lr 1.10682 m |E 12.093 m | |
For M5|Adr 611|KD1 70001 14:40:233 3|Lv 1.56911 m |E 12.437 m | |
For M5|Adr 612|KD1 70001 14:40:323 3|Lv 1.56912 m |E 12.435 m | |
For M5|Adr 613|KD1 FH4 14:40:503 3|Lr 1.10685 m |E 12.098 m | |
For M5|Adr 614|KD1 70001 14:40:50 3| | |Z 4.26634 m |
For M5|Adr 615|KD1 70001 14:43:363 3|Lr 1.55753 m |E 6.319 m | |
For M5|Adr 616|KD1 10040 14:44:093 3|Lv 1.54680 m |E 6.558 m | |
For M5|Adr 617|KD1 10040 14:44:173 3|Lv 1.54678 m |E 6.561 m | |
For M5|Adr 618|KD1 70001 14:44:413 3|Lr 1.55755 m |E 6.318 m | |
For M5|Adr 619|KD1 10040 14:44:41 3| | |Z 4.27709 m |
For M5|Adr 620|KD1 10040 14:47:303 3|Lr 1.55171 m |E 12.698 m | |
For M5|Adr 621|KD1 10037 14:47:543 3|Lv 1.72431 m |E 12.854 m | |
For M5|Adr 622|KD1 10037 14:48:033 3|Lv 1.72435 m |E 12.853 m | |
For M5|Adr 623|KD1 10040 14:48:343 3|Lr 1.55178 m |E 12.688 m | |
For M5|Adr 624|KD1 10037 14:48:34 3| | |Z 4.10450 m |
For M5|Adr 625|KD1 10037 14:56:543 3|Lr 1.64329 m |E 15.835 m | |
For M5|Adr 626|KD1 10038 14:57:193 3|Lv 1.54875 m |E 15.734 m | |
For M5|Adr 627|KD1 10038 14:57:293 3|Lv 1.54876 m |E 15.735 m | |
For M5|Adr 628|KD1 10037 14:57:503 3|Lr 1.64328 m |E 15.837 m | |
For M5|Adr 629|KD1 10038 14:57:50 3| | |Z 4.19904 m |
For M5|Adr 630|KD1 10038 15:00:273 3|Lr 1.71297 m |E 7.534 m | |
For M5|Adr 631|KD1 10039 15:00:513 3|Lv 1.70499 m |E 7.887 m | |
For M5|Adr 632|KD1 10039 15:01:013 3|Lv 1.70496 m |E 7.888 m | |
For M5|Adr 633|KD1 10038 15:01:223 3|Lr 1.71295 m |E 7.534 m | |
For M5|Adr 634|KD1 10039 15:01:22 3| | |Z 4.20702 m |
For M5|Adr 635|KD1 10039 15:03:313 3|Lr 1.48376 m |E 13.239 m | |
For M5|Adr 636|KD1 10032 15:03:523 3|Lv 1.85155 m |E 13.231 m | |
For M5|Adr 637|KD1 10032 15:04:013 3|Lv 1.85153 m |E 13.229 m | |
For M5|Adr 638|KD1 10039 15:04:263 3|Lr 1.48383 m |E 13.234 m | |
For M5|Adr 639|KD1 10032 15:04:26 3| | |Z 3.83927 m |
For M5|Adr 640|KD1 10032 15:07:263 3|Lr 1.79581 m |E 10.023 m | |
For M5|Adr 641|KD1 10031 15:07:503 3|Lv 1.66171 m |E 9.826 m | |
For M5|Adr 642|KD1 10031 15:08:003 3|Lv 1.66171 m |E 9.827 m | |
For M5|Adr 643|KD1 10032 15:08:183 3|Lr 1.79582 m |E 10.026 m | |
For M5|Adr 644|KD1 10031 15:08:18 3| | |Z 3.97338 m |
For M5|Adr 645|KD1 10031 15:11:563 3|Lr 1.60346 m |E 18.179 m | |
For M5|Adr 646|KD1 FH15 15:12:413 3|Lv 0.84368 m |E 17.968 m | |
For M5|Adr 647|KD1 FH15 15:12:503 3|Lv 0.84365 m |E 17.969 m | |
For M5|Adr 648|KD1 10031 15:13:123 3|Lr 1.60354 m |E 18.174 m | |
For M5|Adr 649|KD1 FH15 15:13:12 3| | |Z 4.73321 m |
For M5|Adr 650|KD1 FH15 15:16:153 3|Lr 0.96888 m |E 4.579 m | |
For M5|Adr 651|KD1 10033 15:16:553 3|Lv 1.73410 m |E 4.384 m | |
For M5|Adr 652|KD1 10033 15:17:033 3|Lv 1.73413 m |E 4.381 m | |
For M5|Adr 653|KD1 FH15 15:17:253 3|Lr 0.96889 m |E 4.578 m | |
For M5|Adr 654|KD1 10033 15:17:25 3| | |Z 3.96798 m |
For M5|Adr 655|KD1 10033 15:20:153 3|Lr 1.97628 m |E 16.343 m | |
For M5|Adr 656|KD1 10025 15:20:393 3|Lv 1.41616 m |E 16.532 m | |
For M5|Adr 657|KD1 10025 15:20:483 3|Lv 1.41616 m |E 16.533 m | |
For M5|Adr 658|KD1 10033 15:21:133 3|Lr 1.97632 m |E 16.343 m | |
For M5|Adr 659|KD1 10025 15:21:13 3| | |Z 4.52812 m |
For M5|Adr 660|KD1 10025 15:24:483 3|Lr 1.51866 m |E 7.463 m | |
For M5|Adr 661|KD1 10024 15:25:113 3|Lv 1.63060 m |E 7.494 m | |
For M5|Adr 662|KD1 10024 15:25:203 3|Lv 1.63060 m |E 7.494 m | |
For M5|Adr 663|KD1 10025 15:25:393 3|Lr 1.51866 m |E 7.464 m | |
For M5|Adr 664|KD1 10024 15:25:39 3| | |Z 4.41618 m |
For M5|Adr 665|KD1 10024 15:27:393 3|Lr 1.68731 m |E 6.433 m | |
For M5|Adr 666|KD1 10023 15:28:103 3|Lv 1.64811 m |E 6.511 m | |
For M5|Adr 667|KD1 10023 15:28:223 3|Lv 1.64807 m |E 6.513 m | |
For M5|Adr 668|KD1 10024 15:28:433 3|Lr 1.68727 m |E 6.435 m | |
For M5|Adr 669|KD1 10023 15:28:43 3| | |Z 4.45538 m |
For M5|Adr 670|KD1 10023 15:30:503 3|Lr 1.58885 m |E 3.514 m | |
For M5|Adr 671|KD1 10022 15:31:193 3|Lv 1.71195 m |E 3.641 m | |
For M5|Adr 672|KD1 10022 15:31:283 3|Lv 1.71198 m |E 3.639 m | |
For M5|Adr 673|KD1 10023 15:31:493 3|Lr 1.58889 m |E 3.513 m | |
For M5|Adr 674|KD1 10022 15:31:49 3| | |Z 4.33229 m |
For M5|Adr 675|KD1 10022 15:33:463 3|Lr 1.65679 m |E 4.275 m | |
For M5|Adr 676|KD1 10021 15:34:133 3|Lv 1.52393 m |E 4.456 m | |
For M5|Adr 677|KD1 10021 15:34:223 3|Lv 1.52392 m |E 4.455 m | |
For M5|Adr 678|KD1 10022 15:34:473 3|Lr 1.65682 m |E 4.273 m | |
For M5|Adr 679|KD1 10021 15:34:47 3| | |Z 4.46517 m |
For M5|Adr 680|KD1 10021 15:37:223 3|Lr 1.66620 m |E 14.393 m | |
For M5|Adr 681|KD1 10026 15:38:203 3|Lv 1.71514 m |E 14.263 m | |
For M5|Adr 682|KD1 10026 15:38:283 3|Lv 1.71514 m |E 14.263 m | |
For M5|Adr 683|KD1 10021 15:38:503 3|Lr 1.66623 m |E 14.385 m | |
For M5|Adr 684|KD1 10026 15:38:50 3| | |Z 4.41624 m |
For M5|Adr 685|KD1 10026 15:41:213 3|Lr 1.79969 m |E 18.495 m | |
For M5|Adr 686|KD1 10020 15:41:453 3|Lv 1.76451 m |E 18.383 m | |
For M5|Adr 687|KD1 10020 15:41:533 3|Lv 1.76453 m |E 18.385 m | |
For M5|Adr 688|KD1 10026 15:42:153 3|Lr 1.79972 m |E 18.492 m | |
For M5|Adr 689|KD1 10020 15:42:15 3| | |Z 4.45143 m |
For M5|Adr 690|KD1 10020 15:44:513 3|Lr 1.51582 m |E 11.212 m | |
For M5|Adr 691|KD1 10019 15:45:173 3|Lv 1.87733 m |E 10.815 m | |
For M5|Adr 692|KD1 10019 15:45:273 3|Lv 1.87736 m |E 10.812 m | |
For M5|Adr 693|KD1 10020 15:45:533 3|Lr 1.51581 m |E 11.212 m | |
For M5|Adr 694|KD1 10019 15:45:53 3| | |Z 4.08990 m |
For M5|Adr 695|KD1 10019 15:48:513 3|Lr 1.53263 m |E 15.514 m | |
For M5|Adr 696|KD1 10017 15:49:213 3|Lv 1.54067 m |E 15.456 m | |
For M5|Adr 697|KD1 10017 15:49:303 3|Lv 1.54070 m |E 15.457 m | |
For M5|Adr 698|KD1 10019 15:49:513 3|Lr 1.53262 m |E 15.512 m | |
For M5|Adr 699|KD1 10017 15:49:51 3| | |Z 4.08184 m |
For M5|Adr 700|KD1 10017 15:50:163 3|Lr 1.54066 m |E 15.458 m | |
For M5|Adr 701|KD1 10019 15:51:053 3|Lv 1.53264 m |E 15.515 m | |
For M5|Adr 702|KD1 10019 15:51:143 3|Lv 1.53268 m |E 15.514 m | |
For M5|Adr 703|KD1 10017 15:51:333 3|Lr 1.54066 m |E 15.457 m | |
For M5|Adr 704|KD1 10019 15:51:33 3| | |Z 4.08984 m |
For M5|Adr 705|KD1 10019 15:53:323 3|Lr 1.88995 m |E 10.824 m | |
For M5|Adr 706|KD1 10020 15:53:533 3|Lv 1.52838 m |E 11.213 m | |
For M5|Adr 707|KD1 10020 15:54:023 3|Lv 1.52839 m |E 11.212 m | |
For M5|Adr 708|KD1 10019 15:54:253 3|Lr 1.88999 m |E 10.822 m | |
For M5|Adr 709|KD1 10020 15:54:25 3| | |Z 4.45142 m |
For M5|Adr 710|KD1 10020 15:56:133 3|Lr 1.76907 m |E 18.577 m | |
For M5|Adr 711|KD1 10026 15:56:383 3|Lv 1.80417 m |E 18.318 m | |
For M5|Adr 712|KD1 10026 15:56:493 3|Lv 1.80424 m |E 18.315 m | |
For M5|Adr 713|KD1 10020 15:57:113 3|Lr 1.76908 m |E 18.574 m | |
For M5|Adr 714|KD1 10026 15:57:11 3| | |Z 4.41629 m |
For M5|Adr 715|KD1 10026 15:58:253 3|Lr 1.71887 m |E 14.264 m | |
For M5|Adr 716|KD1 10021 15:58:513 3|Lv 1.66996 m |E 14.394 m | |
For M5|Adr 717|KD1 10021 15:59:033 3|Lv 1.66996 m |E 14.392 m | |
For M5|Adr 718|KD1 10026 15:59:253 3|Lr 1.71886 m |E 14.263 m | |
For M5|Adr 719|KD1 10021 15:59:25 3| | |Z 4.46520 m |
For M5|Adr 720|KD1 10021 16:00:493 3|Lr 1.54285 m |E 4.447 m | |
For M5|Adr 721|KD1 10022 16:01:123 3|Lv 1.67564 m |E 4.286 m | |
For M5|Adr 722|KD1 10022 16:01:243 3|Lv 1.67567 m |E 4.284 m | |
For M5|Adr 723|KD1 10021 16:01:463 3|Lr 1.54286 m |E 4.446 m | |
For M5|Adr 724|KD1 10022 16:01:46 3| | |Z 4.33240 m |
For M5|Adr 725|KD1 10022 16:02:583 3|Lr 1.71046 m |E 3.462 m | |
For M5|Adr 726|KD1 10023 16:03:223 3|Lv 1.58736 m |E 3.703 m | |
For M5|Adr 727|KD1 10023 16:03:323 3|Lv 1.58737 m |E 3.702 m | |
For M5|Adr 728|KD1 10022 16:03:553 3|Lr 1.71050 m |E 3.457 m | |
For M5|Adr 729|KD1 10023 16:03:55 3| | |Z 4.45551 m |
For M5|Adr 730|KD1 10023 16:05:163 3|Lr 1.62331 m |E 6.454 m | |
For M5|Adr 731|KD1 10024 16:05:433 3|Lv 1.66248 m |E 6.490 m | |
For M5|Adr 732|KD1 10024 16:05:523 3|Lv 1.66257 m |E 6.484 m | |
For M5|Adr 733|KD1 10023 16:06:143 3|Lr 1.62325 m |E 6.459 m | |
For M5|Adr 734|KD1 10024 16:06:14 3| | |Z 4.41627 m |
For M5|Adr 735|KD1 10024 16:07:473 3|Lr 1.62462 m |E 7.412 m | |
For M5|Adr 736|KD1 10025 16:08:183 3|Lv 1.51265 m |E 7.540 m | |
For M5|Adr 737|KD1 10025 16:08:283 3|Lv 1.51267 m |E 7.539 m | |
For M5|Adr 738|KD1 10024 16:08:493 3|Lr 1.62461 m |E 7.413 m | |
For M5|Adr 739|KD1 10025 16:08:49 3| | |Z 4.52822 m |
For M5|Adr 740|KD1 10025 16:10:343 3|Lr 1.41321 m |E 16.544 m | |
For M5|Adr 741|KD1 10033 16:11:023 3|Lv 1.97332 m |E 16.338 m | |
For M5|Adr 742|KD1 10033 16:11:123 3|Lv 1.97337 m |E 16.333 m | |
For M5|Adr 743|KD1 10025 16:11:393 3|Lr 1.41318 m |E 16.543 m | |
For M5|Adr 744|KD1 10033 16:11:39 3| | |Z 3.96807 m |
For M5|Adr 745|KD1 10033 16:13:083 3|Lr 1.72530 m |E 4.385 m | |
For M5|Adr 746|KD1 FH15 16:13:463 3|Lv 0.96011 m |E 4.588 m | |
For M5|Adr 747|KD1 FH15 16:13:553 3|Lv 0.96012 m |E 4.588 m | |
For M5|Adr 748|KD1 10033 16:14:203 3|Lr 1.72528 m |E 4.388 m | |
For M5|Adr 749|KD1 FH15 16:14:20 3| | |Z 4.73325 m |
For M5|Adr 750|KD1 FH15 16:16:013 3|Lr 0.81462 m |E 18.051 m | |
For M5|Adr 751|KD1 10031 16:16:543 3|Lv 1.57445 m |E 18.098 m | |
For M5|Adr 752|KD1 10031 16:17:063 3|Lv 1.57446 m |E 18.099 m | |
For M5|Adr 753|KD1 FH15 16:17:293 3|Lr 0.81464 m |E 18.048 m | |
For M5|Adr 754|KD1 10031 16:17:29 3| | |Z 3.97342 m |
For M5|Adr 755|KD1 10031 16:19:023 3|Lr 1.70992 m |E 9.854 m | |
For M5|Adr 756|KD1 10032 16:19:343 3|Lv 1.84400 m |E 9.988 m | |
For M5|Adr 757|KD1 10032 16:19:493 3|Lv 1.84402 m |E 9.986 m | |
For M5|Adr 758|KD1 10031 16:20:163 3|Lr 1.70994 m |E 9.853 m | |
For M5|Adr 759|KD1 10032 16:20:16 3| | |Z 3.83934 m |
For M5|Adr 760|KD1 10032 16:22:213 3|Lr 1.86686 m |E 13.225 m | |
For M5|Adr 761|KD1 10039 16:22:523 3|Lv 1.49909 m |E 13.263 m | |
For M5|Adr 762|KD1 10039 16:23:073 3|Lv 1.49908 m |E 13.263 m | |
For M5|Adr 763|KD1 10032 16:23:393 3|Lr 1.86689 m |E 13.224 m | |
For M5|Adr 764|KD1 10039 16:23:39 3| | |Z 4.20713 m |
For M5|Adr 765|KD1 10039 16:25:173 3|Lr 1.69401 m |E 7.802 m | |
For M5|Adr 766|KD1 10038 16:25:463 3|Lv 1.70193 m |E 7.622 m | |
For M5|Adr 767|KD1 10038 16:26:023 3|Lv 1.70194 m |E 7.622 m | |
For M5|Adr 768|KD1 10039 16:26:283 3|Lr 1.69400 m |E 7.802 m | |
For M5|Adr 769|KD1 10038 16:26:28 3| | |Z 4.19920 m |
For M5|Adr 770|KD1 10038 16:28:073 3|Lr 1.55007 m |E 15.748 m | |
For M5|Adr 771|KD1 10037 16:28:313 3|Lv 1.64459 m |E 15.835 m | |
For M5|Adr 772|KD1 10037 16:28:413 3|Lv 1.64460 m |E 15.834 m | |
For M5|Adr 773|KD1 10038 16:29:043 3|Lr 1.55007 m |E 15.749 m | |
For M5|Adr 774|KD1 10037 16:29:04 3| | |Z 4.10468 m |
For M5|Adr 775|KD1 10037 16:31:083 3|Lr 1.67815 m |E 12.662 m | |
For M5|Adr 776|KD1 10040 16:31:313 3|Lv 1.50556 m |E 12.905 m | |
For M5|Adr 777|KD1 10040 16:31:413 3|Lv 1.50557 m |E 12.906 m | |
For M5|Adr 778|KD1 10037 16:32:023 3|Lr 1.67815 m |E 12.664 m | |
For M5|Adr 779|KD1 10040 16:32:02 3| | |Z 4.27726 m |
For M5|Adr 780|KD1 10040 16:33:223 3|Lr 1.54946 m |E 6.498 m | |
For M5|Adr 781|KD1 70002 16:33:523 3|Lv 1.55940 m |E 6.375 m | |
For M5|Adr 782|KD1 70002 16:34:033 3|Lv 1.55939 m |E 6.376 m | |
For M5|Adr 783|KD1 10040 16:34:273 3|Lr 1.54942 m |E 6.498 m | |
For M5|Adr 784|KD1 70002 16:34:27 3| | |Z 4.26731 m |
For M5|Adr 785|KD1 70002 16:35:563 3|Lr 1.59282 m |E 12.344 m | |
For M5|Adr 786|KD1 FH4 16:36:363 3|Lv 1.13142 m |E 12.188 m | |
For M5|Adr 787|KD1 FH4 16:36:523 3|Lv 1.13140 m |E 12.188 m | |
For M5|Adr 788|KD1 70002 16:37:183 3|Lr 1.59290 m |E 12.347 m | |
For M5|Adr 789|KD1 FH4 16:37:18 3| | |Z 4.72876 m |
For M5|Adr 790|KD1 FH4 16:39:563 3|Lr 1.49096 m |E 4.247 m | |
For M5|Adr 791|KD1 10051 16:41:483 3|Lv 1.82399 m |E 4.148 m | |
For M5|Adr 792|KD1 10051 16:42:043 3|Lv 1.82401 m |E 4.146 m | |
For M5|Adr 793|KD1 FH4 16:42:303 3|Lr 1.49098 m |E 4.248 m | |
For M5|Adr 794|KD1 10051 16:42:30 3| | |Z 4.39573 m |
For M5|Adr 795|KD1 10051 16:44:153 3|Lr 1.47922 m |E 11.936 m | |
For M5|Adr 796|KD1 10050 16:44:483 3|Lv 1.60061 m |E 11.975 m | |
For M5|Adr 797|KD1 10050 16:45:053 3|Lv 1.60057 m |E 11.977 m | |
For M5|Adr 798|KD1 10051 16:45:323 3|Lr 1.47919 m |E 11.937 m | |
For M5|Adr 799|KD1 10050 16:45:32 3| | |Z 4.27434 m |
For M5|Adr 800|KD1 10050 16:47:273 3|Lr 1.70650 m |E 11.350 m | |
For M5|Adr 801|KD1 10053 16:48:033 3|Lv 1.59473 m |E 12.410 m | |
For M5|Adr 802|KD1 10053 16:48:203 3|Lv 1.59475 m |E 12.408 m | |
For M5|Adr 803|KD1 10050 16:48:493 3|Lr 1.70655 m |E 11.349 m | |
For M5|Adr 804|KD1 10053 16:48:49 3| | |Z 4.38613 m |
For M5|Adr 805|KD1 10053 16:53:053 3|Lr 1.59530 m |E 24.190 m | |
For M5|Adr 806|KD1 10049 16:53:343 3|Lv 1.87627 m |E 24.624 m | |
For M5|Adr 807|KD1 10049 16:53:543 3|Lv 1.87630 m |E 24.626 m | |
For M5|Adr 808|KD1 10053 16:54:253 3|Lr 1.59533 m |E 24.185 m | |
For M5|Adr 809|KD1 10049 16:54:25 3| | |Z 4.10516 m |
For M5|Adr 810|KD1 10049 16:56:233 3|Lr 1.40780 m |E 14.745 m | |
For M5|Adr 811|KD1 FH3 16:57:093 3|Lv 0.80238 m |E 15.610 m | |
For M5|Adr 812|KD1 FH3 16:57:243 3|Lv 0.80236 m |E 15.609 m | |
For M5|Adr 813|KD1 10049 16:57:513 3|Lr 1.40777 m |E 14.741 m | |
For M5|Adr 814|KD1 FH3 16:57:51 3| | |Z 4.71057 m |
For M5|Adr 817|KD1 FH3 17:02:383 3|Lr 0.64466 m |E 23.862 m | |
For M5|Adr 818|KD1 812 17:03:163 3|Lv 1.35722 m |E 26.312 m | |
For M5|Adr 819|KD1 812 17:03:353 3|Lv 1.35712 m |E 26.316 m | |
For M5|Adr 820|KD1 FH3 17:04:123 3|Lr 0.64467 m |E 23.868 m | |
For M5|Adr 821|KD1 812 17:04:12 3| | |Z 3.99807 m |
For M5|Adr 822|KD1 812 17:04:553 3|Lr 1.35712 m |E 26.321 m | |
For M5|Adr 823|KD1 10048 17:05:353 3|Lv 1.45751 m |E 25.242 m | |
For M5|Adr 824|KD1 10048 17:05:503 3|Lv 1.45748 m |E 25.241 m | |
For M5|Adr 825|KD1 812 17:06:213 3|Lr 1.35717 m |E 26.307 m | |
For M5|Adr 826|KD1 10048 17:06:21 3| | |Z 3.89772 m |
For M5|Adr 827|KD1 10048 17:08:243 3|Lr 1.41657 m |E 7.786 m | |
For M5|Adr 828|KD1 816 17:09:343 3|Lv 1.31900 m |E 8.208 m | |
For M5|Adr 829|KD1 816 17:09:513 3|Lv 1.31900 m |E 8.209 m | |
For M5|Adr 830|KD1 10048 17:10:213 3|Lr 1.41659 m |E 7.776 m | |
For M5|Adr 831|KD1 816 17:10:21 3| | |Z 3.99530 m |
For M5|Adr 832|KD1 816 3|Sh 0.00030 m |dz -0.00030 m |Z 3.99500 m |
For M5|Adr 833|KD2 816 52 3|Sr 649.58 m |Sv 649.70 m |Z 3.99530 m |
For M5|Adr 834|TO Zugende 3| | | |
For M5|Adr 835|TO Zugbeginn RVVR 2| | | |
For M5|Adr 836|KD1 816 2| | |Z 3.99500 m |
For M5|Adr 837|KD1 816 14:30:403 2|Lr 1.43758 m |E 23.399 m | |
For M5|Adr 838|KD1 812 14:31:083 2|Lv 1.43473 m |E 21.489 m | |
For M5|Adr 839|KD1 812 14:31:173 2|Lv 1.43477 m |E 21.488 m | |
For M5|Adr 840|KD1 816 14:31:403 2|Lr 1.43768 m |E 23.400 m | |
For M5|Adr 841|KD1 812 14:31:40 2| | |Z 3.99788 m |
For M5|Adr 842|KD1 812 14:35:573 2|Lr 1.35778 m |E 4.039 m | |
For M5|Adr 843|KD1 60001 14:36:333 2|Lv 1.50396 m |E 4.427 m | |
For M5|Adr 844|KD1 60001 14:36:433 2|Lv 1.50396 m |E 4.427 m | |
For M5|Adr 845|KD1 812 14:37:023 2|Lr 1.35777 m |E 4.039 m | |
For M5|Adr 846|KD1 60001 14:37:02 2| | |Z 3.85169 m |
For M5|Adr 847|KD1 60001 14:40:263 2|Lr 1.54562 m |E 19.274 m | |
For M5|Adr 848|KD1 10045 14:40:493 2|Lv 1.56808 m |E 19.224 m | |
For M5|Adr 849|KD1 10045 14:40:583 2|Lv 1.56811 m |E 19.224 m | |
For M5|Adr 850|KD1 60001 14:41:183 2|Lr 1.54563 m |E 19.273 m | |
For M5|Adr 851|KD1 10045 14:41:18 2| | |Z 3.82922 m |
For M5|Adr 852|KD1 10045 14:46:233 2|Lr 1.67307 m |E 26.557 m | |
For M5|Adr 853|KD1 10034 14:46:573 2|Lv 1.65673 m |E 27.732 m | |
For M5|Adr 854|KD1 10034 14:47:073 2|Lv 1.65669 m |E 27.733 m | |
For M5|Adr 855|KD1 10045 14:47:253 2|Lr 1.67302 m |E 26.559 m | |
For M5|Adr 856|KD1 10034 14:47:25 2| | |Z 3.84556 m |
For M5|Adr 857|KD1 10034 14:51:143 2|Lr 1.61495 m |E 25.466 m | |
For M5|Adr 858|KD1 10035 14:51:423 2|Lv 1.27430 m |E 25.236 m | |
For M5|Adr 859|KD1 10035 14:51:513 2|Lv 1.27430 m |E 25.238 m | |
For M5|Adr 860|KD1 10034 14:52:113 2|Lr 1.61488 m |E 25.465 m | |
For M5|Adr 861|KD1 10035 14:52:11 2| | |Z 4.18617 m |
For M5|Adr 862|KD1 10035 14:56:273 2|Lr 1.80675 m |E 19.340 m | |
For M5|Adr 863|KD1 10036 14:56:453 2|Lv 1.88078 m |E 19.429 m | |
For M5|Adr 864|KD1 10036 14:56:543 2|Lv 1.88079 m |E 19.427 m | |
For M5|Adr 865|KD1 10035 14:57:143 2|Lr 1.80672 m |E 19.342 m | |
For M5|Adr 866|KD1 10036 14:57:14 2| | |Z 4.11213 m |
For M5|Adr 867|KD1 10036 15:05:313 2|Lr 1.56667 m |E 6.641 m | |
For M5|Adr 868|KD1 FH5 15:06:083 2|Lv 0.96341 m |E 10.417 m | |
For M5|Adr 869|KD1 FH5 15:06:173 2|Lv 0.96349 m |E 10.417 m | |
For M5|Adr 870|KD1 10036 15:06:403 2|Lr 1.56681 m |E 6.638 m | |
For M5|Adr 871|KD1 FH5 15:06:40 2| | |Z 4.71542 m |
For M5|Adr 872|KD1 FH5 15:07:103 2|Lr 0.96347 m |E 10.418 m | |
For M5|Adr 873|KD1 10036 15:07:393 2|Lv 1.56678 m |E 6.640 m | |
For M5|Adr 874|KD1 10036 15:07:483 2|Lv 1.56677 m |E 6.642 m | |
For M5|Adr 875|KD1 FH5 15:08:103 2|Lr 0.96350 m |E 10.417 m | |
For M5|Adr 876|KD1 10036 15:08:10 2| | |Z 4.11213 m |
For M5|Adr 877|KD1 10036 15:10:183 2|Lr 1.88504 m |E 19.391 m | |
For M5|Adr 878|KD1 10035 15:10:483 2|Lv 1.81094 m |E 19.359 m | |
For M5|Adr 879|KD1 10035 15:10:593 2|Lv 1.81094 m |E 19.359 m | |
For M5|Adr 880|KD1 10036 15:11:203 2|Lr 1.88498 m |E 19.392 m | |
For M5|Adr 881|KD1 10035 15:11:20 2| | |Z 4.18620 m |
For M5|Adr 882|KD1 10035 15:13:103 2|Lr 1.28679 m |E 25.062 m | |
For M5|Adr 883|KD1 10034 15:13:343 2|Lv 1.62729 m |E 25.615 m | |
For M5|Adr 884|KD1 10034 15:13:433 2|Lv 1.62732 m |E 25.609 m | |
For M5|Adr 885|KD1 10035 15:14:013 2|Lr 1.28680 m |E 25.061 m | |
For M5|Adr 886|KD1 10034 15:14:01 2| | |Z 3.84569 m |
For M5|Adr 887|KD1 10034 15:16:543 2|Lr 1.66493 m |E 28.745 m | |
For M5|Adr 888|KD1 10028 15:17:183 2|Lv 1.61072 m |E 28.420 m | |
For M5|Adr 889|KD1 10028 15:17:283 2|Lv 1.61079 m |E 28.422 m | |
For M5|Adr 890|KD1 10034 15:17:483 2|Lr 1.66498 m |E 28.741 m | |
For M5|Adr 891|KD1 10028 15:17:48 2| | |Z 3.89989 m |
For M5|Adr 892|KD1 10028 15:21:203 2|Lr 1.59959 m |E 19.000 m | |
For M5|Adr 893|KD1 60002 15:22:083 2|Lv 1.54667 m |E 18.962 m | |
For M5|Adr 894|KD1 60002 15:22:193 2|Lv 1.54668 m |E 18.961 m | |
For M5|Adr 895|KD1 10028 15:22:423 2|Lr 1.59967 m |E 19.003 m | |
For M5|Adr 896|KD1 60002 15:22:42 2| | |Z 3.95284 m |
For M5|Adr 897|KD1 60002 15:25:443 2|Lr 1.60831 m |E 18.850 m | |
For M5|Adr 898|KD1 10011 15:26:143 2|Lv 1.63237 m |E 19.103 m | |
For M5|Adr 899|KD1 10011 15:26:233 2|Lv 1.63235 m |E 19.104 m | |
For M5|Adr 900|KD1 60002 15:26:433 2|Lr 1.60829 m |E 18.852 m | |
For M5|Adr 901|KD1 10011 15:26:43 2| | |Z 3.92878 m |
For M5|Adr 902|KD1 10011 15:30:183 2|Lr 1.67286 m |E 21.967 m | |
For M5|Adr 903|KD1 60003 15:30:433 2|Lv 1.63170 m |E 22.073 m | |
For M5|Adr 904|KD1 60003 15:30:523 2|Lv 1.63172 m |E 22.072 m | |
For M5|Adr 905|KD1 10011 15:31:263 2|Lr 1.67286 m |E 21.965 m | |
For M5|Adr 906|KD1 60003 15:31:26 2| | |Z 3.96993 m |
For M5|Adr 907|KD1 60003 15:35:353 2|Lr 1.68025 m |E 21.958 m | |
For M5|Adr 908|KD1 10001 15:36:073 2|Lv 1.63896 m |E 21.883 m | |
For M5|Adr 909|KD1 10001 15:36:163 2|Lv 1.63897 m |E 21.881 m | |
For M5|Adr 910|KD1 60003 15:36:403 2|Lr 1.68030 m |E 21.961 m | |
For M5|Adr 911|KD1 10001 15:36:40 2| | |Z 4.01124 m |
For M5|Adr 912|KD1 10001 15:40:373 2|Lr 1.39478 m |E 19.268 m | |
For M5|Adr 913|KD1 60004 15:41:133 2|Lv 1.61995 m |E 18.718 m | |
For M5|Adr 914|KD1 60004 15:41:223 2|Lv 1.62017 m |E 18.717 m | |
For M5|Adr 915|KD1 10001 15:41:403 2|Lr 1.39479 m |E 19.268 m | |
For M5|Adr 916|KD1 60004 15:41:40 2| | |Z 3.78596 m |
For M5|Adr 917|KD1 60004 15:45:233 2|Lr 1.57515 m |E 19.137 m | |
For M5|Adr 918|KD1 10003 15:45:483 2|Lv 1.49858 m |E 19.431 m | |
For M5|Adr 919|KD1 10003 15:45:573 2|Lv 1.49859 m |E 19.431 m | |
For M5|Adr 920|KD1 60004 15:46:193 2|Lr 1.57509 m |E 19.139 m | |
For M5|Adr 921|KD1 10003 15:46:19 2| | |Z 3.86250 m |
For M5|Adr 922|KD1 10003 15:49:033 2|Lr 1.81482 m |E 13.285 m | |
For M5|Adr 923|KD1 10007 15:49:313 2|Lv 1.64518 m |E 12.877 m | |
For M5|Adr 924|KD1 10007 15:49:403 2|Lv 1.64518 m |E 12.878 m | |
For M5|Adr 925|KD1 10003 15:50:003 2|Lr 1.81488 m |E 13.284 m | |
For M5|Adr 926|KD1 10007 15:50:00 2| | |Z 4.03217 m |
For M5|Adr 927|KD1 10007 15:52:403 2|Lr 1.62453 m |E 30.297 m | |
For M5|Adr 928|KD1 10008 15:53:043 2|Lv 1.80896 m |E 30.375 m | |
For M5|Adr 929|KD1 10008 15:53:133 2|Lv 1.80894 m |E 30.376 m | |
For M5|Adr 930|KD1 10007 15:53:413 2|Lr 1.62452 m |E 30.255 m | |
For M5|Adr 931|KD1 10008 15:53:41 2| | |Z 3.84774 m |
For M5|Adr 932|KD1 10008 15:56:393 2|Lr 1.74534 m |E 13.415 m | |
For M5|Adr 933|KD1 10005 15:57:033 2|Lv 1.75588 m |E 13.286 m | |
For M5|Adr 934|KD1 10005 15:57:123 2|Lv 1.75590 m |E 13.286 m | |
For M5|Adr 935|KD1 10008 15:57:313 2|Lr 1.74539 m |E 13.416 m | |
For M5|Adr 936|KD1 10005 15:57:31 2| | |Z 3.83722 m |
For M5|Adr 937|KD1 10005 16:01:303 2|Lr 1.40465 m |E 20.041 m | |
For M5|Adr 938|KD1 10006 16:01:513 2|Lv 1.54197 m |E 19.066 m | |
For M5|Adr 939|KD1 10006 16:02:003 2|Lv 1.54198 m |E 19.066 m | |
For M5|Adr 940|KD1 10005 16:02:213 2|Lr 1.40455 m |E 20.044 m | |
For M5|Adr 941|KD1 10006 16:02:21 2| | |Z 3.69984 m |
For M5|Adr 942|KD1 10006 16:03:563 2|Lr 1.60546 m |E 23.103 m | |
For M5|Adr 943|KD1 10004 16:04:203 2|Lv 1.69468 m |E 24.031 m | |
For M5|Adr 944|KD1 10004 16:04:293 2|Lv 1.69467 m |E 24.034 m | |
For M5|Adr 945|KD1 10006 16:04:493 2|Lr 1.60547 m |E 23.099 m | |
For M5|Adr 946|KD1 10004 16:04:49 2| | |Z 3.61063 m |
For M5|Adr 947|KD1 10004 16:08:293 2|Lr 1.62333 m |E 20.862 m | |
For M5|Adr 948|KD1 60005 16:08:533 2|Lv 1.61400 m |E 21.223 m | |
For M5|Adr 949|KD1 60005 16:09:033 2|Lv 1.61401 m |E 21.226 m | |
For M5|Adr 950|KD1 10004 16:09:233 2|Lr 1.62337 m |E 20.868 m | |
For M5|Adr 951|KD1 60005 16:09:23 2| | |Z 3.61998 m |
For M5|Adr 952|KD1 60005 16:12:113 2|Lr 1.62803 m |E 19.769 m | |
For M5|Adr 953|KD1 10002 16:12:333 2|Lv 1.53886 m |E 19.690 m | |
For M5|Adr 954|KD1 10002 16:12:423 2|Lv 1.53887 m |E 19.688 m | |
For M5|Adr 955|KD1 60005 16:13:013 2|Lr 1.62803 m |E 19.768 m | |
For M5|Adr 956|KD1 10002 16:13:01 2| | |Z 3.70914 m |
For M5|Adr 957|KD1 10002 16:13:263 2|Lr 1.53886 m |E 19.674 m | |
For M5|Adr 958|KD1 60006 16:13:483 2|Lv 1.62806 m |E 19.768 m | |
For M5|Adr 959|KD1 60006 16:13:583 2|Lv 1.62801 m |E 19.770 m | |
For M5|Adr 960|KD1 10002 16:14:163 2|Lr 1.53885 m |E 19.675 m | |
For M5|Adr 961|KD1 60006 16:14:16 2| | |Z 3.61996 m |
For M5|Adr 962|KD1 60006 16:16:263 2|Lr 1.60384 m |E 20.993 m | |
For M5|Adr 963|KD1 10004 16:16:513 2|Lv 1.61318 m |E 21.085 m | |
For M5|Adr 964|KD1 10004 16:17:013 2|Lv 1.61318 m |E 21.084 m | |
For M5|Adr 965|KD1 60006 16:17:233 2|Lr 1.60386 m |E 20.994 m | |
For M5|Adr 966|KD1 10004 16:17:23 2| | |Z 3.61063 m |
For M5|Adr 967|KD1 10004 16:19:003 2|Lr 1.65949 m |E 24.008 m | |
For M5|Adr 968|KD1 10006 16:19:343 2|Lv 1.57013 m |E 23.123 m | |
For M5|Adr 969|KD1 10006 16:19:443 2|Lv 1.57013 m |E 23.124 m | |
For M5|Adr 970|KD1 10004 16:20:013 2|Lr 1.65952 m |E 23.998 m | |
For M5|Adr 971|KD1 10006 16:20:01 2| | |Z 3.70001 m |
For M5|Adr 972|KD1 10006 16:21:163 2|Lr 1.49590 m |E 18.993 m | |
For M5|Adr 973|KD1 10005 16:21:523 2|Lv 1.35852 m |E 20.150 m | |
For M5|Adr 974|KD1 10005 16:22:033 2|Lv 1.35849 m |E 20.150 m | |
For M5|Adr 975|KD1 10006 16:22:213 2|Lr 1.49595 m |E 18.996 m | |
For M5|Adr 976|KD1 10005 16:22:21 2| | |Z 3.83743 m |
For M5|Adr 977|KD1 10005 16:23:553 2|Lr 1.76288 m |E 13.359 m | |
For M5|Adr 978|KD1 10008 16:24:193 2|Lv 1.75238 m |E 13.351 m | |
For M5|Adr 979|KD1 10008 16:24:303 2|Lv 1.75236 m |E 13.351 m | |
For M5|Adr 980|KD1 10005 16:24:513 2|Lr 1.76288 m |E 13.359 m | |
For M5|Adr 981|KD1 10008 16:24:51 2| | |Z 3.84794 m |
For M5|Adr 982|KD1 10008 16:27:193 2|Lr 1.83398 m |E 30.253 m | |
For M5|Adr 983|KD1 10007 16:27:413 2|Lv 1.64958 m |E 30.375 m | |
For M5|Adr 984|KD1 10007 16:27:513 2|Lv 1.64959 m |E 30.377 m | |
For M5|Adr 985|KD1 10008 16:28:103 2|Lr 1.83397 m |E 30.251 m | |
For M5|Adr 986|KD1 10007 16:28:10 2| | |Z 4.03233 m |
For M5|Adr 987|KD1 10007 16:29:513 2|Lr 1.63925 m |E 13.080 m | |
For M5|Adr 988|KD1 10003 16:30:253 2|Lv 1.80901 m |E 13.038 m | |
For M5|Adr 989|KD1 10003 16:30:353 2|Lv 1.80904 m |E 13.034 m | |
For M5|Adr 990|KD1 10007 16:31:063 2|Lr 1.63930 m |E 13.082 m | |
For M5|Adr 991|KD1 10003 16:31:06 2| | |Z 3.86258 m |
For M5|Adr 992|KD1 10003 16:33:333 2|Lr 1.47515 m |E 19.257 m | |
For M5|Adr 993|KD1 60007 16:34:013 2|Lv 1.55199 m |E 19.323 m | |
For M5|Adr 994|KD1 60007 16:34:163 2|Lv 1.55202 m |E 19.323 m | |
For M5|Adr 995|KD1 10003 16:34:403 2|Lr 1.47515 m |E 19.259 m | |
For M5|Adr 996|KD1 60007 16:34:40 2| | |Z 3.78572 m |
For M5|Adr 997|KD1 60007 16:36:413 2|Lr 1.63027 m |E 18.873 m | |
For M5|Adr 998|KD1 10001 16:37:093 2|Lv 1.40449 m |E 19.130 m | |
For M5|Adr 999|KD1 10001 16:37:243 2|Lv 1.40450 m |E 19.130 m | |
For M5|Adr 1000|KD1 60007 16:37:513 2|Lr 1.63028 m |E 18.871 m | |
For M5|Adr 1001|KD1 10001 16:37:51 2| | |Z 4.01151 m |
For M5|Adr 1002|KD1 10001 16:39:533 2|Lr 1.65957 m |E 21.975 m | |
For M5|Adr 1003|KD1 60008 16:40:383 2|Lv 1.70161 m |E 21.868 m | |
For M5|Adr 1004|KD1 60008 16:41:003 2|Lv 1.70156 m |E 21.869 m | |
For M5|Adr 1005|KD1 10001 16:41:233 2|Lr 1.65960 m |E 21.974 m | |
For M5|Adr 1006|KD1 60008 16:41:23 2| | |Z 3.96951 m |
For M5|Adr 1007|KD1 60008 16:43:203 2|Lr 1.63618 m |E 22.050 m | |
For M5|Adr 1008|KD1 10011 16:43:483 2|Lv 1.67665 m |E 21.988 m | |
For M5|Adr 1009|KD1 10011 16:44:003 2|Lv 1.67668 m |E 21.989 m | |
For M5|Adr 1010|KD1 60008 16:44:233 2|Lr 1.63618 m |E 22.050 m | |
For M5|Adr 1011|KD1 10011 16:44:23 2| | |Z 3.92902 m |
For M5|Adr 1012|KD1 10011 16:46:093 2|Lr 1.63475 m |E 19.055 m | |
For M5|Adr 1013|KD1 60009 16:46:373 2|Lv 1.61073 m |E 18.874 m | |
For M5|Adr 1014|KD1 60009 16:46:533 2|Lv 1.61073 m |E 18.871 m | |
For M5|Adr 1015|KD1 10011 16:47:173 2|Lr 1.63475 m |E 19.053 m | |
For M5|Adr 1016|KD1 60009 16:47:17 2| | |Z 3.95304 m |
For M5|Adr 1017|KD1 60009 16:49:003 2|Lr 1.55716 m |E 19.033 m | |
For M5|Adr 1018|KD1 10028 16:49:383 2|Lv 1.61006 m |E 18.947 m | |
For M5|Adr 1019|KD1 10028 16:49:503 2|Lv 1.61010 m |E 18.946 m | |
For M5|Adr 1020|KD1 60009 16:50:113 2|Lr 1.55714 m |E 19.040 m | |
For M5|Adr 1021|KD1 10028 16:50:11 2| | |Z 3.90011 m |
For M5|Adr 1022|KD1 10028 16:51:563 2|Lr 1.57370 m |E 28.434 m | |
For M5|Adr 1023|KD1 10034 16:52:203 2|Lv 1.62804 m |E 28.757 m | |
For M5|Adr 1024|KD1 10034 16:52:323 2|Lv 1.62798 m |E 28.741 m | |
For M5|Adr 1025|KD1 10028 16:52:553 2|Lr 1.57369 m |E 28.415 m | |
For M5|Adr 1026|KD1 10034 16:52:55 2| | |Z 3.84579 m |
For M5|Adr 1027|KD1 10034 16:54:523 2|Lr 1.63172 m |E 27.842 m | |
For M5|Adr 1028|KD1 10045 16:55:403 2|Lv 1.64796 m |E 26.502 m | |
For M5|Adr 1029|KD1 10045 16:56:173 2|Lv 1.64808 m |E 26.502 m | |
For M5|Adr 1030|KD1 10034 16:56:483 2|Lr 1.63175 m |E 27.777 m | |
For M5|Adr 1031|KD1 10045 16:56:48 2| | |Z 3.82951 m |
For M5|Adr 1032|KD1 10045 16:58:373 2|Lr 1.53441 m |E 19.112 m | |
For M5|Adr 1033|KD1 60010 16:59:113 2|Lv 1.51027 m |E 19.388 m | |
For M5|Adr 1034|KD1 60010 16:59:273 2|Lv 1.51031 m |E 19.381 m | |
For M5|Adr 1035|KD1 10045 16:59:513 2|Lr 1.53444 m |E 19.110 m | |
For M5|Adr 1036|KD1 60010 16:59:51 2| | |Z 3.85364 m |
For M5|Adr 1037|KD1 60010 17:01:473 2|Lr 1.43941 m |E 4.448 m | |
For M5|Adr 1038|KD1 812 17:02:203 2|Lv 1.29479 m |E 4.019 m | |
For M5|Adr 1039|KD1 812 17:02:373 2|Lv 1.29478 m |E 4.019 m | |
For M5|Adr 1040|KD1 60010 17:03:173 2|Lr 1.43941 m |E 4.450 m | |
For M5|Adr 1041|KD1 812 17:03:17 2| | |Z 3.99827 m |
For M5|Adr 1042|KD1 812 17:05:363 2|Lr 1.43168 m |E 21.741 m | |
For M5|Adr 1043|KD1 816 17:06:183 2|Lv 1.43443 m |E 23.124 m | |
For M5|Adr 1044|KD1 816 17:06:343 2|Lv 1.43443 m |E 23.124 m | |
For M5|Adr 1045|KD1 812 17:07:043 2|Lr 1.43159 m |E 21.743 m | |
For M5|Adr 1046|KD1 816 17:07:04 2| | |Z 3.99547 m |
For M5|Adr 1047|KD1 816 2|Sh 0.00048 m |dz -0.00048 m |Z 3.99500 m |
For M5|Adr 1048|KD2 816 42 2|Sr 831.40 m |Sv 831.50 m |Z 3.99547 m |
For M5|Adr 1049|TO Zugende 2| | | |
For M5|Adr 1050|TO Zugbeginn RVVR 6| | | |
For M5|Adr 1051|KD1 666 6| | |Z 3.89100 m |
For M5|Adr 1052|KD1 666 09:40:063 6|Lr 1.44931 m |E 18.409 m | |
For M5|Adr 1053|KD1 10055 09:40:483 6|Lv 1.77704 m |E 18.557 m | |
For M5|Adr 1054|KD1 10055 09:41:003 6|Lv 1.77705 m |E 18.556 m | |
For M5|Adr 1055|KD1 666 09:41:233 6|Lr 1.44933 m |E 18.404 m | |
For M5|Adr 1056|KD1 10055 09:41:23 6| | |Z 3.56327 m |
For M5|Adr 1057|KD1 10055 09:44:543 6|Lr 1.78051 m |E 23.397 m | |
For M5|Adr 1058|KD1 10057 09:45:323 6|Lv 1.46532 m |E 23.457 m | |
For M5|Adr 1059|KD1 10057 09:45:423 6|Lv 1.46531 m |E 23.458 m | |
For M5|Adr 1060|KD1 10055 09:46:023 6|Lr 1.78056 m |E 23.394 m | |
For M5|Adr 1061|KD1 10057 09:46:02 6| | |Z 3.87849 m |
For M5|Adr 1062|KD1 10057 09:49:323 6|Lr 1.99642 m |E 19.914 m | |
For M5|Adr 1063|KD1 30001 09:50:063 6|Lv 1.65143 m |E 20.119 m | |
For M5|Adr 1064|KD1 30001 09:50:153 6|Lv 1.65136 m |E 20.122 m | |
For M5|Adr 1065|KD1 10057 09:50:403 6|Lr 1.99645 m |E 19.913 m | |
For M5|Adr 1066|KD1 30001 09:50:40 6| | |Z 4.22353 m |
For M5|Adr 1067|KD1 30001 09:54:053 6|Lr 1.63978 m |E 20.030 m | |
For M5|Adr 1068|KD1 10059 09:54:343 6|Lv 1.71977 m |E 20.092 m | |
For M5|Adr 1069|KD1 10059 09:54:463 6|Lv 1.71974 m |E 20.094 m | |
For M5|Adr 1070|KD1 30001 09:55:113 6|Lr 1.63989 m |E 20.026 m | |
For M5|Adr 1071|KD1 10059 09:55:11 6| | |Z 4.14361 m |
For M5|Adr 1072|KD1 10059 09:58:163 6|Lr 1.78165 m |E 19.164 m | |
For M5|Adr 1073|KD1 30002 09:59:533 6|Lv 1.51405 m |E 19.433 m | |
For M5|Adr 1074|KD1 30002 10:00:033 6|Lv 1.51404 m |E 19.434 m | |
For M5|Adr 1075|KD1 10059 10:00:313 6|Lr 1.78152 m |E 19.171 m | |
For M5|Adr 1076|KD1 30002 10:00:31 6| | |Z 4.41115 m |
For M5|Adr 1077|KD1 30002 10:03:513 6|Lr 1.60517 m |E 12.252 m | |
For M5|Adr 1078|KD1 10053 10:04:223 6|Lv 1.62944 m |E 12.461 m | |
For M5|Adr 1079|KD1 10053 10:04:303 6|Lv 1.62944 m |E 12.462 m | |
For M5|Adr 1080|KD1 30002 10:04:513 6|Lr 1.60518 m |E 12.253 m | |
For M5|Adr 1081|KD1 10053 10:04:51 6| | |Z 4.38689 m |
For M5|Adr 1082|KD1 10053 10:07:543 6|Lr 1.76780 m |E 29.779 m | |
For M5|Adr 1083|KD1 10044 10:08:393 6|Lv 1.49774 m |E 29.777 m | |
For M5|Adr 1084|KD1 10044 10:08:483 6|Lv 1.49776 m |E 29.775 m | |
For M5|Adr 1085|KD1 10053 10:09:093 6|Lr 1.76782 m |E 29.783 m | |
For M5|Adr 1086|KD1 10044 10:09:09 6| | |Z 4.65695 m |
For M5|Adr 1087|KD1 10044 10:13:023 6|Lr 1.42742 m |E 18.722 m | |
For M5|Adr 1088|KD1 10040 10:13:303 6|Lv 1.80634 m |E 16.387 m | |
For M5|Adr 1089|KD1 10040 10:13:403 6|Lv 1.80635 m |E 16.388 m | |
For M5|Adr 1090|KD1 10044 10:14:053 6|Lr 1.42740 m |E 18.714 m | |
For M5|Adr 1091|KD1 10040 10:14:05 6| | |Z 4.27801 m |
For M5|Adr 1092|KD1 10040 10:17:293 6|Lr 1.64722 m |E 16.416 m | |
For M5|Adr 1093|KD1 10041 10:17:513 6|Lv 1.32581 m |E 15.808 m | |
For M5|Adr 1094|KD1 10041 10:18:013 6|Lv 1.32585 m |E 15.805 m | |
For M5|Adr 1095|KD1 10040 10:18:343 6|Lr 1.64719 m |E 16.417 m | |
For M5|Adr 1096|KD1 10041 10:18:34 6| | |Z 4.59939 m |
For M5|Adr 1097|KD1 10041 10:22:583 6|Lr 1.62142 m |E 12.038 m | |
For M5|Adr 1098|KD1 10042 10:23:333 6|Lv 1.75351 m |E 13.648 m | |
For M5|Adr 1099|KD1 10042 10:23:423 6|Lv 1.75354 m |E 13.647 m | |
For M5|Adr 1100|KD1 10041 10:24:023 6|Lr 1.62146 m |E 12.031 m | |
For M5|Adr 1101|KD1 10042 10:24:02 6| | |Z 4.46730 m |
For M5|Adr 1102|KD1 10042 10:27:173 6|Lr 1.80021 m |E 4.666 m | |
For M5|Adr 1103|KD1 30003 10:28:483 6|Lv 1.71065 m |E 4.794 m | |
For M5|Adr 1104|KD1 30003 10:28:583 6|Lv 1.71065 m |E 4.795 m | |
For M5|Adr 1105|KD1 10042 10:29:213 6|Lr 1.80017 m |E 4.673 m | |
For M5|Adr 1106|KD1 30003 10:29:21 6| | |Z 4.55685 m |
For M5|Adr 1107|KD1 30003 10:34:423 6|Lr 1.38670 m |E 28.622 m | |
For M5|Adr 1108|KD1 10027 10:35:173 6|Lv 1.50025 m |E 29.351 m | |
For M5|Adr 1109|KD1 10027 10:35:253 6|Lv 1.50030 m |E 29.349 m | |
For M5|Adr 1110|KD1 30003 10:35:513 6|Lr 1.38675 m |E 28.618 m | |
For M5|Adr 1111|KD1 10027 10:35:51 6| | |Z 4.44329 m |
For M5|Adr 1112|KD1 10027 10:39:283 6|Lr 1.69754 m |E 19.008 m | |
For M5|Adr 1113|KD1 30004 10:39:523 6|Lv 1.52641 m |E 19.069 m | |
For M5|Adr 1114|KD1 30004 10:40:023 6|Lv 1.52641 m |E 19.068 m | |
For M5|Adr 1115|KD1 10027 10:40:243 6|Lr 1.69754 m |E 19.005 m | |
For M5|Adr 1116|KD1 30004 10:40:24 6| | |Z 4.61442 m |
For M5|Adr 1117|KD1 30004 10:43:223 6|Lr 1.53664 m |E 19.451 m | |
For M5|Adr 1118|KD1 10018 10:43:473 6|Lv 1.77885 m |E 19.381 m | |
For M5|Adr 1119|KD1 10018 10:43:563 6|Lv 1.77887 m |E 19.381 m | |
For M5|Adr 1120|KD1 30004 10:44:183 6|Lr 1.53667 m |E 19.455 m | |
For M5|Adr 1121|KD1 10018 10:44:18 6| | |Z 4.37222 m |
For M5|Adr 1122|KD1 10018 10:48:463 6|Lr 1.51624 m |E 28.858 m | |
For M5|Adr 1123|KD1 10009 10:49:213 6|Lv 1.76559 m |E 29.011 m | |
For M5|Adr 1124|KD1 10009 10:49:323 6|Lv 1.76568 m |E 29.007 m | |
For M5|Adr 1125|KD1 10018 10:50:123 6|Lr 1.51630 m |E 28.874 m | |
For M5|Adr 1126|KD1 10009 10:50:12 6| | |Z 4.12286 m |
For M5|Adr 1127|KD1 10009 10:53:433 6|Lr 1.50785 m |E 15.483 m | |
For M5|Adr 1128|KD1 10006 10:54:163 6|Lv 1.92998 m |E 17.279 m | |
For M5|Adr 1129|KD1 10006 10:54:263 6|Lv 1.92997 m |E 17.281 m | |
For M5|Adr 1130|KD1 10009 10:54:503 6|Lr 1.50796 m |E 15.468 m | |
For M5|Adr 1131|KD1 10006 10:54:50 6| | |Z 3.70079 m |
For M5|Adr 1132|KD1 10006 10:55:133 6|Lr 1.92996 m |E 17.279 m | |
For M5|Adr 1133|KD1 10009 10:55:423 6|Lv 1.50798 m |E 15.468 m | |
For M5|Adr 1134|KD1 10009 10:55:523 6|Lv 1.50806 m |E 15.467 m | |
For M5|Adr 1135|KD1 10006 10:56:143 6|Lr 1.92999 m |E 17.275 m | |
For M5|Adr 1136|KD1 10009 10:56:14 6| | |Z 4.12274 m |
For M5|Adr 1137|KD1 10009 10:58:263 6|Lr 1.73986 m |E 28.805 m | |
For M5|Adr 1138|KD1 10018 10:58:543 6|Lv 1.49083 m |E 29.081 m | |
For M5|Adr 1139|KD1 10018 10:59:033 6|Lv 1.49078 m |E 29.082 m | |
For M5|Adr 1140|KD1 10009 10:59:283 6|Lr 1.73999 m |E 28.805 m | |
For M5|Adr 1141|KD1 10018 10:59:28 6| | |Z 4.37186 m |
For M5|Adr 1142|KD1 10018 11:01:403 6|Lr 1.79485 m |E 19.369 m | |
For M5|Adr 1143|KD1 30005 11:02:203 6|Lv 1.55327 m |E 19.464 m | |
For M5|Adr 1144|KD1 30005 11:02:323 6|Lv 1.55329 m |E 19.460 m | |
For M5|Adr 1145|KD1 10018 11:02:583 6|Lr 1.79484 m |E 19.365 m | |
For M5|Adr 1146|KD1 30005 11:02:58 6| | |Z 4.61343 m |
For M5|Adr 1147|KD1 30005 11:05:133 6|Lr 1.51209 m |E 19.018 m | |
For M5|Adr 1148|KD1 10027 11:05:443 6|Lv 1.68262 m |E 19.066 m | |
For M5|Adr 1149|KD1 10027 11:05:533 6|Lv 1.68267 m |E 19.065 m | |
For M5|Adr 1150|KD1 30005 11:06:163 6|Lr 1.51209 m |E 19.019 m | |
For M5|Adr 1151|KD1 10027 11:06:16 6| | |Z 4.44287 m |
For M5|Adr 1152|KD1 10027 11:08:083 6|Lr 1.48437 m |E 29.450 m | |
For M5|Adr 1153|KD1 30006 11:08:453 6|Lv 1.37039 m |E 28.524 m | |
For M5|Adr 1154|KD1 30006 11:08:543 6|Lv 1.37040 m |E 28.528 m | |
For M5|Adr 1155|KD1 10027 11:09:203 6|Lr 1.48442 m |E 29.415 m | |
For M5|Adr 1156|KD1 30006 11:09:20 6| | |Z 4.55687 m |
For M5|Adr 1157|KD1 30006 11:11:553 6|Lr 1.73019 m |E 4.625 m | |
For M5|Adr 1158|KD1 10042 11:12:293 6|Lv 1.82022 m |E 4.806 m | |
For M5|Adr 1159|KD1 10042 11:12:373 6|Lv 1.82019 m |E 4.808 m | |
For M5|Adr 1160|KD1 30006 11:13:013 6|Lr 1.73016 m |E 4.626 m | |
For M5|Adr 1161|KD1 10042 11:13:01 6| | |Z 4.46684 m |
For M5|Adr 1162|KD1 10042 11:15:033 6|Lr 1.79086 m |E 12.963 m | |
For M5|Adr 1163|KD1 10041 11:15:473 6|Lv 1.65881 m |E 12.773 m | |
For M5|Adr 1164|KD1 10041 11:15:553 6|Lv 1.65884 m |E 12.772 m | |
For M5|Adr 1165|KD1 10042 11:16:143 6|Lr 1.79084 m |E 12.961 m | |
For M5|Adr 1166|KD1 10041 11:16:14 6| | |Z 4.59887 m |
For M5|Adr 1167|KD1 10041 11:18:093 6|Lr 1.34751 m |E 15.795 m | |
For M5|Adr 1168|KD1 10040 11:18:353 6|Lv 1.66887 m |E 16.356 m | |
For M5|Adr 1169|KD1 10040 11:18:443 6|Lv 1.66885 m |E 16.358 m | |
For M5|Adr 1170|KD1 10041 11:19:043 6|Lr 1.34750 m |E 15.798 m | |
For M5|Adr 1171|KD1 10040 11:19:04 6| | |Z 4.27751 m |
For M5|Adr 1172|KD1 10040 11:20:573 6|Lr 1.86215 m |E 16.369 m | |
For M5|Adr 1173|KD1 10044 11:21:303 6|Lv 1.48325 m |E 18.739 m | |
For M5|Adr 1174|KD1 10044 11:21:383 6|Lv 1.48328 m |E 18.741 m | |
For M5|Adr 1175|KD1 10040 11:22:013 6|Lr 1.86215 m |E 16.367 m | |
For M5|Adr 1176|KD1 10044 11:22:01 6| | |Z 4.65640 m |
For M5|Adr 1177|KD1 10044 11:23:573 6|Lr 1.54273 m |E 29.939 m | |
For M5|Adr 1178|KD1 10053 11:24:253 6|Lv 1.81270 m |E 29.602 m | |
For M5|Adr 1179|KD1 10053 11:24:353 6|Lv 1.81271 m |E 29.606 m | |
For M5|Adr 1180|KD1 10044 11:24:543 6|Lr 1.54276 m |E 29.936 m | |
For M5|Adr 1181|KD1 10053 11:24:54 6| | |Z 4.38644 m |
For M5|Adr 1182|KD1 10053 11:27:173 6|Lr 1.65224 m |E 12.259 m | |
For M5|Adr 1183|KD1 30007 11:27:423 6|Lv 1.62743 m |E 12.460 m | |
For M5|Adr 1184|KD1 30007 11:27:523 6|Lv 1.62744 m |E 12.461 m | |
For M5|Adr 1185|KD1 10053 11:28:113 6|Lr 1.65224 m |E 12.257 m | |
For M5|Adr 1186|KD1 30007 11:28:11 6| | |Z 4.41124 m |
For M5|Adr 1189|KD1 30007 11:31:463 6|Lr 1.49070 m |E 20.101 m | |
For M5|Adr 1190|KD1 10059 11:32:133 6|Lv 1.75897 m |E 18.523 m | |
For M5|Adr 1191|KD1 10059 11:32:213 6|Lv 1.75892 m |E 18.522 m | |
For M5|Adr 1192|KD1 30007 11:32:423 6|Lr 1.49075 m |E 20.097 m | |
For M5|Adr 1193|KD1 10059 11:32:42 6| | |Z 4.14302 m |
For M5|Adr 1194|KD1 10059 11:34:423 6|Lr 1.66374 m |E 20.145 m | |
For M5|Adr 1195|KD1 30008 11:35:113 6|Lv 1.58386 m |E 19.960 m | |
For M5|Adr 1196|KD1 30008 11:35:193 6|Lv 1.58389 m |E 19.959 m | |
For M5|Adr 1197|KD1 10059 11:35:573 6|Lr 1.66375 m |E 20.143 m | |
For M5|Adr 1198|KD1 30008 11:35:57 6| | |Z 4.22289 m |
For M5|Adr 1199|KD1 30008 11:37:593 6|Lr 1.58922 m |E 20.268 m | |
For M5|Adr 1200|KD1 10057 11:38:363 6|Lv 1.93427 m |E 19.774 m | |
For M5|Adr 1201|KD1 10057 11:38:453 6|Lv 1.93425 m |E 19.773 m | |
For M5|Adr 1202|KD1 30008 11:39:123 6|Lr 1.58921 m |E 20.268 m | |
For M5|Adr 1203|KD1 10057 11:39:12 6| | |Z 3.87785 m |
For M5|Adr 1204|KD1 10057 11:41:073 6|Lr 1.46444 m |E 23.474 m | |
For M5|Adr 1205|KD1 10055 11:41:323 6|Lv 1.77959 m |E 23.416 m | |
For M5|Adr 1206|KD1 10055 11:41:403 6|Lv 1.77961 m |E 23.419 m | |
For M5|Adr 1207|KD1 10057 11:42:023 6|Lr 1.46448 m |E 23.481 m | |
For M5|Adr 1208|KD1 10055 11:42:02 6| | |Z 3.56271 m |
For M5|Adr 1209|KD1 10055 11:44:043 6|Lr 1.71700 m |E 18.545 m | |
For M5|Adr 1210|KD1 666 11:44:283 6|Lv 1.38939 m |E 18.452 m | |
For M5|Adr 1211|KD1 666 11:44:373 6|Lv 1.38939 m |E 18.451 m | |
For M5|Adr 1212|KD1 10055 11:44:583 6|Lr 1.71711 m |E 18.540 m | |
For M5|Adr 1213|KD1 666 11:44:58 6| | |Z 3.89037 m |
For M5|Adr 1214|KD1 666 6|Sh -0.00063 m |dz 0.00063 m |Z 3.89100 m |
For M5|Adr 1215|KD2 666 32 6|Sr 614.58 m |Sv 615.09 m |Z 3.89037 m |
For M5|Adr 1216|TO Zugende 6| | | |
1 For M5 Adr 1 TO campusne.dat
2 For M5 Adr 2 TO Zugbeginn RVVR 4
3 For M5 Adr 3 KD1 812 4 Z 3.99900 m
4 For M5 Adr 4 KD1 812 09:53:303 4 Lr 1.39706 m E 11.549 m
5 For M5 Adr 5 KD1 10047 09:54:203 4 Lv 1.68890 m E 12.750 m
6 For M5 Adr 6 KD1 10047 09:54:333 4 Lv 1.68890 m E 12.749 m
7 For M5 Adr 7 KD1 812 09:55:033 4 Lr 1.39703 m E 11.551 m
8 For M5 Adr 8 KD1 10047 09:55:03 4 Z 3.70714 m
9 For M5 Adr 9 KD1 10047 09:59:533 4 Lr 1.65691 m E 9.203 m
10 For M5 Adr 10 KD1 10046 10:00:303 4 Lv 1.71918 m E 9.976 m
11 For M5 Adr 11 KD1 10046 10:00:433 4 Lv 1.71914 m E 9.979 m
12 For M5 Adr 12 KD1 10047 10:01:083 4 Lr 1.65699 m E 9.197 m
13 For M5 Adr 13 KD1 10046 10:01:08 4 Z 3.64493 m
14 For M5 Adr 14 KD1 10046 10:04:453 4 Lr 1.64909 m E 22.277 m
15 For M5 Adr 15 KD1 10045 10:05:313 4 Lv 1.46372 m E 22.458 m
16 For M5 Adr 16 KD1 10045 10:05:423 4 Lv 1.46374 m E 22.456 m
17 For M5 Adr 17 KD1 10046 10:06:053 4 Lr 1.64912 m E 22.280 m
18 For M5 Adr 18 KD1 10045 10:06:05 4 Z 3.83031 m
19 For M5 Adr 19 KD1 10045 10:12:053 4 Lr 1.66446 m E 27.048 m
20 For M5 Adr 20 KD1 10034 10:12:413 4 Lv 1.64826 m E 27.294 m
21 For M5 Adr 21 KD1 10034 10:12:553 4 Lv 1.64832 m E 27.302 m
22 For M5 Adr 22 KD1 10045 10:13:153 4 Lr 1.66447 m E 27.043 m
23 For M5 Adr 23 KD1 10034 10:13:15 4 Z 3.84648 m
24 For M5 Adr 24 KD1 10034 10:18:393 4 Lr 1.44965 m E 19.268 m
25 For M5 Adr 25 KD1 FH14 10:19:383 4 Lv 1.17715 m E 21.291 m
26 For M5 Adr 26 KD1 FH14 10:19:513 4 Lv 1.17714 m E 21.294 m
27 For M5 Adr 27 KD1 10034 10:20:183 4 Lr 1.44965 m E 19.271 m
28 For M5 Adr 28 KD1 FH14 10:20:18 4 Z 4.11899 m
29 For M5 Adr 29 KD1 FH14 10:27:123 4 Lr 1.31064 m E 6.766 m
30 For M5 Adr 30 KD1 80001 10:27:563 4 Lv 1.38606 m E 6.459 m
31 For M5 Adr 31 KD1 80001 10:28:073 4 Lv 1.38605 m E 6.460 m
32 For M5 Adr 32 KD1 FH14 10:28:333 4 Lr 1.31062 m E 6.764 m
33 For M5 Adr 33 KD1 80001 10:28:33 4 Z 4.04356 m
34 For M5 Adr 34 KD1 80001 10:30:063 4 Lr 1.39870 m E 6.429 m
35 For M5 Adr 35 KD1 FH11 10:31:393 4 Lv 1.37748 m E 6.981 m
36 For M5 Adr 36 KD1 FH11 10:31:493 4 Lv 1.37749 m E 6.980 m
37 For M5 Adr 37 KD1 80001 10:32:173 4 Lr 1.39874 m E 6.427 m
38 For M5 Adr 38 KD1 FH11 10:32:17 4 Z 4.06480 m
39 For M5 Adr 39 KD1 FH11 10:37:503 4 Lr 1.35705 m E 7.697 m
40 For M5 Adr 40 KD1 10035 10:38:303 4 Lv 1.23483 m E 7.710 m
41 For M5 Adr 41 KD1 10035 10:38:423 4 Lv 1.23483 m E 7.710 m
42 For M5 Adr 42 KD1 FH11 10:39:123 4 Lr 1.35706 m E 7.695 m
43 For M5 Adr 43 KD1 10035 10:39:12 4 Z 4.18702 m
44 For M5 Adr 50 KD1 10035 10:50:433 4 Lr 1.95597 m E 23.656 m
45 For M5 Adr 51 KD1 10029 10:51:233 4 Lv 2.48616 m E 23.246 m
46 For M5 Adr 52 KD1 10029 10:51:353 4 Lv 2.48630 m E 23.241 m
47 For M5 Adr 53 KD1 10035 10:52:063 4 Lr 1.95605 m E 23.649 m
48 For M5 Adr 54 KD1 10029 10:52:06 4 Z 3.65680 m
49 For M5 Adr 55 KD1 10029 10:57:193 4 Lr 1.67832 m E 6.896 m
50 For M5 Adr 56 KD1 10030 10:57:423 4 Lv 1.64905 m E 6.987 m
51 For M5 Adr 57 KD1 10030 10:57:523 4 Lv 1.64902 m E 6.989 m
52 For M5 Adr 58 KD1 10029 10:58:153 4 Lr 1.67837 m E 6.892 m
53 For M5 Adr 59 KD1 10030 10:58:15 4 Z 3.68611 m
54 For M5 Adr 60 KD1 10030 11:01:423 4 Lr 1.50486 m E 19.416 m
55 For M5 Adr 61 KD1 10031 11:02:143 4 Lv 1.21639 m E 19.867 m
56 For M5 Adr 62 KD1 10031 11:02:233 4 Lv 1.21638 m E 19.868 m
57 For M5 Adr 63 KD1 10030 11:02:503 4 Lr 1.50478 m E 19.416 m
58 For M5 Adr 64 KD1 10031 11:02:50 4 Z 3.97455 m
59 For M5 Adr 83 KD1 10031 11:14:183 4 Lr 1.63655 m E 23.104 m
60 For M5 Adr 84 KD1 10017 11:14:403 4 Lv 1.52782 m E 22.926 m
61 For M5 Adr 85 KD1 10017 11:14:503 4 Lv 1.52774 m E 22.928 m
62 For M5 Adr 86 KD1 10031 11:15:153 4 Lr 1.63651 m E 23.104 m
63 For M5 Adr 87 KD1 10017 11:15:15 4 Z 4.08330 m
64 For M5 Adr 88 KD1 10017 11:22:123 4 Lr 1.47830 m E 15.439 m
65 For M5 Adr 89 KD1 10013 11:22:393 4 Lv 1.64947 m E 15.415 m
66 For M5 Adr 90 KD1 10013 11:22:493 4 Lv 1.64949 m E 15.414 m
67 For M5 Adr 91 KD1 10017 11:23:133 4 Lr 1.47831 m E 15.436 m
68 For M5 Adr 92 KD1 10013 11:23:13 4 Z 3.91212 m
69 For M5 Adr 93 KD1 10013 11:27:253 4 Lr 1.73178 m E 10.896 m
70 For M5 Adr 94 KD1 10012 11:27:543 4 Lv 1.63664 m E 11.066 m
71 For M5 Adr 95 KD1 10012 11:28:063 4 Lv 1.63662 m E 11.066 m
72 For M5 Adr 99 KD1 10013 11:28:513 4 Lr 1.73186 m E 10.894 m
73 For M5 Adr 100 KD1 10012 11:28:51 4 Z 4.00731 m
74 For M5 Adr 101 KD1 10012 11:33:303 4 Lr 1.80824 m E 9.890 m
75 For M5 Adr 102 KD1 10014 11:34:093 4 Lv 1.80461 m E 9.826 m
76 For M5 Adr 103 KD1 10014 11:34:203 4 Lv 1.80462 m E 9.827 m
77 For M5 Adr 104 KD1 10012 11:34:443 4 Lr 1.80825 m E 9.894 m
78 For M5 Adr 105 KD1 10014 11:34:44 4 Z 4.01094 m
79 For M5 Adr 106 KD1 10014 11:40:133 4 Lr 1.65135 m E 9.470 m
80 For M5 Adr 107 KD1 10015 11:40:423 4 Lv 1.56393 m E 9.446 m
81 For M5 Adr 108 KD1 10015 11:40:513 4 Lv 1.56390 m E 9.445 m
82 For M5 Adr 109 KD1 10014 11:41:113 4 Lr 1.65136 m E 9.469 m
83 For M5 Adr 110 KD1 10015 11:41:11 4 Z 4.09838 m
84 For M5 Adr 111 KD1 10015 11:44:553 4 Lr 1.63558 m E 8.618 m
85 For M5 Adr 112 KD1 10016 11:45:203 4 Lv 1.56235 m E 8.348 m
86 For M5 Adr 113 KD1 10016 11:45:293 4 Lv 1.56236 m E 8.348 m
87 For M5 Adr 114 KD1 10015 11:45:523 4 Lr 1.63568 m E 8.615 m
88 For M5 Adr 115 KD1 10016 11:45:52 4 Z 4.17166 m
89 For M5 Adr 116 KD1 10016 11:49:533 4 Lr 1.52939 m E 15.124 m
90 For M5 Adr 117 KD1 10007 11:50:273 4 Lv 1.66752 m E 15.190 m
91 For M5 Adr 118 KD1 10007 11:50:363 4 Lv 1.66757 m E 15.189 m
92 For M5 Adr 119 KD1 10016 11:51:033 4 Lr 1.52940 m E 15.123 m
93 For M5 Adr 120 KD1 10007 11:51:03 4 Z 4.03351 m
94 For M5 Adr 121 KD1 10007 11:55:073 4 Lr 1.61183 m E 2.055 m
95 For M5 Adr 122 KD1 FH13 11:56:333 4 Lv 1.09650 m E 2.175 m
96 For M5 Adr 123 KD1 FH13 11:56:453 4 Lv 1.09651 m E 2.174 m
97 For M5 Adr 124 KD1 10007 11:57:153 4 Lr 1.61180 m E 2.055 m
98 For M5 Adr 125 KD1 FH13 11:57:15 4 Z 4.54882 m
99 For M5 Adr 126 KD1 FH13 11:58:373 4 Lr 1.09649 m E 2.175 m
100 For M5 Adr 127 KD1 10007 11:59:343 4 Lv 1.61180 m E 2.054 m
101 For M5 Adr 128 KD1 10007 11:59:423 4 Lv 1.61181 m E 2.053 m
102 For M5 Adr 129 KD1 FH13 12:00:133 4 Lr 1.09649 m E 2.175 m
103 For M5 Adr 130 KD1 10007 12:00:13 4 Z 4.03350 m
104 For M5 Adr 131 KD1 10007 12:02:323 4 Lr 1.63719 m E 15.129 m
105 For M5 Adr 132 KD1 10016 12:03:073 4 Lv 1.49910 m E 15.204 m
106 For M5 Adr 133 KD1 10016 12:03:173 4 Lv 1.49909 m E 15.208 m
107 For M5 Adr 134 KD1 10007 12:04:023 4 Lr 1.63728 m E 15.125 m
108 For M5 Adr 135 KD1 10016 12:04:02 4 Z 4.17164 m
109 For M5 Adr 136 KD1 10016 12:07:103 4 Lr 1.52278 m E 8.383 m
110 For M5 Adr 137 KD1 10015 12:08:033 4 Lv 1.59614 m E 8.574 m
111 For M5 Adr 138 KD1 10015 12:08:123 4 Lv 1.59608 m E 8.574 m
112 For M5 Adr 139 KD1 10016 12:08:373 4 Lr 1.52283 m E 8.383 m
113 For M5 Adr 140 KD1 10015 12:08:37 4 Z 4.09834 m
114 For M5 Adr 143 KD1 10015 12:10:393 4 Lr 1.57310 m E 9.538 m
115 For M5 Adr 144 KD1 10014 12:11:063 4 Lv 1.66049 m E 9.372 m
116 For M5 Adr 145 KD1 10014 12:11:163 4 Lv 1.66050 m E 9.372 m
117 For M5 Adr 146 KD1 10015 12:11:393 4 Lr 1.57309 m E 9.538 m
118 For M5 Adr 147 KD1 10014 12:11:39 4 Z 4.01094 m
119 For M5 Adr 148 KD1 10014 12:14:493 4 Lr 1.75416 m E 9.886 m
120 For M5 Adr 149 KD1 10012 12:15:223 4 Lv 1.75767 m E 9.820 m
121 For M5 Adr 150 KD1 10012 12:15:313 4 Lv 1.75767 m E 9.817 m
122 For M5 Adr 151 KD1 10014 12:16:023 4 Lr 1.75414 m E 9.888 m
123 For M5 Adr 152 KD1 10012 12:16:02 4 Z 4.00742 m
124 For M5 Adr 153 KD1 10012 12:18:173 4 Lr 1.57379 m E 10.939 m
125 For M5 Adr 154 KD1 10013 12:18:463 4 Lv 1.66894 m E 11.020 m
126 For M5 Adr 155 KD1 10013 12:18:553 4 Lv 1.66899 m E 11.018 m
127 For M5 Adr 156 KD1 10012 12:19:203 4 Lr 1.57377 m E 10.942 m
128 For M5 Adr 157 KD1 10013 12:19:20 4 Z 3.91223 m
129 For M5 Adr 158 KD1 10013 12:21:593 4 Lr 1.60035 m E 15.475 m
130 For M5 Adr 159 KD1 10017 12:22:283 4 Lv 1.42909 m E 15.360 m
131 For M5 Adr 160 KD1 10017 12:22:383 4 Lv 1.42915 m E 15.358 m
132 For M5 Adr 161 KD1 10013 12:23:023 4 Lr 1.60037 m E 15.474 m
133 For M5 Adr 162 KD1 10017 12:23:02 4 Z 4.08347 m
134 For M5 Adr 163 KD1 10017 12:25:283 4 Lr 1.53530 m E 22.899 m
135 For M5 Adr 164 KD1 10031 12:26:003 4 Lv 1.64401 m E 23.127 m
136 For M5 Adr 165 KD1 10031 12:26:103 4 Lv 1.64400 m E 23.132 m
137 For M5 Adr 166 KD1 10017 12:26:413 4 Lr 1.53537 m E 22.892 m
138 For M5 Adr 167 KD1 10031 12:26:41 4 Z 3.97480 m
139 For M5 Adr 168 KD1 10031 12:29:053 4 Lr 1.17075 m E 19.935 m
140 For M5 Adr 169 KD1 10030 12:31:403 4 Lv 1.45912 m E 19.344 m
141 For M5 Adr 170 KD1 10030 12:31:493 4 Lv 1.45914 m E 19.343 m
142 For M5 Adr 171 KD1 10031 12:32:123 4 Lr 1.17090 m E 19.923 m
143 For M5 Adr 172 KD1 10030 12:32:12 4 Z 3.68650 m
144 For M5 Adr 173 KD1 10030 12:34:163 4 Lr 1.64673 m E 6.987 m
145 For M5 Adr 174 KD1 10029 12:34:453 4 Lv 1.67597 m E 6.897 m
146 For M5 Adr 175 KD1 10029 12:34:543 4 Lv 1.67596 m E 6.898 m
147 For M5 Adr 176 KD1 10030 12:35:243 4 Lr 1.64669 m E 6.989 m
148 For M5 Adr 177 KD1 10029 12:35:24 4 Z 3.65724 m
149 For M5 Adr 178 KD1 10029 12:40:173 4 Lr 2.43659 m E 23.323 m
150 For M5 Adr 179 KD1 10035 12:41:223 4 Lv 1.90619 m E 23.600 m
151 For M5 Adr 180 KD1 10035 12:41:323 4 Lv 1.90625 m E 23.596 m
152 For M5 Adr 181 KD1 10029 12:42:273 4 Lr 2.43658 m E 23.334 m
153 For M5 Adr 182 KD1 10035 12:42:27 4 Z 4.18761 m
154 For M5 Adr 183 KD1 10035 12:44:263 4 Lr 1.22866 m E 7.709 m
155 For M5 Adr 184 KD1 FH11 12:45:123 4 Lv 1.35067 m E 7.709 m
156 For M5 Adr 185 KD1 FH11 12:45:223 4 Lv 1.35067 m E 7.708 m
157 For M5 Adr 186 KD1 10035 12:45:453 4 Lr 1.22870 m E 7.708 m
158 For M5 Adr 187 KD1 FH11 12:45:45 4 Z 4.06562 m
159 For M5 Adr 188 KD1 FH11 12:49:173 4 Lr 1.38479 m E 6.608 m
160 For M5 Adr 189 KD1 80002 12:49:473 4 Lv 1.40789 m E 6.861 m
161 For M5 Adr 190 KD1 80002 12:49:563 4 Lv 1.40790 m E 6.861 m
162 For M5 Adr 191 KD1 FH11 12:50:223 4 Lr 1.38473 m E 6.612 m
163 For M5 Adr 192 KD1 80002 12:50:22 4 Z 4.04248 m
164 For M5 Adr 193 KD1 80002 12:50:563 4 Lr 1.40787 m E 6.861 m
165 For M5 Adr 194 KD1 FH14 12:51:293 4 Lv 1.33063 m E 6.482 m
166 For M5 Adr 195 KD1 FH14 12:51:383 4 Lv 1.33063 m E 6.483 m
167 For M5 Adr 196 KD1 80002 12:52:033 4 Lr 1.40787 m E 6.860 m
168 For M5 Adr 197 KD1 FH14 12:52:03 4 Z 4.11972 m
169 For M5 Adr 198 KD1 FH14 12:55:383 4 Lr 1.15536 m E 21.362 m
170 For M5 Adr 199 KD1 10034 12:56:173 4 Lv 1.42796 m E 19.192 m
171 For M5 Adr 200 KD1 10034 12:56:283 4 Lv 1.42787 m E 19.193 m
172 For M5 Adr 201 KD1 FH14 12:56:553 4 Lr 1.15532 m E 21.365 m
173 For M5 Adr 202 KD1 10034 12:56:55 4 Z 3.84715 m
174 For M5 Adr 203 KD1 10034 13:00:053 4 Lr 1.65228 m E 27.229 m
175 For M5 Adr 204 KD1 10045 13:00:433 4 Lv 1.66849 m E 27.097 m
176 For M5 Adr 205 KD1 10045 13:00:523 4 Lv 1.66855 m E 27.099 m
177 For M5 Adr 206 KD1 10034 13:01:163 4 Lr 1.65218 m E 27.223 m
178 For M5 Adr 207 KD1 10045 13:01:16 4 Z 3.83086 m
179 For M5 Adr 208 KD1 10045 13:07:513 4 Lr 1.51518 m E 24.208 m
180 For M5 Adr 209 KD1 10046 13:08:393 4 Lv 1.70048 m E 20.544 m
181 For M5 Adr 210 KD1 10046 13:08:493 4 Lv 1.70049 m E 20.547 m
182 For M5 Adr 211 KD1 10045 13:09:273 4 Lr 1.51526 m E 24.198 m
183 For M5 Adr 212 KD1 10046 13:09:27 4 Z 3.64559 m
184 For M5 Adr 213 KD1 10046 13:11:463 4 Lr 1.70298 m E 9.796 m
185 For M5 Adr 214 KD1 10047 13:12:153 4 Lv 1.64111 m E 9.353 m
186 For M5 Adr 215 KD1 10047 13:12:233 4 Lv 1.64098 m E 9.359 m
187 For M5 Adr 216 KD1 10046 13:12:453 4 Lr 1.70302 m E 9.800 m
188 For M5 Adr 217 KD1 10047 13:12:45 4 Z 3.70755 m
189 For M5 Adr 218 KD1 10047 13:16:453 4 Lr 1.59226 m E 12.622 m
190 For M5 Adr 219 KD1 812 13:17:123 4 Lv 1.30021 m E 11.674 m
191 For M5 Adr 220 KD1 812 13:17:233 4 Lv 1.30017 m E 11.678 m
192 For M5 Adr 221 KD1 10047 13:17:443 4 Lr 1.59221 m E 12.623 m
193 For M5 Adr 222 KD1 812 13:17:44 4 Z 3.99959 m
194 For M5 Adr 223 KD1 812 4 Sh 0.00059 m dz -0.00059 m Z 3.99900 m
195 For M5 Adr 224 KD2 812 38 4 Sr 515.85 m Sv 512.71 m Z 3.99959 m
196 For M5 Adr 225 TO Zugende 4
197 For M5 Adr 226 TO Zugbeginn RVVR 5
198 For M5 Adr 227 KD1 666 5 Z 3.89100 m
199 For M5 Adr 228 KD1 666 14:37:163 5 Lr 1.39867 m E 13.038 m
200 For M5 Adr 229 KD1 10054 14:37:573 5 Lv 1.47673 m E 14.220 m
201 For M5 Adr 230 KD1 10054 14:38:053 5 Lv 1.47668 m E 14.218 m
202 For M5 Adr 231 KD1 666 14:38:453 5 Lr 1.39866 m E 13.045 m
203 For M5 Adr 232 KD1 10054 14:38:45 5 Z 3.81296 m
204 For M5 Adr 233 KD1 10054 14:42:253 5 Lr 1.45840 m E 28.371 m
205 For M5 Adr 234 KD1 90001 14:45:043 5 Lv 1.58418 m E 28.252 m
206 For M5 Adr 235 KD1 90001 14:45:143 5 Lv 1.58404 m E 28.259 m
207 For M5 Adr 236 KD1 10054 14:45:363 5 Lr 1.45849 m E 28.366 m
208 For M5 Adr 237 KD1 90001 14:45:36 5 Z 3.68729 m
209 For M5 Adr 238 KD1 90001 14:50:003 5 Lr 1.55312 m E 11.759 m
210 For M5 Adr 239 KD1 10056 14:50:293 5 Lv 1.70349 m E 12.042 m
211 For M5 Adr 240 KD1 10056 14:50:373 5 Lv 1.70349 m E 12.043 m
212 For M5 Adr 241 KD1 90001 14:51:023 5 Lr 1.55307 m E 11.760 m
213 For M5 Adr 242 KD1 10056 14:51:02 5 Z 3.53690 m
214 For M5 Adr 243 KD1 10056 14:58:063 5 Lr 1.74315 m E 17.451 m
215 For M5 Adr 244 KD1 90002 14:59:493 5 Lv 1.43533 m E 17.098 m
216 For M5 Adr 245 KD1 90002 14:59:583 5 Lv 1.43532 m E 17.100 m
217 For M5 Adr 246 KD1 10056 15:00:233 5 Lr 1.74313 m E 17.455 m
218 For M5 Adr 247 KD1 90002 15:00:23 5 Z 3.84471 m
219 For M5 Adr 248 KD1 90002 15:04:153 5 Lr 1.62973 m E 19.670 m
220 For M5 Adr 249 KD1 10058 15:04:483 5 Lv 1.49413 m E 19.740 m
221 For M5 Adr 250 KD1 10058 15:04:573 5 Lv 1.49416 m E 19.739 m
222 For M5 Adr 251 KD1 90002 15:05:193 5 Lr 1.62970 m E 19.674 m
223 For M5 Adr 252 KD1 10058 15:05:19 5 Z 3.98028 m
224 For M5 Adr 253 KD1 10058 15:17:083 5 Lr 1.76359 m E 19.431 m
225 For M5 Adr 254 KD1 90003 15:17:373 5 Lv 1.48142 m E 19.399 m
226 For M5 Adr 255 KD1 90003 15:17:533 5 Lv 1.48141 m E 19.405 m
227 For M5 Adr 256 KD1 10058 15:18:213 5 Lr 1.76359 m E 19.432 m
228 For M5 Adr 257 KD1 90003 15:18:21 5 Z 4.26246 m
229 For M5 Adr 258 KD1 90003 15:21:413 5 Lr 1.70182 m E 28.153 m
230 For M5 Adr 259 KD1 90004 15:23:523 5 Lv 1.52352 m E 28.112 m
231 For M5 Adr 260 KD1 90004 15:24:013 5 Lv 1.52362 m E 28.114 m
232 For M5 Adr 261 KD1 90003 15:24:303 5 Lr 1.70185 m E 28.154 m
233 For M5 Adr 262 KD1 90004 15:24:30 5 Z 4.44073 m
234 For M5 Adr 263 KD1 90004 15:30:413 5 Lr 1.55902 m E 24.249 m
235 For M5 Adr 264 KD1 10052 15:31:173 5 Lv 1.60091 m E 24.643 m
236 For M5 Adr 265 KD1 10052 15:31:273 5 Lv 1.60083 m E 24.645 m
237 For M5 Adr 266 KD1 90004 15:31:483 5 Lr 1.55909 m E 24.246 m
238 For M5 Adr 267 KD1 10052 15:31:48 5 Z 4.39891 m
239 For M5 Adr 268 KD1 10052 15:36:233 5 Lr 1.80901 m E 19.945 m
240 For M5 Adr 269 KD1 90005 15:37:113 5 Lv 1.59310 m E 17.113 m
241 For M5 Adr 270 KD1 90005 15:37:223 5 Lv 1.59308 m E 17.114 m
242 For M5 Adr 271 KD1 10052 15:37:533 5 Lr 1.80903 m E 19.938 m
243 For M5 Adr 272 KD1 90005 15:37:53 5 Z 4.61484 m
244 For M5 Adr 273 KD1 90005 15:41:253 5 Lr 1.52989 m E 14.156 m
245 For M5 Adr 274 KD1 10043 15:41:593 5 Lv 1.71581 m E 14.289 m
246 For M5 Adr 275 KD1 10043 15:42:083 5 Lv 1.71582 m E 14.293 m
247 For M5 Adr 276 KD1 90005 15:42:293 5 Lr 1.52998 m E 14.156 m
248 For M5 Adr 277 KD1 10043 15:42:29 5 Z 4.42896 m
249 For M5 Adr 278 KD1 10043 15:48:113 5 Lr 1.58481 m E 23.024 m
250 For M5 Adr 279 KD1 90006 15:48:473 5 Lv 1.53904 m E 22.992 m
251 For M5 Adr 280 KD1 90006 15:48:563 5 Lv 1.53903 m E 22.993 m
252 For M5 Adr 281 KD1 10043 15:49:263 5 Lr 1.58478 m E 23.023 m
253 For M5 Adr 282 KD1 90006 15:49:26 5 Z 4.47472 m
254 For M5 Adr 283 KD1 90006 15:53:493 5 Lr 1.61106 m E 23.101 m
255 For M5 Adr 284 KD1 10026 15:54:193 5 Lv 1.66814 m E 22.955 m
256 For M5 Adr 285 KD1 10026 15:54:313 5 Lv 1.66810 m E 22.963 m
257 For M5 Adr 286 KD1 90006 15:54:503 5 Lr 1.61105 m E 23.102 m
258 For M5 Adr 287 KD1 10026 15:54:50 5 Z 4.41766 m
259 For M5 Adr 288 KD1 10026 16:01:473 5 Lr 1.65763 m E 14.994 m
260 For M5 Adr 289 KD1 90007 16:02:203 5 Lv 1.70698 m E 15.001 m
261 For M5 Adr 290 KD1 90007 16:02:283 5 Lv 1.70700 m E 15.004 m
262 For M5 Adr 291 KD1 10026 16:02:583 5 Lr 1.65762 m E 14.993 m
263 For M5 Adr 292 KD1 90007 16:02:58 5 Z 4.36829 m
264 For M5 Adr 293 KD1 90007 16:06:323 5 Lr 1.48945 m E 15.112 m
265 For M5 Adr 294 KD1 10010 16:07:183 5 Lv 1.81492 m E 14.908 m
266 For M5 Adr 295 KD1 10010 16:07:273 5 Lv 1.81492 m E 14.909 m
267 For M5 Adr 296 KD1 90007 16:07:543 5 Lr 1.48952 m E 15.104 m
268 For M5 Adr 297 KD1 10010 16:07:54 5 Z 4.04286 m
269 For M5 Adr 298 KD1 10010 16:14:043 5 Lr 1.54850 m E 30.713 m
270 For M5 Adr 299 KD1 10006 16:14:383 5 Lv 1.89019 m E 30.148 m
271 For M5 Adr 300 KD1 10006 16:14:543 5 Lv 1.89018 m E 30.147 m
272 For M5 Adr 301 KD1 10010 16:15:183 5 Lr 1.54849 m E 30.712 m
273 For M5 Adr 302 KD1 10006 16:15:18 5 Z 3.70117 m
274 For M5 Adr 303 KD1 10006 16:15:443 5 Lr 1.89023 m E 30.145 m
275 For M5 Adr 304 KD1 10010 16:16:203 5 Lv 1.54850 m E 30.715 m
276 For M5 Adr 305 KD1 10010 16:16:293 5 Lv 1.54853 m E 30.710 m
277 For M5 Adr 306 KD1 10006 16:17:173 5 Lr 1.89020 m E 30.146 m
278 For M5 Adr 307 KD1 10010 16:17:17 5 Z 4.04287 m
279 For M5 Adr 308 KD1 10010 16:20:003 5 Lr 1.81252 m E 14.967 m
280 For M5 Adr 309 KD1 90008 16:20:383 5 Lv 1.48511 m E 15.065 m
281 For M5 Adr 310 KD1 90008 16:20:473 5 Lv 1.48511 m E 15.064 m
282 For M5 Adr 311 KD1 10010 16:21:133 5 Lr 1.81251 m E 14.967 m
283 For M5 Adr 312 KD1 90008 16:21:13 5 Z 4.37027 m
284 For M5 Adr 313 KD1 90008 16:24:023 5 Lr 1.72972 m E 14.969 m
285 For M5 Adr 314 KD1 10026 16:24:453 5 Lv 1.68214 m E 14.993 m
286 For M5 Adr 315 KD1 10026 16:24:543 5 Lv 1.68214 m E 14.993 m
287 For M5 Adr 316 KD1 90008 16:25:143 5 Lr 1.72973 m E 14.969 m
288 For M5 Adr 317 KD1 10026 16:25:14 5 Z 4.41786 m
289 For M5 Adr 318 KD1 10026 16:27:293 5 Lr 1.70960 m E 22.912 m
290 For M5 Adr 319 KD1 90009 16:27:583 5 Lv 1.65195 m E 23.128 m
291 For M5 Adr 320 KD1 90009 16:28:113 5 Lv 1.65194 m E 23.130 m
292 For M5 Adr 321 KD1 10026 16:28:323 5 Lr 1.70955 m E 22.912 m
293 For M5 Adr 322 KD1 90009 16:28:32 5 Z 4.47549 m
294 For M5 Adr 323 KD1 90009 16:31:043 5 Lr 1.54039 m E 22.927 m
295 For M5 Adr 324 KD1 10043 16:31:383 5 Lv 1.58675 m E 23.104 m
296 For M5 Adr 325 KD1 10043 16:31:493 5 Lv 1.58680 m E 23.103 m
297 For M5 Adr 326 KD1 90009 16:32:323 5 Lr 1.54042 m E 22.929 m
298 For M5 Adr 327 KD1 10043 16:32:32 5 Z 4.42912 m
299 For M5 Adr 328 KD1 10043 16:34:403 5 Lr 1.72117 m E 14.338 m
300 For M5 Adr 329 KD1 90010 16:35:213 5 Lv 1.53519 m E 14.077 m
301 For M5 Adr 330 KD1 90010 16:35:313 5 Lv 1.53520 m E 14.075 m
302 For M5 Adr 331 KD1 10043 16:35:513 5 Lr 1.72118 m E 14.335 m
303 For M5 Adr 332 KD1 90010 16:35:51 5 Z 4.61510 m
304 For M5 Adr 333 KD1 90010 16:38:073 5 Lr 1.58466 m E 17.097 m
305 For M5 Adr 334 KD1 10052 16:38:473 5 Lv 1.80056 m E 19.995 m
306 For M5 Adr 335 KD1 10052 16:38:573 5 Lv 1.80055 m E 19.994 m
307 For M5 Adr 336 KD1 90010 16:39:223 5 Lr 1.58471 m E 17.092 m
308 For M5 Adr 337 KD1 10052 16:39:22 5 Z 4.39923 m
309 For M5 Adr 338 KD1 10052 16:41:353 5 Lr 1.61506 m E 24.763 m
310 For M5 Adr 339 KD1 90011 16:42:083 5 Lv 1.57441 m E 24.137 m
311 For M5 Adr 340 KD1 90011 16:42:223 5 Lv 1.57435 m E 24.141 m
312 For M5 Adr 344 KD1 10052 16:43:093 5 Lr 1.61509 m E 24.763 m
313 For M5 Adr 345 KD1 90011 16:43:09 5 Z 4.43992 m
314 For M5 Adr 346 KD1 90011 16:45:243 5 Lr 1.47995 m E 27.999 m
315 For M5 Adr 347 KD1 90012 16:47:103 5 Lv 1.65760 m E 28.242 m
316 For M5 Adr 348 KD1 90012 16:47:263 5 Lv 1.65761 m E 28.244 m
317 For M5 Adr 349 KD1 90011 16:47:493 5 Lr 1.47989 m E 28.005 m
318 For M5 Adr 350 KD1 90012 16:47:49 5 Z 4.26224 m
319 For M5 Adr 351 KD1 90012 16:50:263 5 Lr 1.51218 m E 19.328 m
320 For M5 Adr 352 KD1 10058 16:50:553 5 Lv 1.79366 m E 19.510 m
321 For M5 Adr 353 KD1 10058 16:51:063 5 Lv 1.79364 m E 19.511 m
322 For M5 Adr 354 KD1 90012 16:51:303 5 Lr 1.51214 m E 19.333 m
323 For M5 Adr 355 KD1 10058 16:51:30 5 Z 3.98075 m
324 For M5 Adr 356 KD1 10058 16:53:383 5 Lr 1.50891 m E 19.790 m
325 For M5 Adr 357 KD1 90013 16:54:203 5 Lv 1.64471 m E 19.613 m
326 For M5 Adr 358 KD1 90013 16:54:353 5 Lv 1.64470 m E 19.614 m
327 For M5 Adr 359 KD1 10058 16:55:103 5 Lr 1.50889 m E 19.789 m
328 For M5 Adr 360 KD1 90013 16:55:10 5 Z 3.84494 m
329 For M5 Adr 361 KD1 90013 16:58:343 5 Lr 1.44948 m E 17.096 m
330 For M5 Adr 362 KD1 10056 16:59:153 5 Lv 1.75707 m E 17.451 m
331 For M5 Adr 363 KD1 10056 16:59:333 5 Lv 1.75706 m E 17.449 m
332 For M5 Adr 364 KD1 90013 17:00:063 5 Lr 1.44951 m E 17.095 m
333 For M5 Adr 365 KD1 10056 17:00:06 5 Z 3.53737 m
334 For M5 Adr 366 KD1 10056 17:02:103 5 Lr 1.70377 m E 12.043 m
335 For M5 Adr 367 KD1 90014 17:02:503 5 Lv 1.55344 m E 11.776 m
336 For M5 Adr 368 KD1 90014 17:03:053 5 Lv 1.55343 m E 11.777 m
337 For M5 Adr 369 KD1 10056 17:03:363 5 Lr 1.70376 m E 12.039 m
338 For M5 Adr 370 KD1 90014 17:03:36 5 Z 3.68770 m
339 For M5 Adr 371 KD1 90014 17:06:143 5 Lr 1.57937 m E 28.592 m
340 For M5 Adr 372 KD1 10054 17:06:543 5 Lv 1.45366 m E 28.099 m
341 For M5 Adr 373 KD1 10054 17:07:083 5 Lv 1.45366 m E 28.098 m
342 For M5 Adr 374 KD1 90014 17:08:103 5 Lr 1.57943 m E 28.610 m
343 For M5 Adr 375 KD1 10054 17:08:10 5 Z 3.81344 m
344 For M5 Adr 376 KD1 10054 17:10:543 5 Lr 1.41573 m E 14.338 m
345 For M5 Adr 377 KD1 666 17:11:283 5 Lv 1.33762 m E 13.233 m
346 For M5 Adr 378 KD1 666 17:11:433 5 Lv 1.33760 m E 13.233 m
347 For M5 Adr 379 KD1 10054 17:12:493 5 Lr 1.41572 m E 14.351 m
348 For M5 Adr 380 KD1 666 17:12:49 5 Z 3.89156 m
349 For M5 Adr 381 KD1 666 5 Sh 0.00056 m dz -0.00056 m Z 3.89100 m
350 For M5 Adr 382 KD2 666 30 5 Sr 604.48 m Sv 604.07 m Z 3.89156 m
351 For M5 Adr 383 TO Zugende 5
352 For M5 Adr 556 TO Zugbeginn RVVR 3
353 For M5 Adr 557 KD1 816 3 Z 3.99500 m
354 For M5 Adr 558 KD1 816 13:55:263 3 Lr 1.25780 m E 8.247 m
355 For M5 Adr 559 KD1 10048 13:56:053 3 Lv 1.35560 m E 7.735 m
356 For M5 Adr 560 KD1 10048 13:56:153 3 Lv 1.35559 m E 7.735 m
357 For M5 Adr 561 KD1 816 13:56:393 3 Lr 1.25781 m E 8.250 m
358 For M5 Adr 562 KD1 10048 13:56:39 3 Z 3.89721 m
359 For M5 Adr 565 KD1 10048 14:01:423 3 Lr 1.45841 m E 25.048 m
360 For M5 Adr 566 KD1 812 14:02:073 3 Lv 1.35803 m E 26.564 m
361 For M5 Adr 567 KD1 812 14:02:153 3 Lv 1.35806 m E 26.564 m
362 For M5 Adr 568 KD1 10048 14:02:393 3 Lr 1.45843 m E 25.043 m
363 For M5 Adr 569 KD1 812 14:02:39 3 Z 3.99758 m
364 For M5 Adr 570 KD1 812 14:04:273 3 Lr 1.35796 m E 26.564 m
365 For M5 Adr 571 KD1 FH3 14:05:353 3 Lv 0.64553 m E 23.684 m
366 For M5 Adr 572 KD1 FH3 14:05:443 3 Lv 0.64561 m E 23.683 m
367 For M5 Adr 573 KD1 812 14:06:053 3 Lr 1.35800 m E 26.564 m
368 For M5 Adr 574 KD1 FH3 14:06:05 3 Z 4.70999 m
369 For M5 Adr 575 KD1 FH3 14:09:593 3 Lr 0.85590 m E 15.274 m
370 For M5 Adr 578 KD1 10049 14:10:523 3 Lv 1.46108 m E 15.044 m
371 For M5 Adr 579 KD1 10049 14:11:003 3 Lv 1.46109 m E 15.042 m
372 For M5 Adr 580 KD1 FH3 14:11:253 3 Lr 0.85595 m E 15.273 m
373 For M5 Adr 581 KD1 10049 14:11:25 3 Z 4.10483 m
374 For M5 Adr 584 KD1 10049 14:17:043 3 Lr 1.86477 m E 25.296 m
375 For M5 Adr 585 KD1 10053 14:17:353 3 Lv 1.58367 m E 23.503 m
376 For M5 Adr 586 KD1 10053 14:17:443 3 Lv 1.58367 m E 23.505 m
377 For M5 Adr 587 KD1 10049 14:18:123 3 Lr 1.86480 m E 25.295 m
378 For M5 Adr 588 KD1 10053 14:18:12 3 Z 4.38595 m
379 For M5 Adr 595 KD1 10053 14:24:043 3 Lr 1.59302 m E 11.937 m
380 For M5 Adr 596 KD1 10050 14:24:273 3 Lv 1.70498 m E 11.859 m
381 For M5 Adr 597 KD1 10050 14:24:353 3 Lv 1.70499 m E 11.860 m
382 For M5 Adr 598 KD1 10053 14:24:593 3 Lr 1.59302 m E 11.938 m
383 For M5 Adr 599 KD1 10050 14:24:59 3 Z 4.27398 m
384 For M5 Adr 600 KD1 10050 14:28:033 3 Lr 1.64664 m E 11.995 m
385 For M5 Adr 601 KD1 10051 14:28:273 3 Lv 1.52512 m E 11.920 m
386 For M5 Adr 602 KD1 10051 14:28:363 3 Lv 1.52508 m E 11.921 m
387 For M5 Adr 603 KD1 10050 14:28:573 3 Lr 1.64667 m E 11.994 m
388 For M5 Adr 604 KD1 10051 14:28:57 3 Z 4.39554 m
389 For M5 Adr 605 KD1 10051 14:32:573 3 Lr 1.73789 m E 4.658 m
390 For M5 Adr 606 KD1 FH4 14:33:433 3 Lv 1.40480 m E 3.784 m
391 For M5 Adr 607 KD1 FH4 14:33:523 3 Lv 1.40481 m E 3.784 m
392 For M5 Adr 608 KD1 10051 14:34:153 3 Lr 1.73788 m E 4.659 m
393 For M5 Adr 609 KD1 FH4 14:34:15 3 Z 4.72862 m
394 For M5 Adr 610 KD1 FH4 14:39:433 3 Lr 1.10682 m E 12.093 m
395 For M5 Adr 611 KD1 70001 14:40:233 3 Lv 1.56911 m E 12.437 m
396 For M5 Adr 612 KD1 70001 14:40:323 3 Lv 1.56912 m E 12.435 m
397 For M5 Adr 613 KD1 FH4 14:40:503 3 Lr 1.10685 m E 12.098 m
398 For M5 Adr 614 KD1 70001 14:40:50 3 Z 4.26634 m
399 For M5 Adr 615 KD1 70001 14:43:363 3 Lr 1.55753 m E 6.319 m
400 For M5 Adr 616 KD1 10040 14:44:093 3 Lv 1.54680 m E 6.558 m
401 For M5 Adr 617 KD1 10040 14:44:173 3 Lv 1.54678 m E 6.561 m
402 For M5 Adr 618 KD1 70001 14:44:413 3 Lr 1.55755 m E 6.318 m
403 For M5 Adr 619 KD1 10040 14:44:41 3 Z 4.27709 m
404 For M5 Adr 620 KD1 10040 14:47:303 3 Lr 1.55171 m E 12.698 m
405 For M5 Adr 621 KD1 10037 14:47:543 3 Lv 1.72431 m E 12.854 m
406 For M5 Adr 622 KD1 10037 14:48:033 3 Lv 1.72435 m E 12.853 m
407 For M5 Adr 623 KD1 10040 14:48:343 3 Lr 1.55178 m E 12.688 m
408 For M5 Adr 624 KD1 10037 14:48:34 3 Z 4.10450 m
409 For M5 Adr 625 KD1 10037 14:56:543 3 Lr 1.64329 m E 15.835 m
410 For M5 Adr 626 KD1 10038 14:57:193 3 Lv 1.54875 m E 15.734 m
411 For M5 Adr 627 KD1 10038 14:57:293 3 Lv 1.54876 m E 15.735 m
412 For M5 Adr 628 KD1 10037 14:57:503 3 Lr 1.64328 m E 15.837 m
413 For M5 Adr 629 KD1 10038 14:57:50 3 Z 4.19904 m
414 For M5 Adr 630 KD1 10038 15:00:273 3 Lr 1.71297 m E 7.534 m
415 For M5 Adr 631 KD1 10039 15:00:513 3 Lv 1.70499 m E 7.887 m
416 For M5 Adr 632 KD1 10039 15:01:013 3 Lv 1.70496 m E 7.888 m
417 For M5 Adr 633 KD1 10038 15:01:223 3 Lr 1.71295 m E 7.534 m
418 For M5 Adr 634 KD1 10039 15:01:22 3 Z 4.20702 m
419 For M5 Adr 635 KD1 10039 15:03:313 3 Lr 1.48376 m E 13.239 m
420 For M5 Adr 636 KD1 10032 15:03:523 3 Lv 1.85155 m E 13.231 m
421 For M5 Adr 637 KD1 10032 15:04:013 3 Lv 1.85153 m E 13.229 m
422 For M5 Adr 638 KD1 10039 15:04:263 3 Lr 1.48383 m E 13.234 m
423 For M5 Adr 639 KD1 10032 15:04:26 3 Z 3.83927 m
424 For M5 Adr 640 KD1 10032 15:07:263 3 Lr 1.79581 m E 10.023 m
425 For M5 Adr 641 KD1 10031 15:07:503 3 Lv 1.66171 m E 9.826 m
426 For M5 Adr 642 KD1 10031 15:08:003 3 Lv 1.66171 m E 9.827 m
427 For M5 Adr 643 KD1 10032 15:08:183 3 Lr 1.79582 m E 10.026 m
428 For M5 Adr 644 KD1 10031 15:08:18 3 Z 3.97338 m
429 For M5 Adr 645 KD1 10031 15:11:563 3 Lr 1.60346 m E 18.179 m
430 For M5 Adr 646 KD1 FH15 15:12:413 3 Lv 0.84368 m E 17.968 m
431 For M5 Adr 647 KD1 FH15 15:12:503 3 Lv 0.84365 m E 17.969 m
432 For M5 Adr 648 KD1 10031 15:13:123 3 Lr 1.60354 m E 18.174 m
433 For M5 Adr 649 KD1 FH15 15:13:12 3 Z 4.73321 m
434 For M5 Adr 650 KD1 FH15 15:16:153 3 Lr 0.96888 m E 4.579 m
435 For M5 Adr 651 KD1 10033 15:16:553 3 Lv 1.73410 m E 4.384 m
436 For M5 Adr 652 KD1 10033 15:17:033 3 Lv 1.73413 m E 4.381 m
437 For M5 Adr 653 KD1 FH15 15:17:253 3 Lr 0.96889 m E 4.578 m
438 For M5 Adr 654 KD1 10033 15:17:25 3 Z 3.96798 m
439 For M5 Adr 655 KD1 10033 15:20:153 3 Lr 1.97628 m E 16.343 m
440 For M5 Adr 656 KD1 10025 15:20:393 3 Lv 1.41616 m E 16.532 m
441 For M5 Adr 657 KD1 10025 15:20:483 3 Lv 1.41616 m E 16.533 m
442 For M5 Adr 658 KD1 10033 15:21:133 3 Lr 1.97632 m E 16.343 m
443 For M5 Adr 659 KD1 10025 15:21:13 3 Z 4.52812 m
444 For M5 Adr 660 KD1 10025 15:24:483 3 Lr 1.51866 m E 7.463 m
445 For M5 Adr 661 KD1 10024 15:25:113 3 Lv 1.63060 m E 7.494 m
446 For M5 Adr 662 KD1 10024 15:25:203 3 Lv 1.63060 m E 7.494 m
447 For M5 Adr 663 KD1 10025 15:25:393 3 Lr 1.51866 m E 7.464 m
448 For M5 Adr 664 KD1 10024 15:25:39 3 Z 4.41618 m
449 For M5 Adr 665 KD1 10024 15:27:393 3 Lr 1.68731 m E 6.433 m
450 For M5 Adr 666 KD1 10023 15:28:103 3 Lv 1.64811 m E 6.511 m
451 For M5 Adr 667 KD1 10023 15:28:223 3 Lv 1.64807 m E 6.513 m
452 For M5 Adr 668 KD1 10024 15:28:433 3 Lr 1.68727 m E 6.435 m
453 For M5 Adr 669 KD1 10023 15:28:43 3 Z 4.45538 m
454 For M5 Adr 670 KD1 10023 15:30:503 3 Lr 1.58885 m E 3.514 m
455 For M5 Adr 671 KD1 10022 15:31:193 3 Lv 1.71195 m E 3.641 m
456 For M5 Adr 672 KD1 10022 15:31:283 3 Lv 1.71198 m E 3.639 m
457 For M5 Adr 673 KD1 10023 15:31:493 3 Lr 1.58889 m E 3.513 m
458 For M5 Adr 674 KD1 10022 15:31:49 3 Z 4.33229 m
459 For M5 Adr 675 KD1 10022 15:33:463 3 Lr 1.65679 m E 4.275 m
460 For M5 Adr 676 KD1 10021 15:34:133 3 Lv 1.52393 m E 4.456 m
461 For M5 Adr 677 KD1 10021 15:34:223 3 Lv 1.52392 m E 4.455 m
462 For M5 Adr 678 KD1 10022 15:34:473 3 Lr 1.65682 m E 4.273 m
463 For M5 Adr 679 KD1 10021 15:34:47 3 Z 4.46517 m
464 For M5 Adr 680 KD1 10021 15:37:223 3 Lr 1.66620 m E 14.393 m
465 For M5 Adr 681 KD1 10026 15:38:203 3 Lv 1.71514 m E 14.263 m
466 For M5 Adr 682 KD1 10026 15:38:283 3 Lv 1.71514 m E 14.263 m
467 For M5 Adr 683 KD1 10021 15:38:503 3 Lr 1.66623 m E 14.385 m
468 For M5 Adr 684 KD1 10026 15:38:50 3 Z 4.41624 m
469 For M5 Adr 685 KD1 10026 15:41:213 3 Lr 1.79969 m E 18.495 m
470 For M5 Adr 686 KD1 10020 15:41:453 3 Lv 1.76451 m E 18.383 m
471 For M5 Adr 687 KD1 10020 15:41:533 3 Lv 1.76453 m E 18.385 m
472 For M5 Adr 688 KD1 10026 15:42:153 3 Lr 1.79972 m E 18.492 m
473 For M5 Adr 689 KD1 10020 15:42:15 3 Z 4.45143 m
474 For M5 Adr 690 KD1 10020 15:44:513 3 Lr 1.51582 m E 11.212 m
475 For M5 Adr 691 KD1 10019 15:45:173 3 Lv 1.87733 m E 10.815 m
476 For M5 Adr 692 KD1 10019 15:45:273 3 Lv 1.87736 m E 10.812 m
477 For M5 Adr 693 KD1 10020 15:45:533 3 Lr 1.51581 m E 11.212 m
478 For M5 Adr 694 KD1 10019 15:45:53 3 Z 4.08990 m
479 For M5 Adr 695 KD1 10019 15:48:513 3 Lr 1.53263 m E 15.514 m
480 For M5 Adr 696 KD1 10017 15:49:213 3 Lv 1.54067 m E 15.456 m
481 For M5 Adr 697 KD1 10017 15:49:303 3 Lv 1.54070 m E 15.457 m
482 For M5 Adr 698 KD1 10019 15:49:513 3 Lr 1.53262 m E 15.512 m
483 For M5 Adr 699 KD1 10017 15:49:51 3 Z 4.08184 m
484 For M5 Adr 700 KD1 10017 15:50:163 3 Lr 1.54066 m E 15.458 m
485 For M5 Adr 701 KD1 10019 15:51:053 3 Lv 1.53264 m E 15.515 m
486 For M5 Adr 702 KD1 10019 15:51:143 3 Lv 1.53268 m E 15.514 m
487 For M5 Adr 703 KD1 10017 15:51:333 3 Lr 1.54066 m E 15.457 m
488 For M5 Adr 704 KD1 10019 15:51:33 3 Z 4.08984 m
489 For M5 Adr 705 KD1 10019 15:53:323 3 Lr 1.88995 m E 10.824 m
490 For M5 Adr 706 KD1 10020 15:53:533 3 Lv 1.52838 m E 11.213 m
491 For M5 Adr 707 KD1 10020 15:54:023 3 Lv 1.52839 m E 11.212 m
492 For M5 Adr 708 KD1 10019 15:54:253 3 Lr 1.88999 m E 10.822 m
493 For M5 Adr 709 KD1 10020 15:54:25 3 Z 4.45142 m
494 For M5 Adr 710 KD1 10020 15:56:133 3 Lr 1.76907 m E 18.577 m
495 For M5 Adr 711 KD1 10026 15:56:383 3 Lv 1.80417 m E 18.318 m
496 For M5 Adr 712 KD1 10026 15:56:493 3 Lv 1.80424 m E 18.315 m
497 For M5 Adr 713 KD1 10020 15:57:113 3 Lr 1.76908 m E 18.574 m
498 For M5 Adr 714 KD1 10026 15:57:11 3 Z 4.41629 m
499 For M5 Adr 715 KD1 10026 15:58:253 3 Lr 1.71887 m E 14.264 m
500 For M5 Adr 716 KD1 10021 15:58:513 3 Lv 1.66996 m E 14.394 m
501 For M5 Adr 717 KD1 10021 15:59:033 3 Lv 1.66996 m E 14.392 m
502 For M5 Adr 718 KD1 10026 15:59:253 3 Lr 1.71886 m E 14.263 m
503 For M5 Adr 719 KD1 10021 15:59:25 3 Z 4.46520 m
504 For M5 Adr 720 KD1 10021 16:00:493 3 Lr 1.54285 m E 4.447 m
505 For M5 Adr 721 KD1 10022 16:01:123 3 Lv 1.67564 m E 4.286 m
506 For M5 Adr 722 KD1 10022 16:01:243 3 Lv 1.67567 m E 4.284 m
507 For M5 Adr 723 KD1 10021 16:01:463 3 Lr 1.54286 m E 4.446 m
508 For M5 Adr 724 KD1 10022 16:01:46 3 Z 4.33240 m
509 For M5 Adr 725 KD1 10022 16:02:583 3 Lr 1.71046 m E 3.462 m
510 For M5 Adr 726 KD1 10023 16:03:223 3 Lv 1.58736 m E 3.703 m
511 For M5 Adr 727 KD1 10023 16:03:323 3 Lv 1.58737 m E 3.702 m
512 For M5 Adr 728 KD1 10022 16:03:553 3 Lr 1.71050 m E 3.457 m
513 For M5 Adr 729 KD1 10023 16:03:55 3 Z 4.45551 m
514 For M5 Adr 730 KD1 10023 16:05:163 3 Lr 1.62331 m E 6.454 m
515 For M5 Adr 731 KD1 10024 16:05:433 3 Lv 1.66248 m E 6.490 m
516 For M5 Adr 732 KD1 10024 16:05:523 3 Lv 1.66257 m E 6.484 m
517 For M5 Adr 733 KD1 10023 16:06:143 3 Lr 1.62325 m E 6.459 m
518 For M5 Adr 734 KD1 10024 16:06:14 3 Z 4.41627 m
519 For M5 Adr 735 KD1 10024 16:07:473 3 Lr 1.62462 m E 7.412 m
520 For M5 Adr 736 KD1 10025 16:08:183 3 Lv 1.51265 m E 7.540 m
521 For M5 Adr 737 KD1 10025 16:08:283 3 Lv 1.51267 m E 7.539 m
522 For M5 Adr 738 KD1 10024 16:08:493 3 Lr 1.62461 m E 7.413 m
523 For M5 Adr 739 KD1 10025 16:08:49 3 Z 4.52822 m
524 For M5 Adr 740 KD1 10025 16:10:343 3 Lr 1.41321 m E 16.544 m
525 For M5 Adr 741 KD1 10033 16:11:023 3 Lv 1.97332 m E 16.338 m
526 For M5 Adr 742 KD1 10033 16:11:123 3 Lv 1.97337 m E 16.333 m
527 For M5 Adr 743 KD1 10025 16:11:393 3 Lr 1.41318 m E 16.543 m
528 For M5 Adr 744 KD1 10033 16:11:39 3 Z 3.96807 m
529 For M5 Adr 745 KD1 10033 16:13:083 3 Lr 1.72530 m E 4.385 m
530 For M5 Adr 746 KD1 FH15 16:13:463 3 Lv 0.96011 m E 4.588 m
531 For M5 Adr 747 KD1 FH15 16:13:553 3 Lv 0.96012 m E 4.588 m
532 For M5 Adr 748 KD1 10033 16:14:203 3 Lr 1.72528 m E 4.388 m
533 For M5 Adr 749 KD1 FH15 16:14:20 3 Z 4.73325 m
534 For M5 Adr 750 KD1 FH15 16:16:013 3 Lr 0.81462 m E 18.051 m
535 For M5 Adr 751 KD1 10031 16:16:543 3 Lv 1.57445 m E 18.098 m
536 For M5 Adr 752 KD1 10031 16:17:063 3 Lv 1.57446 m E 18.099 m
537 For M5 Adr 753 KD1 FH15 16:17:293 3 Lr 0.81464 m E 18.048 m
538 For M5 Adr 754 KD1 10031 16:17:29 3 Z 3.97342 m
539 For M5 Adr 755 KD1 10031 16:19:023 3 Lr 1.70992 m E 9.854 m
540 For M5 Adr 756 KD1 10032 16:19:343 3 Lv 1.84400 m E 9.988 m
541 For M5 Adr 757 KD1 10032 16:19:493 3 Lv 1.84402 m E 9.986 m
542 For M5 Adr 758 KD1 10031 16:20:163 3 Lr 1.70994 m E 9.853 m
543 For M5 Adr 759 KD1 10032 16:20:16 3 Z 3.83934 m
544 For M5 Adr 760 KD1 10032 16:22:213 3 Lr 1.86686 m E 13.225 m
545 For M5 Adr 761 KD1 10039 16:22:523 3 Lv 1.49909 m E 13.263 m
546 For M5 Adr 762 KD1 10039 16:23:073 3 Lv 1.49908 m E 13.263 m
547 For M5 Adr 763 KD1 10032 16:23:393 3 Lr 1.86689 m E 13.224 m
548 For M5 Adr 764 KD1 10039 16:23:39 3 Z 4.20713 m
549 For M5 Adr 765 KD1 10039 16:25:173 3 Lr 1.69401 m E 7.802 m
550 For M5 Adr 766 KD1 10038 16:25:463 3 Lv 1.70193 m E 7.622 m
551 For M5 Adr 767 KD1 10038 16:26:023 3 Lv 1.70194 m E 7.622 m
552 For M5 Adr 768 KD1 10039 16:26:283 3 Lr 1.69400 m E 7.802 m
553 For M5 Adr 769 KD1 10038 16:26:28 3 Z 4.19920 m
554 For M5 Adr 770 KD1 10038 16:28:073 3 Lr 1.55007 m E 15.748 m
555 For M5 Adr 771 KD1 10037 16:28:313 3 Lv 1.64459 m E 15.835 m
556 For M5 Adr 772 KD1 10037 16:28:413 3 Lv 1.64460 m E 15.834 m
557 For M5 Adr 773 KD1 10038 16:29:043 3 Lr 1.55007 m E 15.749 m
558 For M5 Adr 774 KD1 10037 16:29:04 3 Z 4.10468 m
559 For M5 Adr 775 KD1 10037 16:31:083 3 Lr 1.67815 m E 12.662 m
560 For M5 Adr 776 KD1 10040 16:31:313 3 Lv 1.50556 m E 12.905 m
561 For M5 Adr 777 KD1 10040 16:31:413 3 Lv 1.50557 m E 12.906 m
562 For M5 Adr 778 KD1 10037 16:32:023 3 Lr 1.67815 m E 12.664 m
563 For M5 Adr 779 KD1 10040 16:32:02 3 Z 4.27726 m
564 For M5 Adr 780 KD1 10040 16:33:223 3 Lr 1.54946 m E 6.498 m
565 For M5 Adr 781 KD1 70002 16:33:523 3 Lv 1.55940 m E 6.375 m
566 For M5 Adr 782 KD1 70002 16:34:033 3 Lv 1.55939 m E 6.376 m
567 For M5 Adr 783 KD1 10040 16:34:273 3 Lr 1.54942 m E 6.498 m
568 For M5 Adr 784 KD1 70002 16:34:27 3 Z 4.26731 m
569 For M5 Adr 785 KD1 70002 16:35:563 3 Lr 1.59282 m E 12.344 m
570 For M5 Adr 786 KD1 FH4 16:36:363 3 Lv 1.13142 m E 12.188 m
571 For M5 Adr 787 KD1 FH4 16:36:523 3 Lv 1.13140 m E 12.188 m
572 For M5 Adr 788 KD1 70002 16:37:183 3 Lr 1.59290 m E 12.347 m
573 For M5 Adr 789 KD1 FH4 16:37:18 3 Z 4.72876 m
574 For M5 Adr 790 KD1 FH4 16:39:563 3 Lr 1.49096 m E 4.247 m
575 For M5 Adr 791 KD1 10051 16:41:483 3 Lv 1.82399 m E 4.148 m
576 For M5 Adr 792 KD1 10051 16:42:043 3 Lv 1.82401 m E 4.146 m
577 For M5 Adr 793 KD1 FH4 16:42:303 3 Lr 1.49098 m E 4.248 m
578 For M5 Adr 794 KD1 10051 16:42:30 3 Z 4.39573 m
579 For M5 Adr 795 KD1 10051 16:44:153 3 Lr 1.47922 m E 11.936 m
580 For M5 Adr 796 KD1 10050 16:44:483 3 Lv 1.60061 m E 11.975 m
581 For M5 Adr 797 KD1 10050 16:45:053 3 Lv 1.60057 m E 11.977 m
582 For M5 Adr 798 KD1 10051 16:45:323 3 Lr 1.47919 m E 11.937 m
583 For M5 Adr 799 KD1 10050 16:45:32 3 Z 4.27434 m
584 For M5 Adr 800 KD1 10050 16:47:273 3 Lr 1.70650 m E 11.350 m
585 For M5 Adr 801 KD1 10053 16:48:033 3 Lv 1.59473 m E 12.410 m
586 For M5 Adr 802 KD1 10053 16:48:203 3 Lv 1.59475 m E 12.408 m
587 For M5 Adr 803 KD1 10050 16:48:493 3 Lr 1.70655 m E 11.349 m
588 For M5 Adr 804 KD1 10053 16:48:49 3 Z 4.38613 m
589 For M5 Adr 805 KD1 10053 16:53:053 3 Lr 1.59530 m E 24.190 m
590 For M5 Adr 806 KD1 10049 16:53:343 3 Lv 1.87627 m E 24.624 m
591 For M5 Adr 807 KD1 10049 16:53:543 3 Lv 1.87630 m E 24.626 m
592 For M5 Adr 808 KD1 10053 16:54:253 3 Lr 1.59533 m E 24.185 m
593 For M5 Adr 809 KD1 10049 16:54:25 3 Z 4.10516 m
594 For M5 Adr 810 KD1 10049 16:56:233 3 Lr 1.40780 m E 14.745 m
595 For M5 Adr 811 KD1 FH3 16:57:093 3 Lv 0.80238 m E 15.610 m
596 For M5 Adr 812 KD1 FH3 16:57:243 3 Lv 0.80236 m E 15.609 m
597 For M5 Adr 813 KD1 10049 16:57:513 3 Lr 1.40777 m E 14.741 m
598 For M5 Adr 814 KD1 FH3 16:57:51 3 Z 4.71057 m
599 For M5 Adr 817 KD1 FH3 17:02:383 3 Lr 0.64466 m E 23.862 m
600 For M5 Adr 818 KD1 812 17:03:163 3 Lv 1.35722 m E 26.312 m
601 For M5 Adr 819 KD1 812 17:03:353 3 Lv 1.35712 m E 26.316 m
602 For M5 Adr 820 KD1 FH3 17:04:123 3 Lr 0.64467 m E 23.868 m
603 For M5 Adr 821 KD1 812 17:04:12 3 Z 3.99807 m
604 For M5 Adr 822 KD1 812 17:04:553 3 Lr 1.35712 m E 26.321 m
605 For M5 Adr 823 KD1 10048 17:05:353 3 Lv 1.45751 m E 25.242 m
606 For M5 Adr 824 KD1 10048 17:05:503 3 Lv 1.45748 m E 25.241 m
607 For M5 Adr 825 KD1 812 17:06:213 3 Lr 1.35717 m E 26.307 m
608 For M5 Adr 826 KD1 10048 17:06:21 3 Z 3.89772 m
609 For M5 Adr 827 KD1 10048 17:08:243 3 Lr 1.41657 m E 7.786 m
610 For M5 Adr 828 KD1 816 17:09:343 3 Lv 1.31900 m E 8.208 m
611 For M5 Adr 829 KD1 816 17:09:513 3 Lv 1.31900 m E 8.209 m
612 For M5 Adr 830 KD1 10048 17:10:213 3 Lr 1.41659 m E 7.776 m
613 For M5 Adr 831 KD1 816 17:10:21 3 Z 3.99530 m
614 For M5 Adr 832 KD1 816 3 Sh 0.00030 m dz -0.00030 m Z 3.99500 m
615 For M5 Adr 833 KD2 816 52 3 Sr 649.58 m Sv 649.70 m Z 3.99530 m
616 For M5 Adr 834 TO Zugende 3
617 For M5 Adr 835 TO Zugbeginn RVVR 2
618 For M5 Adr 836 KD1 816 2 Z 3.99500 m
619 For M5 Adr 837 KD1 816 14:30:403 2 Lr 1.43758 m E 23.399 m
620 For M5 Adr 838 KD1 812 14:31:083 2 Lv 1.43473 m E 21.489 m
621 For M5 Adr 839 KD1 812 14:31:173 2 Lv 1.43477 m E 21.488 m
622 For M5 Adr 840 KD1 816 14:31:403 2 Lr 1.43768 m E 23.400 m
623 For M5 Adr 841 KD1 812 14:31:40 2 Z 3.99788 m
624 For M5 Adr 842 KD1 812 14:35:573 2 Lr 1.35778 m E 4.039 m
625 For M5 Adr 843 KD1 60001 14:36:333 2 Lv 1.50396 m E 4.427 m
626 For M5 Adr 844 KD1 60001 14:36:433 2 Lv 1.50396 m E 4.427 m
627 For M5 Adr 845 KD1 812 14:37:023 2 Lr 1.35777 m E 4.039 m
628 For M5 Adr 846 KD1 60001 14:37:02 2 Z 3.85169 m
629 For M5 Adr 847 KD1 60001 14:40:263 2 Lr 1.54562 m E 19.274 m
630 For M5 Adr 848 KD1 10045 14:40:493 2 Lv 1.56808 m E 19.224 m
631 For M5 Adr 849 KD1 10045 14:40:583 2 Lv 1.56811 m E 19.224 m
632 For M5 Adr 850 KD1 60001 14:41:183 2 Lr 1.54563 m E 19.273 m
633 For M5 Adr 851 KD1 10045 14:41:18 2 Z 3.82922 m
634 For M5 Adr 852 KD1 10045 14:46:233 2 Lr 1.67307 m E 26.557 m
635 For M5 Adr 853 KD1 10034 14:46:573 2 Lv 1.65673 m E 27.732 m
636 For M5 Adr 854 KD1 10034 14:47:073 2 Lv 1.65669 m E 27.733 m
637 For M5 Adr 855 KD1 10045 14:47:253 2 Lr 1.67302 m E 26.559 m
638 For M5 Adr 856 KD1 10034 14:47:25 2 Z 3.84556 m
639 For M5 Adr 857 KD1 10034 14:51:143 2 Lr 1.61495 m E 25.466 m
640 For M5 Adr 858 KD1 10035 14:51:423 2 Lv 1.27430 m E 25.236 m
641 For M5 Adr 859 KD1 10035 14:51:513 2 Lv 1.27430 m E 25.238 m
642 For M5 Adr 860 KD1 10034 14:52:113 2 Lr 1.61488 m E 25.465 m
643 For M5 Adr 861 KD1 10035 14:52:11 2 Z 4.18617 m
644 For M5 Adr 862 KD1 10035 14:56:273 2 Lr 1.80675 m E 19.340 m
645 For M5 Adr 863 KD1 10036 14:56:453 2 Lv 1.88078 m E 19.429 m
646 For M5 Adr 864 KD1 10036 14:56:543 2 Lv 1.88079 m E 19.427 m
647 For M5 Adr 865 KD1 10035 14:57:143 2 Lr 1.80672 m E 19.342 m
648 For M5 Adr 866 KD1 10036 14:57:14 2 Z 4.11213 m
649 For M5 Adr 867 KD1 10036 15:05:313 2 Lr 1.56667 m E 6.641 m
650 For M5 Adr 868 KD1 FH5 15:06:083 2 Lv 0.96341 m E 10.417 m
651 For M5 Adr 869 KD1 FH5 15:06:173 2 Lv 0.96349 m E 10.417 m
652 For M5 Adr 870 KD1 10036 15:06:403 2 Lr 1.56681 m E 6.638 m
653 For M5 Adr 871 KD1 FH5 15:06:40 2 Z 4.71542 m
654 For M5 Adr 872 KD1 FH5 15:07:103 2 Lr 0.96347 m E 10.418 m
655 For M5 Adr 873 KD1 10036 15:07:393 2 Lv 1.56678 m E 6.640 m
656 For M5 Adr 874 KD1 10036 15:07:483 2 Lv 1.56677 m E 6.642 m
657 For M5 Adr 875 KD1 FH5 15:08:103 2 Lr 0.96350 m E 10.417 m
658 For M5 Adr 876 KD1 10036 15:08:10 2 Z 4.11213 m
659 For M5 Adr 877 KD1 10036 15:10:183 2 Lr 1.88504 m E 19.391 m
660 For M5 Adr 878 KD1 10035 15:10:483 2 Lv 1.81094 m E 19.359 m
661 For M5 Adr 879 KD1 10035 15:10:593 2 Lv 1.81094 m E 19.359 m
662 For M5 Adr 880 KD1 10036 15:11:203 2 Lr 1.88498 m E 19.392 m
663 For M5 Adr 881 KD1 10035 15:11:20 2 Z 4.18620 m
664 For M5 Adr 882 KD1 10035 15:13:103 2 Lr 1.28679 m E 25.062 m
665 For M5 Adr 883 KD1 10034 15:13:343 2 Lv 1.62729 m E 25.615 m
666 For M5 Adr 884 KD1 10034 15:13:433 2 Lv 1.62732 m E 25.609 m
667 For M5 Adr 885 KD1 10035 15:14:013 2 Lr 1.28680 m E 25.061 m
668 For M5 Adr 886 KD1 10034 15:14:01 2 Z 3.84569 m
669 For M5 Adr 887 KD1 10034 15:16:543 2 Lr 1.66493 m E 28.745 m
670 For M5 Adr 888 KD1 10028 15:17:183 2 Lv 1.61072 m E 28.420 m
671 For M5 Adr 889 KD1 10028 15:17:283 2 Lv 1.61079 m E 28.422 m
672 For M5 Adr 890 KD1 10034 15:17:483 2 Lr 1.66498 m E 28.741 m
673 For M5 Adr 891 KD1 10028 15:17:48 2 Z 3.89989 m
674 For M5 Adr 892 KD1 10028 15:21:203 2 Lr 1.59959 m E 19.000 m
675 For M5 Adr 893 KD1 60002 15:22:083 2 Lv 1.54667 m E 18.962 m
676 For M5 Adr 894 KD1 60002 15:22:193 2 Lv 1.54668 m E 18.961 m
677 For M5 Adr 895 KD1 10028 15:22:423 2 Lr 1.59967 m E 19.003 m
678 For M5 Adr 896 KD1 60002 15:22:42 2 Z 3.95284 m
679 For M5 Adr 897 KD1 60002 15:25:443 2 Lr 1.60831 m E 18.850 m
680 For M5 Adr 898 KD1 10011 15:26:143 2 Lv 1.63237 m E 19.103 m
681 For M5 Adr 899 KD1 10011 15:26:233 2 Lv 1.63235 m E 19.104 m
682 For M5 Adr 900 KD1 60002 15:26:433 2 Lr 1.60829 m E 18.852 m
683 For M5 Adr 901 KD1 10011 15:26:43 2 Z 3.92878 m
684 For M5 Adr 902 KD1 10011 15:30:183 2 Lr 1.67286 m E 21.967 m
685 For M5 Adr 903 KD1 60003 15:30:433 2 Lv 1.63170 m E 22.073 m
686 For M5 Adr 904 KD1 60003 15:30:523 2 Lv 1.63172 m E 22.072 m
687 For M5 Adr 905 KD1 10011 15:31:263 2 Lr 1.67286 m E 21.965 m
688 For M5 Adr 906 KD1 60003 15:31:26 2 Z 3.96993 m
689 For M5 Adr 907 KD1 60003 15:35:353 2 Lr 1.68025 m E 21.958 m
690 For M5 Adr 908 KD1 10001 15:36:073 2 Lv 1.63896 m E 21.883 m
691 For M5 Adr 909 KD1 10001 15:36:163 2 Lv 1.63897 m E 21.881 m
692 For M5 Adr 910 KD1 60003 15:36:403 2 Lr 1.68030 m E 21.961 m
693 For M5 Adr 911 KD1 10001 15:36:40 2 Z 4.01124 m
694 For M5 Adr 912 KD1 10001 15:40:373 2 Lr 1.39478 m E 19.268 m
695 For M5 Adr 913 KD1 60004 15:41:133 2 Lv 1.61995 m E 18.718 m
696 For M5 Adr 914 KD1 60004 15:41:223 2 Lv 1.62017 m E 18.717 m
697 For M5 Adr 915 KD1 10001 15:41:403 2 Lr 1.39479 m E 19.268 m
698 For M5 Adr 916 KD1 60004 15:41:40 2 Z 3.78596 m
699 For M5 Adr 917 KD1 60004 15:45:233 2 Lr 1.57515 m E 19.137 m
700 For M5 Adr 918 KD1 10003 15:45:483 2 Lv 1.49858 m E 19.431 m
701 For M5 Adr 919 KD1 10003 15:45:573 2 Lv 1.49859 m E 19.431 m
702 For M5 Adr 920 KD1 60004 15:46:193 2 Lr 1.57509 m E 19.139 m
703 For M5 Adr 921 KD1 10003 15:46:19 2 Z 3.86250 m
704 For M5 Adr 922 KD1 10003 15:49:033 2 Lr 1.81482 m E 13.285 m
705 For M5 Adr 923 KD1 10007 15:49:313 2 Lv 1.64518 m E 12.877 m
706 For M5 Adr 924 KD1 10007 15:49:403 2 Lv 1.64518 m E 12.878 m
707 For M5 Adr 925 KD1 10003 15:50:003 2 Lr 1.81488 m E 13.284 m
708 For M5 Adr 926 KD1 10007 15:50:00 2 Z 4.03217 m
709 For M5 Adr 927 KD1 10007 15:52:403 2 Lr 1.62453 m E 30.297 m
710 For M5 Adr 928 KD1 10008 15:53:043 2 Lv 1.80896 m E 30.375 m
711 For M5 Adr 929 KD1 10008 15:53:133 2 Lv 1.80894 m E 30.376 m
712 For M5 Adr 930 KD1 10007 15:53:413 2 Lr 1.62452 m E 30.255 m
713 For M5 Adr 931 KD1 10008 15:53:41 2 Z 3.84774 m
714 For M5 Adr 932 KD1 10008 15:56:393 2 Lr 1.74534 m E 13.415 m
715 For M5 Adr 933 KD1 10005 15:57:033 2 Lv 1.75588 m E 13.286 m
716 For M5 Adr 934 KD1 10005 15:57:123 2 Lv 1.75590 m E 13.286 m
717 For M5 Adr 935 KD1 10008 15:57:313 2 Lr 1.74539 m E 13.416 m
718 For M5 Adr 936 KD1 10005 15:57:31 2 Z 3.83722 m
719 For M5 Adr 937 KD1 10005 16:01:303 2 Lr 1.40465 m E 20.041 m
720 For M5 Adr 938 KD1 10006 16:01:513 2 Lv 1.54197 m E 19.066 m
721 For M5 Adr 939 KD1 10006 16:02:003 2 Lv 1.54198 m E 19.066 m
722 For M5 Adr 940 KD1 10005 16:02:213 2 Lr 1.40455 m E 20.044 m
723 For M5 Adr 941 KD1 10006 16:02:21 2 Z 3.69984 m
724 For M5 Adr 942 KD1 10006 16:03:563 2 Lr 1.60546 m E 23.103 m
725 For M5 Adr 943 KD1 10004 16:04:203 2 Lv 1.69468 m E 24.031 m
726 For M5 Adr 944 KD1 10004 16:04:293 2 Lv 1.69467 m E 24.034 m
727 For M5 Adr 945 KD1 10006 16:04:493 2 Lr 1.60547 m E 23.099 m
728 For M5 Adr 946 KD1 10004 16:04:49 2 Z 3.61063 m
729 For M5 Adr 947 KD1 10004 16:08:293 2 Lr 1.62333 m E 20.862 m
730 For M5 Adr 948 KD1 60005 16:08:533 2 Lv 1.61400 m E 21.223 m
731 For M5 Adr 949 KD1 60005 16:09:033 2 Lv 1.61401 m E 21.226 m
732 For M5 Adr 950 KD1 10004 16:09:233 2 Lr 1.62337 m E 20.868 m
733 For M5 Adr 951 KD1 60005 16:09:23 2 Z 3.61998 m
734 For M5 Adr 952 KD1 60005 16:12:113 2 Lr 1.62803 m E 19.769 m
735 For M5 Adr 953 KD1 10002 16:12:333 2 Lv 1.53886 m E 19.690 m
736 For M5 Adr 954 KD1 10002 16:12:423 2 Lv 1.53887 m E 19.688 m
737 For M5 Adr 955 KD1 60005 16:13:013 2 Lr 1.62803 m E 19.768 m
738 For M5 Adr 956 KD1 10002 16:13:01 2 Z 3.70914 m
739 For M5 Adr 957 KD1 10002 16:13:263 2 Lr 1.53886 m E 19.674 m
740 For M5 Adr 958 KD1 60006 16:13:483 2 Lv 1.62806 m E 19.768 m
741 For M5 Adr 959 KD1 60006 16:13:583 2 Lv 1.62801 m E 19.770 m
742 For M5 Adr 960 KD1 10002 16:14:163 2 Lr 1.53885 m E 19.675 m
743 For M5 Adr 961 KD1 60006 16:14:16 2 Z 3.61996 m
744 For M5 Adr 962 KD1 60006 16:16:263 2 Lr 1.60384 m E 20.993 m
745 For M5 Adr 963 KD1 10004 16:16:513 2 Lv 1.61318 m E 21.085 m
746 For M5 Adr 964 KD1 10004 16:17:013 2 Lv 1.61318 m E 21.084 m
747 For M5 Adr 965 KD1 60006 16:17:233 2 Lr 1.60386 m E 20.994 m
748 For M5 Adr 966 KD1 10004 16:17:23 2 Z 3.61063 m
749 For M5 Adr 967 KD1 10004 16:19:003 2 Lr 1.65949 m E 24.008 m
750 For M5 Adr 968 KD1 10006 16:19:343 2 Lv 1.57013 m E 23.123 m
751 For M5 Adr 969 KD1 10006 16:19:443 2 Lv 1.57013 m E 23.124 m
752 For M5 Adr 970 KD1 10004 16:20:013 2 Lr 1.65952 m E 23.998 m
753 For M5 Adr 971 KD1 10006 16:20:01 2 Z 3.70001 m
754 For M5 Adr 972 KD1 10006 16:21:163 2 Lr 1.49590 m E 18.993 m
755 For M5 Adr 973 KD1 10005 16:21:523 2 Lv 1.35852 m E 20.150 m
756 For M5 Adr 974 KD1 10005 16:22:033 2 Lv 1.35849 m E 20.150 m
757 For M5 Adr 975 KD1 10006 16:22:213 2 Lr 1.49595 m E 18.996 m
758 For M5 Adr 976 KD1 10005 16:22:21 2 Z 3.83743 m
759 For M5 Adr 977 KD1 10005 16:23:553 2 Lr 1.76288 m E 13.359 m
760 For M5 Adr 978 KD1 10008 16:24:193 2 Lv 1.75238 m E 13.351 m
761 For M5 Adr 979 KD1 10008 16:24:303 2 Lv 1.75236 m E 13.351 m
762 For M5 Adr 980 KD1 10005 16:24:513 2 Lr 1.76288 m E 13.359 m
763 For M5 Adr 981 KD1 10008 16:24:51 2 Z 3.84794 m
764 For M5 Adr 982 KD1 10008 16:27:193 2 Lr 1.83398 m E 30.253 m
765 For M5 Adr 983 KD1 10007 16:27:413 2 Lv 1.64958 m E 30.375 m
766 For M5 Adr 984 KD1 10007 16:27:513 2 Lv 1.64959 m E 30.377 m
767 For M5 Adr 985 KD1 10008 16:28:103 2 Lr 1.83397 m E 30.251 m
768 For M5 Adr 986 KD1 10007 16:28:10 2 Z 4.03233 m
769 For M5 Adr 987 KD1 10007 16:29:513 2 Lr 1.63925 m E 13.080 m
770 For M5 Adr 988 KD1 10003 16:30:253 2 Lv 1.80901 m E 13.038 m
771 For M5 Adr 989 KD1 10003 16:30:353 2 Lv 1.80904 m E 13.034 m
772 For M5 Adr 990 KD1 10007 16:31:063 2 Lr 1.63930 m E 13.082 m
773 For M5 Adr 991 KD1 10003 16:31:06 2 Z 3.86258 m
774 For M5 Adr 992 KD1 10003 16:33:333 2 Lr 1.47515 m E 19.257 m
775 For M5 Adr 993 KD1 60007 16:34:013 2 Lv 1.55199 m E 19.323 m
776 For M5 Adr 994 KD1 60007 16:34:163 2 Lv 1.55202 m E 19.323 m
777 For M5 Adr 995 KD1 10003 16:34:403 2 Lr 1.47515 m E 19.259 m
778 For M5 Adr 996 KD1 60007 16:34:40 2 Z 3.78572 m
779 For M5 Adr 997 KD1 60007 16:36:413 2 Lr 1.63027 m E 18.873 m
780 For M5 Adr 998 KD1 10001 16:37:093 2 Lv 1.40449 m E 19.130 m
781 For M5 Adr 999 KD1 10001 16:37:243 2 Lv 1.40450 m E 19.130 m
782 For M5 Adr 1000 KD1 60007 16:37:513 2 Lr 1.63028 m E 18.871 m
783 For M5 Adr 1001 KD1 10001 16:37:51 2 Z 4.01151 m
784 For M5 Adr 1002 KD1 10001 16:39:533 2 Lr 1.65957 m E 21.975 m
785 For M5 Adr 1003 KD1 60008 16:40:383 2 Lv 1.70161 m E 21.868 m
786 For M5 Adr 1004 KD1 60008 16:41:003 2 Lv 1.70156 m E 21.869 m
787 For M5 Adr 1005 KD1 10001 16:41:233 2 Lr 1.65960 m E 21.974 m
788 For M5 Adr 1006 KD1 60008 16:41:23 2 Z 3.96951 m
789 For M5 Adr 1007 KD1 60008 16:43:203 2 Lr 1.63618 m E 22.050 m
790 For M5 Adr 1008 KD1 10011 16:43:483 2 Lv 1.67665 m E 21.988 m
791 For M5 Adr 1009 KD1 10011 16:44:003 2 Lv 1.67668 m E 21.989 m
792 For M5 Adr 1010 KD1 60008 16:44:233 2 Lr 1.63618 m E 22.050 m
793 For M5 Adr 1011 KD1 10011 16:44:23 2 Z 3.92902 m
794 For M5 Adr 1012 KD1 10011 16:46:093 2 Lr 1.63475 m E 19.055 m
795 For M5 Adr 1013 KD1 60009 16:46:373 2 Lv 1.61073 m E 18.874 m
796 For M5 Adr 1014 KD1 60009 16:46:533 2 Lv 1.61073 m E 18.871 m
797 For M5 Adr 1015 KD1 10011 16:47:173 2 Lr 1.63475 m E 19.053 m
798 For M5 Adr 1016 KD1 60009 16:47:17 2 Z 3.95304 m
799 For M5 Adr 1017 KD1 60009 16:49:003 2 Lr 1.55716 m E 19.033 m
800 For M5 Adr 1018 KD1 10028 16:49:383 2 Lv 1.61006 m E 18.947 m
801 For M5 Adr 1019 KD1 10028 16:49:503 2 Lv 1.61010 m E 18.946 m
802 For M5 Adr 1020 KD1 60009 16:50:113 2 Lr 1.55714 m E 19.040 m
803 For M5 Adr 1021 KD1 10028 16:50:11 2 Z 3.90011 m
804 For M5 Adr 1022 KD1 10028 16:51:563 2 Lr 1.57370 m E 28.434 m
805 For M5 Adr 1023 KD1 10034 16:52:203 2 Lv 1.62804 m E 28.757 m
806 For M5 Adr 1024 KD1 10034 16:52:323 2 Lv 1.62798 m E 28.741 m
807 For M5 Adr 1025 KD1 10028 16:52:553 2 Lr 1.57369 m E 28.415 m
808 For M5 Adr 1026 KD1 10034 16:52:55 2 Z 3.84579 m
809 For M5 Adr 1027 KD1 10034 16:54:523 2 Lr 1.63172 m E 27.842 m
810 For M5 Adr 1028 KD1 10045 16:55:403 2 Lv 1.64796 m E 26.502 m
811 For M5 Adr 1029 KD1 10045 16:56:173 2 Lv 1.64808 m E 26.502 m
812 For M5 Adr 1030 KD1 10034 16:56:483 2 Lr 1.63175 m E 27.777 m
813 For M5 Adr 1031 KD1 10045 16:56:48 2 Z 3.82951 m
814 For M5 Adr 1032 KD1 10045 16:58:373 2 Lr 1.53441 m E 19.112 m
815 For M5 Adr 1033 KD1 60010 16:59:113 2 Lv 1.51027 m E 19.388 m
816 For M5 Adr 1034 KD1 60010 16:59:273 2 Lv 1.51031 m E 19.381 m
817 For M5 Adr 1035 KD1 10045 16:59:513 2 Lr 1.53444 m E 19.110 m
818 For M5 Adr 1036 KD1 60010 16:59:51 2 Z 3.85364 m
819 For M5 Adr 1037 KD1 60010 17:01:473 2 Lr 1.43941 m E 4.448 m
820 For M5 Adr 1038 KD1 812 17:02:203 2 Lv 1.29479 m E 4.019 m
821 For M5 Adr 1039 KD1 812 17:02:373 2 Lv 1.29478 m E 4.019 m
822 For M5 Adr 1040 KD1 60010 17:03:173 2 Lr 1.43941 m E 4.450 m
823 For M5 Adr 1041 KD1 812 17:03:17 2 Z 3.99827 m
824 For M5 Adr 1042 KD1 812 17:05:363 2 Lr 1.43168 m E 21.741 m
825 For M5 Adr 1043 KD1 816 17:06:183 2 Lv 1.43443 m E 23.124 m
826 For M5 Adr 1044 KD1 816 17:06:343 2 Lv 1.43443 m E 23.124 m
827 For M5 Adr 1045 KD1 812 17:07:043 2 Lr 1.43159 m E 21.743 m
828 For M5 Adr 1046 KD1 816 17:07:04 2 Z 3.99547 m
829 For M5 Adr 1047 KD1 816 2 Sh 0.00048 m dz -0.00048 m Z 3.99500 m
830 For M5 Adr 1048 KD2 816 42 2 Sr 831.40 m Sv 831.50 m Z 3.99547 m
831 For M5 Adr 1049 TO Zugende 2
832 For M5 Adr 1050 TO Zugbeginn RVVR 6
833 For M5 Adr 1051 KD1 666 6 Z 3.89100 m
834 For M5 Adr 1052 KD1 666 09:40:063 6 Lr 1.44931 m E 18.409 m
835 For M5 Adr 1053 KD1 10055 09:40:483 6 Lv 1.77704 m E 18.557 m
836 For M5 Adr 1054 KD1 10055 09:41:003 6 Lv 1.77705 m E 18.556 m
837 For M5 Adr 1055 KD1 666 09:41:233 6 Lr 1.44933 m E 18.404 m
838 For M5 Adr 1056 KD1 10055 09:41:23 6 Z 3.56327 m
839 For M5 Adr 1057 KD1 10055 09:44:543 6 Lr 1.78051 m E 23.397 m
840 For M5 Adr 1058 KD1 10057 09:45:323 6 Lv 1.46532 m E 23.457 m
841 For M5 Adr 1059 KD1 10057 09:45:423 6 Lv 1.46531 m E 23.458 m
842 For M5 Adr 1060 KD1 10055 09:46:023 6 Lr 1.78056 m E 23.394 m
843 For M5 Adr 1061 KD1 10057 09:46:02 6 Z 3.87849 m
844 For M5 Adr 1062 KD1 10057 09:49:323 6 Lr 1.99642 m E 19.914 m
845 For M5 Adr 1063 KD1 30001 09:50:063 6 Lv 1.65143 m E 20.119 m
846 For M5 Adr 1064 KD1 30001 09:50:153 6 Lv 1.65136 m E 20.122 m
847 For M5 Adr 1065 KD1 10057 09:50:403 6 Lr 1.99645 m E 19.913 m
848 For M5 Adr 1066 KD1 30001 09:50:40 6 Z 4.22353 m
849 For M5 Adr 1067 KD1 30001 09:54:053 6 Lr 1.63978 m E 20.030 m
850 For M5 Adr 1068 KD1 10059 09:54:343 6 Lv 1.71977 m E 20.092 m
851 For M5 Adr 1069 KD1 10059 09:54:463 6 Lv 1.71974 m E 20.094 m
852 For M5 Adr 1070 KD1 30001 09:55:113 6 Lr 1.63989 m E 20.026 m
853 For M5 Adr 1071 KD1 10059 09:55:11 6 Z 4.14361 m
854 For M5 Adr 1072 KD1 10059 09:58:163 6 Lr 1.78165 m E 19.164 m
855 For M5 Adr 1073 KD1 30002 09:59:533 6 Lv 1.51405 m E 19.433 m
856 For M5 Adr 1074 KD1 30002 10:00:033 6 Lv 1.51404 m E 19.434 m
857 For M5 Adr 1075 KD1 10059 10:00:313 6 Lr 1.78152 m E 19.171 m
858 For M5 Adr 1076 KD1 30002 10:00:31 6 Z 4.41115 m
859 For M5 Adr 1077 KD1 30002 10:03:513 6 Lr 1.60517 m E 12.252 m
860 For M5 Adr 1078 KD1 10053 10:04:223 6 Lv 1.62944 m E 12.461 m
861 For M5 Adr 1079 KD1 10053 10:04:303 6 Lv 1.62944 m E 12.462 m
862 For M5 Adr 1080 KD1 30002 10:04:513 6 Lr 1.60518 m E 12.253 m
863 For M5 Adr 1081 KD1 10053 10:04:51 6 Z 4.38689 m
864 For M5 Adr 1082 KD1 10053 10:07:543 6 Lr 1.76780 m E 29.779 m
865 For M5 Adr 1083 KD1 10044 10:08:393 6 Lv 1.49774 m E 29.777 m
866 For M5 Adr 1084 KD1 10044 10:08:483 6 Lv 1.49776 m E 29.775 m
867 For M5 Adr 1085 KD1 10053 10:09:093 6 Lr 1.76782 m E 29.783 m
868 For M5 Adr 1086 KD1 10044 10:09:09 6 Z 4.65695 m
869 For M5 Adr 1087 KD1 10044 10:13:023 6 Lr 1.42742 m E 18.722 m
870 For M5 Adr 1088 KD1 10040 10:13:303 6 Lv 1.80634 m E 16.387 m
871 For M5 Adr 1089 KD1 10040 10:13:403 6 Lv 1.80635 m E 16.388 m
872 For M5 Adr 1090 KD1 10044 10:14:053 6 Lr 1.42740 m E 18.714 m
873 For M5 Adr 1091 KD1 10040 10:14:05 6 Z 4.27801 m
874 For M5 Adr 1092 KD1 10040 10:17:293 6 Lr 1.64722 m E 16.416 m
875 For M5 Adr 1093 KD1 10041 10:17:513 6 Lv 1.32581 m E 15.808 m
876 For M5 Adr 1094 KD1 10041 10:18:013 6 Lv 1.32585 m E 15.805 m
877 For M5 Adr 1095 KD1 10040 10:18:343 6 Lr 1.64719 m E 16.417 m
878 For M5 Adr 1096 KD1 10041 10:18:34 6 Z 4.59939 m
879 For M5 Adr 1097 KD1 10041 10:22:583 6 Lr 1.62142 m E 12.038 m
880 For M5 Adr 1098 KD1 10042 10:23:333 6 Lv 1.75351 m E 13.648 m
881 For M5 Adr 1099 KD1 10042 10:23:423 6 Lv 1.75354 m E 13.647 m
882 For M5 Adr 1100 KD1 10041 10:24:023 6 Lr 1.62146 m E 12.031 m
883 For M5 Adr 1101 KD1 10042 10:24:02 6 Z 4.46730 m
884 For M5 Adr 1102 KD1 10042 10:27:173 6 Lr 1.80021 m E 4.666 m
885 For M5 Adr 1103 KD1 30003 10:28:483 6 Lv 1.71065 m E 4.794 m
886 For M5 Adr 1104 KD1 30003 10:28:583 6 Lv 1.71065 m E 4.795 m
887 For M5 Adr 1105 KD1 10042 10:29:213 6 Lr 1.80017 m E 4.673 m
888 For M5 Adr 1106 KD1 30003 10:29:21 6 Z 4.55685 m
889 For M5 Adr 1107 KD1 30003 10:34:423 6 Lr 1.38670 m E 28.622 m
890 For M5 Adr 1108 KD1 10027 10:35:173 6 Lv 1.50025 m E 29.351 m
891 For M5 Adr 1109 KD1 10027 10:35:253 6 Lv 1.50030 m E 29.349 m
892 For M5 Adr 1110 KD1 30003 10:35:513 6 Lr 1.38675 m E 28.618 m
893 For M5 Adr 1111 KD1 10027 10:35:51 6 Z 4.44329 m
894 For M5 Adr 1112 KD1 10027 10:39:283 6 Lr 1.69754 m E 19.008 m
895 For M5 Adr 1113 KD1 30004 10:39:523 6 Lv 1.52641 m E 19.069 m
896 For M5 Adr 1114 KD1 30004 10:40:023 6 Lv 1.52641 m E 19.068 m
897 For M5 Adr 1115 KD1 10027 10:40:243 6 Lr 1.69754 m E 19.005 m
898 For M5 Adr 1116 KD1 30004 10:40:24 6 Z 4.61442 m
899 For M5 Adr 1117 KD1 30004 10:43:223 6 Lr 1.53664 m E 19.451 m
900 For M5 Adr 1118 KD1 10018 10:43:473 6 Lv 1.77885 m E 19.381 m
901 For M5 Adr 1119 KD1 10018 10:43:563 6 Lv 1.77887 m E 19.381 m
902 For M5 Adr 1120 KD1 30004 10:44:183 6 Lr 1.53667 m E 19.455 m
903 For M5 Adr 1121 KD1 10018 10:44:18 6 Z 4.37222 m
904 For M5 Adr 1122 KD1 10018 10:48:463 6 Lr 1.51624 m E 28.858 m
905 For M5 Adr 1123 KD1 10009 10:49:213 6 Lv 1.76559 m E 29.011 m
906 For M5 Adr 1124 KD1 10009 10:49:323 6 Lv 1.76568 m E 29.007 m
907 For M5 Adr 1125 KD1 10018 10:50:123 6 Lr 1.51630 m E 28.874 m
908 For M5 Adr 1126 KD1 10009 10:50:12 6 Z 4.12286 m
909 For M5 Adr 1127 KD1 10009 10:53:433 6 Lr 1.50785 m E 15.483 m
910 For M5 Adr 1128 KD1 10006 10:54:163 6 Lv 1.92998 m E 17.279 m
911 For M5 Adr 1129 KD1 10006 10:54:263 6 Lv 1.92997 m E 17.281 m
912 For M5 Adr 1130 KD1 10009 10:54:503 6 Lr 1.50796 m E 15.468 m
913 For M5 Adr 1131 KD1 10006 10:54:50 6 Z 3.70079 m
914 For M5 Adr 1132 KD1 10006 10:55:133 6 Lr 1.92996 m E 17.279 m
915 For M5 Adr 1133 KD1 10009 10:55:423 6 Lv 1.50798 m E 15.468 m
916 For M5 Adr 1134 KD1 10009 10:55:523 6 Lv 1.50806 m E 15.467 m
917 For M5 Adr 1135 KD1 10006 10:56:143 6 Lr 1.92999 m E 17.275 m
918 For M5 Adr 1136 KD1 10009 10:56:14 6 Z 4.12274 m
919 For M5 Adr 1137 KD1 10009 10:58:263 6 Lr 1.73986 m E 28.805 m
920 For M5 Adr 1138 KD1 10018 10:58:543 6 Lv 1.49083 m E 29.081 m
921 For M5 Adr 1139 KD1 10018 10:59:033 6 Lv 1.49078 m E 29.082 m
922 For M5 Adr 1140 KD1 10009 10:59:283 6 Lr 1.73999 m E 28.805 m
923 For M5 Adr 1141 KD1 10018 10:59:28 6 Z 4.37186 m
924 For M5 Adr 1142 KD1 10018 11:01:403 6 Lr 1.79485 m E 19.369 m
925 For M5 Adr 1143 KD1 30005 11:02:203 6 Lv 1.55327 m E 19.464 m
926 For M5 Adr 1144 KD1 30005 11:02:323 6 Lv 1.55329 m E 19.460 m
927 For M5 Adr 1145 KD1 10018 11:02:583 6 Lr 1.79484 m E 19.365 m
928 For M5 Adr 1146 KD1 30005 11:02:58 6 Z 4.61343 m
929 For M5 Adr 1147 KD1 30005 11:05:133 6 Lr 1.51209 m E 19.018 m
930 For M5 Adr 1148 KD1 10027 11:05:443 6 Lv 1.68262 m E 19.066 m
931 For M5 Adr 1149 KD1 10027 11:05:533 6 Lv 1.68267 m E 19.065 m
932 For M5 Adr 1150 KD1 30005 11:06:163 6 Lr 1.51209 m E 19.019 m
933 For M5 Adr 1151 KD1 10027 11:06:16 6 Z 4.44287 m
934 For M5 Adr 1152 KD1 10027 11:08:083 6 Lr 1.48437 m E 29.450 m
935 For M5 Adr 1153 KD1 30006 11:08:453 6 Lv 1.37039 m E 28.524 m
936 For M5 Adr 1154 KD1 30006 11:08:543 6 Lv 1.37040 m E 28.528 m
937 For M5 Adr 1155 KD1 10027 11:09:203 6 Lr 1.48442 m E 29.415 m
938 For M5 Adr 1156 KD1 30006 11:09:20 6 Z 4.55687 m
939 For M5 Adr 1157 KD1 30006 11:11:553 6 Lr 1.73019 m E 4.625 m
940 For M5 Adr 1158 KD1 10042 11:12:293 6 Lv 1.82022 m E 4.806 m
941 For M5 Adr 1159 KD1 10042 11:12:373 6 Lv 1.82019 m E 4.808 m
942 For M5 Adr 1160 KD1 30006 11:13:013 6 Lr 1.73016 m E 4.626 m
943 For M5 Adr 1161 KD1 10042 11:13:01 6 Z 4.46684 m
944 For M5 Adr 1162 KD1 10042 11:15:033 6 Lr 1.79086 m E 12.963 m
945 For M5 Adr 1163 KD1 10041 11:15:473 6 Lv 1.65881 m E 12.773 m
946 For M5 Adr 1164 KD1 10041 11:15:553 6 Lv 1.65884 m E 12.772 m
947 For M5 Adr 1165 KD1 10042 11:16:143 6 Lr 1.79084 m E 12.961 m
948 For M5 Adr 1166 KD1 10041 11:16:14 6 Z 4.59887 m
949 For M5 Adr 1167 KD1 10041 11:18:093 6 Lr 1.34751 m E 15.795 m
950 For M5 Adr 1168 KD1 10040 11:18:353 6 Lv 1.66887 m E 16.356 m
951 For M5 Adr 1169 KD1 10040 11:18:443 6 Lv 1.66885 m E 16.358 m
952 For M5 Adr 1170 KD1 10041 11:19:043 6 Lr 1.34750 m E 15.798 m
953 For M5 Adr 1171 KD1 10040 11:19:04 6 Z 4.27751 m
954 For M5 Adr 1172 KD1 10040 11:20:573 6 Lr 1.86215 m E 16.369 m
955 For M5 Adr 1173 KD1 10044 11:21:303 6 Lv 1.48325 m E 18.739 m
956 For M5 Adr 1174 KD1 10044 11:21:383 6 Lv 1.48328 m E 18.741 m
957 For M5 Adr 1175 KD1 10040 11:22:013 6 Lr 1.86215 m E 16.367 m
958 For M5 Adr 1176 KD1 10044 11:22:01 6 Z 4.65640 m
959 For M5 Adr 1177 KD1 10044 11:23:573 6 Lr 1.54273 m E 29.939 m
960 For M5 Adr 1178 KD1 10053 11:24:253 6 Lv 1.81270 m E 29.602 m
961 For M5 Adr 1179 KD1 10053 11:24:353 6 Lv 1.81271 m E 29.606 m
962 For M5 Adr 1180 KD1 10044 11:24:543 6 Lr 1.54276 m E 29.936 m
963 For M5 Adr 1181 KD1 10053 11:24:54 6 Z 4.38644 m
964 For M5 Adr 1182 KD1 10053 11:27:173 6 Lr 1.65224 m E 12.259 m
965 For M5 Adr 1183 KD1 30007 11:27:423 6 Lv 1.62743 m E 12.460 m
966 For M5 Adr 1184 KD1 30007 11:27:523 6 Lv 1.62744 m E 12.461 m
967 For M5 Adr 1185 KD1 10053 11:28:113 6 Lr 1.65224 m E 12.257 m
968 For M5 Adr 1186 KD1 30007 11:28:11 6 Z 4.41124 m
969 For M5 Adr 1189 KD1 30007 11:31:463 6 Lr 1.49070 m E 20.101 m
970 For M5 Adr 1190 KD1 10059 11:32:133 6 Lv 1.75897 m E 18.523 m
971 For M5 Adr 1191 KD1 10059 11:32:213 6 Lv 1.75892 m E 18.522 m
972 For M5 Adr 1192 KD1 30007 11:32:423 6 Lr 1.49075 m E 20.097 m
973 For M5 Adr 1193 KD1 10059 11:32:42 6 Z 4.14302 m
974 For M5 Adr 1194 KD1 10059 11:34:423 6 Lr 1.66374 m E 20.145 m
975 For M5 Adr 1195 KD1 30008 11:35:113 6 Lv 1.58386 m E 19.960 m
976 For M5 Adr 1196 KD1 30008 11:35:193 6 Lv 1.58389 m E 19.959 m
977 For M5 Adr 1197 KD1 10059 11:35:573 6 Lr 1.66375 m E 20.143 m
978 For M5 Adr 1198 KD1 30008 11:35:57 6 Z 4.22289 m
979 For M5 Adr 1199 KD1 30008 11:37:593 6 Lr 1.58922 m E 20.268 m
980 For M5 Adr 1200 KD1 10057 11:38:363 6 Lv 1.93427 m E 19.774 m
981 For M5 Adr 1201 KD1 10057 11:38:453 6 Lv 1.93425 m E 19.773 m
982 For M5 Adr 1202 KD1 30008 11:39:123 6 Lr 1.58921 m E 20.268 m
983 For M5 Adr 1203 KD1 10057 11:39:12 6 Z 3.87785 m
984 For M5 Adr 1204 KD1 10057 11:41:073 6 Lr 1.46444 m E 23.474 m
985 For M5 Adr 1205 KD1 10055 11:41:323 6 Lv 1.77959 m E 23.416 m
986 For M5 Adr 1206 KD1 10055 11:41:403 6 Lv 1.77961 m E 23.419 m
987 For M5 Adr 1207 KD1 10057 11:42:023 6 Lr 1.46448 m E 23.481 m
988 For M5 Adr 1208 KD1 10055 11:42:02 6 Z 3.56271 m
989 For M5 Adr 1209 KD1 10055 11:44:043 6 Lr 1.71700 m E 18.545 m
990 For M5 Adr 1210 KD1 666 11:44:283 6 Lv 1.38939 m E 18.452 m
991 For M5 Adr 1211 KD1 666 11:44:373 6 Lv 1.38939 m E 18.451 m
992 For M5 Adr 1212 KD1 10055 11:44:583 6 Lr 1.71711 m E 18.540 m
993 For M5 Adr 1213 KD1 666 11:44:58 6 Z 3.89037 m
994 For M5 Adr 1214 KD1 666 6 Sh -0.00063 m dz 0.00063 m Z 3.89100 m
995 For M5 Adr 1215 KD2 666 32 6 Sr 614.58 m Sv 615.09 m Z 3.89037 m
996 For M5 Adr 1216 TO Zugende 6

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,62 @@
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;
10049a;985,2561;1715,2109;99,9965;
10048;957,3889;1716,2949;99,7212;
10047;929,5334;1712,6429;99,6076;
10046;910,6630;1716,0969;99,5459;
10057;969,6876;1655,5970;99,7039;
10055;922,4731;1647,7452;99,4658;
10054;860,4481;1636,6722;99,7093;
10058;1013,2592;1646,6356;99,8513;
10056;939,9763;1636,4179;99,4027;
1 10009 1000,0000 2000,0000 100,0000
2 10006 1000,0000 2032,6863 99,5825
3 10010 1011,8143 1973,3252 99,9259
4 10018 1008,5759 1942,7620 100,2553
5 10008 979,7022 1991,4010 99,7320
6 10005 966,5154 2014,6496 99,7200
7 10003 908,4312 1996,1248 99,7403
8 10004 954,1536 2021,6822 99,4916
9 10007 921,7481 1973,6201 99,9176
10 10001 833,9439 1978,3737 99,8946
11 10002 875,9684 1998,5174 99,5867
12 100016 928,2783 1944,0082 100,0459
13 10011 908,4308 1996,1277 99,7822
14 10011a 844,9567 1891,1570 99,8117
15 10026 1020,0059 1913,8703 100,3059
16 10027 1016,9451 1866,2914 100,3251
17 10043 1031,2077 1822,4739 100,3035
18 10044 1025,9760 1782,4835 100,5461
19 10021 992,7607 1904,8854 100,3533
20 10020 984,6187 1903,3601 100,3423
21 10024 997,4831 1881,7862 100,3032
22 10025 996,3241 1866,8440 100,4102
23 10022 990,0679 1896,5360 100,2194
24 10023 987,3223 1889,8762 100,3430
25 10019 962,6387 1902,3565 99,9772
26 10033 964,0191 1860,8023 99,8551
27 10017 931,6761 1900,9945 99,9572
28 10052 1037,8750 1757,2999 100,2737
29 10042 1017,3489 1803,0742 100,3441
30 10053 1033,3758 1723,4258 100,2774
31 10037 966,2253 1774,2051 99,9957
32 10040 990,8832 1780,9678 100,1677
33 10041 993,2769 1812,0310 100,4749
34 10038 958,1899 1804,7135 100,0741
35 10051 1008,9811 1750,1838 100,2880
36 10036 948,6403 1763,5807 100,0063
37 10035 910,1265 1768,0099 100,0781
38 10039 960,3884 1820,0543 100,0983
39 10059 1049,2587 1662,5451 100,0148
40 10050 1010,0246 1726,2445 100,1493
41 10049 984,7667 1714,5709 100,0101
42 100 957,3912 1716,2864 99,7777
43 10013 900,9076 1902,8730 99,7911
44 10028 853,9608 1815,7417 99,7793
45 10012 895,3032 1924,1523 99,8758
46 10014 913,9706 1918,7731 99,8872
47 10031 937,1557 1855,2805 99,8479
48 10015 912,5157 1937,6471 99,9834
49 10032 954,6732 1845,9356 99,7240
50 10030 908,4749 1828,8008 99,5581
51 10029 909,3343 1814,8767 99,5486
52 10034 860,2357 1758,9282 99,7370
53 10045 867,2324 1705,0630 99,7214
54 10049a 985,2561 1715,2109 99,9965
55 10048 957,3889 1716,2949 99,7212
56 10047 929,5334 1712,6429 99,6076
57 10046 910,6630 1716,0969 99,5459
58 10057 969,6876 1655,5970 99,7039
59 10055 922,4731 1647,7452 99,4658
60 10054 860,4481 1636,6722 99,7093
61 10058 1013,2592 1646,6356 99,8513
62 10056 939,9763 1636,4179 99,4027

View File

@@ -0,0 +1,59 @@
10009;1000;2000;100
10006;1000;2032,6863;99,5825
10010;1011,8143;1973,3252;99,9259
10018;1008,5759;1942,762;100,2553
10008;979,7022;1991,401;99,732
10005;966,5154;2014,6496;99,72
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
10016;928,2783;1944,0082;100,0459
10011;844,9567;1891,157;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,976;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,844;100,4102
10022;990,0679;1896,536;100,2194
10023;987,3223;1889,8762;100,343
10019;962,6387;1902,3565;99,9772
10033;964,0191;1860,8023;99,8551
10017;931,6761;1900,9945;99,9572
10052;1037,875;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,031;100,4749
10038;958,1899;1804,7135;100,0741
10051;1008,9811;1750,1838;100,288
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
10013;900,9076;1902,873;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,724
10030;908,4749;1828,8008;99,5581
10029;909,3343;1814,8767;99,5486
10034;860,2357;1758,9282;99,737
10045;867,2324;1705,063;99,7214
10049;985,2561;1715,2109;99,9965
10048;957,3889;1716,2949;99,7212
10047;929,5334;1712,6429;99,6076
10046;910,663;1716,0969;99,5459
10057;969,6876;1655,597;99,7039
10055;922,4731;1647,7452;99,4658
10054;860,4481;1636,6722;99,7093
10058;1013,2592;1646,6356;99,8513
10056;939,9763;1636,4179;99,4027
1 10009 1000 2000 100
2 10006 1000 2032,6863 99,5825
3 10010 1011,8143 1973,3252 99,9259
4 10018 1008,5759 1942,762 100,2553
5 10008 979,7022 1991,401 99,732
6 10005 966,5154 2014,6496 99,72
7 10003 908,4312 1996,1248 99,7403
8 10004 954,1536 2021,6822 99,4916
9 10007 921,7481 1973,6201 99,9176
10 10001 833,9439 1978,3737 99,8946
11 10002 875,9684 1998,5174 99,5867
12 10016 928,2783 1944,0082 100,0459
13 10011 844,9567 1891,157 99,8117
14 10026 1020,0059 1913,8703 100,3059
15 10027 1016,9451 1866,2914 100,3251
16 10043 1031,2077 1822,4739 100,3035
17 10044 1025,976 1782,4835 100,5461
18 10021 992,7607 1904,8854 100,3533
19 10020 984,6187 1903,3601 100,3423
20 10024 997,4831 1881,7862 100,3032
21 10025 996,3241 1866,844 100,4102
22 10022 990,0679 1896,536 100,2194
23 10023 987,3223 1889,8762 100,343
24 10019 962,6387 1902,3565 99,9772
25 10033 964,0191 1860,8023 99,8551
26 10017 931,6761 1900,9945 99,9572
27 10052 1037,875 1757,2999 100,2737
28 10042 1017,3489 1803,0742 100,3441
29 10053 1033,3758 1723,4258 100,2774
30 10037 966,2253 1774,2051 99,9957
31 10040 990,8832 1780,9678 100,1677
32 10041 993,2769 1812,031 100,4749
33 10038 958,1899 1804,7135 100,0741
34 10051 1008,9811 1750,1838 100,288
35 10036 948,6403 1763,5807 100,0063
36 10035 910,1265 1768,0099 100,0781
37 10039 960,3884 1820,0543 100,0983
38 10059 1049,2587 1662,5451 100,0148
39 10050 1010,0246 1726,2445 100,1493
40 10013 900,9076 1902,873 99,7911
41 10028 853,9608 1815,7417 99,7793
42 10012 895,3032 1924,1523 99,8758
43 10014 913,9706 1918,7731 99,8872
44 10031 937,1557 1855,2805 99,8479
45 10015 912,5157 1937,6471 99,9834
46 10032 954,6732 1845,9356 99,724
47 10030 908,4749 1828,8008 99,5581
48 10029 909,3343 1814,8767 99,5486
49 10034 860,2357 1758,9282 99,737
50 10045 867,2324 1705,063 99,7214
51 10049 985,2561 1715,2109 99,9965
52 10048 957,3889 1716,2949 99,7212
53 10047 929,5334 1712,6429 99,6076
54 10046 910,663 1716,0969 99,5459
55 10057 969,6876 1655,597 99,7039
56 10055 922,4731 1647,7452 99,4658
57 10054 860,4481 1636,6722 99,7093
58 10058 1013,2592 1646,6356 99,8513
59 10056 939,9763 1636,4179 99,4027

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

411
Datenbank.py Normal file
View File

@@ -0,0 +1,411 @@
import os
import sqlite3
import sympy as sp
from Berechnungen import Einheitenumrechnung
from decimal import Decimal
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),
naeherungz_lh_niv NUMERIC(8,3),
naeherungx_us NUMERIC(9,3),
naeherungy_us NUMERIC(7,3),
naeherungz_us NUMERIC(8,3),
normalhoehe_hfp NUMERIC(5,3),
datumskoordinate_x INTEGER DEFAULT 0,
datumskoordinate_y INTEGER DEFAULT 0,
datumskoordinate_z INTEGER DEFAULT 0,
stabw_vorinfo_x NUMERIC(3, 8),
stabw_vorinfo_y NUMERIC(3, 8),
stabw_vorinfo_z NUMERIC(3, 8),
CONSTRAINT pk_Netzpunkte PRIMARY KEY (punktnummer)
);
""");
cursor.executescript("""CREATE TABLE Beobachtungen(
beobachtungenID INTEGER,
beobachtungsgruppeID INTEGER,
punktnummer_sp TEXT(10),
punktnummer_zp TEXT(10),
instrumenteID INTEGER,
tachymeter_richtung NUMERIC(8, 6),
tachymeter_zenitwinkel NUMERIC(8, 6),
tachymeter_distanz NUMERIC(8, 4),
gnss_bx NUMERIC(7, 4),
gnss_by NUMERIC(7, 4),
gnss_bz NUMERIC(7, 4),
gnss_m0 NUMERIC(1, 8),
gnss_q11 NUMERIC(1, 8),
gnss_q12 NUMERIC(1, 8),
gnss_q13 NUMERIC(1, 8),
gnss_q21 NUMERIC(1, 8),
gnss_q22 NUMERIC(1, 8),
gnss_q23 NUMERIC(1, 8),
gnss_q31 NUMERIC(1, 8),
gnss_q32 NUMERIC(1, 8),
gnss_q33 NUMERIC(1, 8),
niv_dh NUMERIC(8, 6),
niv_strecke NUMERIC(8, 6),
niv_anz_standpkte INTEGER,
dateiname TEXT(200),
CONSTRAINT pk_Beobachtungen PRIMARY KEY (beobachtungenID),
CONSTRAINT fk_Beobachtungen_Netzpunktesp FOREIGN KEY (punktnummer_sp) REFERENCES Netzpunkte(punktnummer),
CONSTRAINT fk_Beobachtungen_Netzpunktezp FOREIGN KEY (punktnummer_zp) REFERENCES Netzpunkte(punktnummer),
CONSTRAINT fk_Beobachtungen_Instrumente FOREIGN KEY (instrumenteID) REFERENCES Instrumente(instrumenteID)
);
""");
cursor.executescript("""CREATE TABLE Instrumente(
instrumenteID INTEGER,
typ TEXT(200),
name TEXT(200),
CONSTRAINT pk_Instrumente PRIMARY KEY (instrumenteID)
);
""")
cursor.executescript("""CREATE TABLE Genauigkeiten(
genauigkeitenID INTEGER,
instrumenteID INTEGER,
beobachtungsart TEXT(25),
stabw_apriori_konstant NUMERIC(3, 8),
stabw_apriori_streckenprop NUMERIC(3, 8),
CONSTRAINT pk_Genauigkeiten PRIMARY KEY (genauigkeitenID),
CONSTRAINT fk_Genauigkeiten_Instrumente FOREIGN KEY (instrumenteID) REFERENCES Instrumente(instrumenteID)
);
""")
con.commit()
cursor.close()
con.close()
class Datenbankzugriff:
def __init__(self, pfad_datenbank):
self.pfad_datenbank = pfad_datenbank
def get_koordinaten(self, koordinatenart, ausgabeart = "Dict"):
con = sqlite3.connect(self.pfad_datenbank)
cursor = con.cursor()
if koordinatenart == "naeherung_lh":
values = "punktnummer, naeherungx_lh, naeherungy_lh, naeherungz_lh"
elif koordinatenart == "naeherung_us":
values = "punktnummer, naeherungx_us, naeherungy_us, naeherungz_us"
liste_koordinaten = cursor.execute(f"""
SELECT {values} FROM Netzpunkte;
""").fetchall()
cursor.close()
con.close()
liste_koordinaten = [
koordinate for koordinate in liste_koordinaten
if koordinate[1] is not None and koordinate[2] is not None and koordinate[3] is not None
]
if ausgabeart == "Dict":
return {
koordinate[0]: sp.Matrix([
sp.Float(str(koordinate[1])),
sp.Float(str(koordinate[2])),
sp.Float(str(koordinate[3]))
])
for koordinate in liste_koordinaten
}
def set_koordinaten(self, dict_koordinaten, koordinatenart):
con = sqlite3.connect(self.pfad_datenbank)
cursor = con.cursor()
daten = []
for punktnummer, wert in dict_koordinaten.items():
daten.append((
float(wert[0]),
float(wert[1]),
float(wert[2]),
str(punktnummer)
))
if koordinatenart == "naeherung_lh":
pass
elif koordinatenart == "naeherung_us":
cursor.executemany(f"""UPDATE Netzpunkte SET naeherungx_us = ?, naeherungy_us = ?, naeherungz_us = ? WHERE punktnummer = ? AND naeherungx_us IS NULL AND naeherungy_us IS NULL AND naeherungz_us IS NULL""", daten)
con.commit()
cursor.close()
con.close()
def set_instrument(self, typ, name):
con = sqlite3.connect(self.pfad_datenbank)
cursor = con.cursor()
liste_instrumente = cursor.execute("SELECT * FROM Instrumente WHERE typ = ? AND name =?", (typ, name)).fetchall()
if liste_instrumente == []:
cursor.execute(
"INSERT INTO Instrumente (typ, name) VALUES (?, ?)", (typ, name)
)
print(f"Das Instrument {name} wurde erfolgreich hinzugefügt.")
else:
id_instrument = cursor.execute(
"SELECT instrumenteID FROM Instrumente WHERE typ = ? AND name =?", (typ, name))
print(f"Das Instrument {name} ist bereits in der Datenbank vorhanden.\nEs hat die ID {id_instrument.fetchone()[0]}")
con.commit()
cursor.close()
con.close()
def set_genauigkeiten(self, instrumenteID, beobachtungsart, stabw_apriori_konstant =None, stabw_apriori_streckenprop =None):
con = sqlite3.connect(self.pfad_datenbank)
cursor = con.cursor()
instrumentenname = cursor.execute("SELECT name FROM Instrumente WHERE instrumenteID = ?",
(instrumenteID, )).fetchone()
if instrumentenname is None:
print(
f"Die InstumentenID {instrumenteID} ist in der Datenbank nicht vorhanden. Bitte zuerst das Instrument hinzufügen.")
cursor.close()
con.close()
return
instrumentenname = instrumentenname[0]
if stabw_apriori_konstant is None and stabw_apriori_streckenprop is None:
print(
"Es wurden keine Genauigkeiten importiert. Bitte stabw_apriori_konstant und / oder stabw_apriori_streckenprop angeben.")
cursor.close()
con.close()
return
if beobachtungsart == "Tachymeter_Richtung" or beobachtungsart == "Tachymeter_Zenitwinkel" :
stabw_apriori_konstant = Einheitenumrechnung.mgon_to_rad_Decimal(stabw_apriori_konstant)
if beobachtungsart == "Tachymeter_Strecke":
stabw_apriori_konstant = Einheitenumrechnung.mm_to_m(stabw_apriori_konstant)
if isinstance(stabw_apriori_konstant, Decimal):
stabw_apriori_konstant = float(stabw_apriori_konstant)
if isinstance(stabw_apriori_streckenprop, Decimal):
stabw_apriori_streckenprop = float(stabw_apriori_streckenprop)
sql = "SELECT 1 FROM Genauigkeiten WHERE instrumenteID = ? AND beobachtungsart = ?"
params = [instrumenteID, beobachtungsart]
if stabw_apriori_konstant is None:
sql += " AND stabw_apriori_konstant IS NULL"
else:
sql += " AND stabw_apriori_konstant = ?"
params.append(stabw_apriori_konstant)
if stabw_apriori_streckenprop is None:
sql += " AND stabw_apriori_streckenprop IS NULL"
else:
sql += " AND stabw_apriori_streckenprop = ?"
params.append(stabw_apriori_streckenprop)
liste_genauigkeiten = cursor.execute(sql, tuple(params)).fetchall()
if liste_genauigkeiten == []:
if stabw_apriori_konstant is not None and stabw_apriori_streckenprop is not None:
cursor.execute(
"INSERT INTO Genauigkeiten (instrumenteID, beobachtungsart, stabw_apriori_konstant, stabw_apriori_streckenprop) VALUES (?, ?, ?, ?)",
(instrumenteID, beobachtungsart, stabw_apriori_konstant, stabw_apriori_streckenprop)
)
print(
f"Die Genauigkeitsangabe für die Beobachtungsart {beobachtungsart} des Instrumentes {instrumentenname} wurde erfolgreich hinzugefügt.")
elif stabw_apriori_konstant is None and stabw_apriori_streckenprop is not None:
cursor.execute(
"INSERT INTO Genauigkeiten (instrumenteID, beobachtungsart, stabw_apriori_streckenprop) VALUES (?, ?, ?)",
(instrumenteID, beobachtungsart, stabw_apriori_streckenprop)
)
print(
f"Die Genauigkeitsangabe für die Beobachtungsart {beobachtungsart} des Instrumentes {instrumentenname} wurde erfolgreich hinzugefügt.")
elif stabw_apriori_streckenprop is None and stabw_apriori_konstant is not None:
cursor.execute(
"INSERT INTO Genauigkeiten (instrumenteID, beobachtungsart, stabw_apriori_konstant) VALUES (?, ?, ?)",
(instrumenteID, beobachtungsart, stabw_apriori_konstant)
)
print(
f"Die Genauigkeitsangabe für die Beobachtungsart {beobachtungsart} des Instrumentes {instrumentenname} wurde erfolgreich hinzugefügt.")
else:
print("Die Genauigkeitsangabe ist bereits in der Datenbank vorhanden.")
con.commit()
cursor.close()
con.close()
def set_datumskoordinaten(self, liste_datumskoordinaten_x, liste_datumskoordinaten_y, liste_datumskoordinaten_z, liste_datumskoordinaten_x_y_z):
con = sqlite3.connect(self.pfad_datenbank)
cursor = con.cursor()
liste_stabw_vorinfo_x = [str(row[0]).strip() for row in cursor.execute(
"SELECT punktnummer FROM Netzpunkte WHERE stabw_vorinfo_x IS NOT NULL").fetchall()]
liste_stabw_vorinfo_y = [str(row[0]).strip() for row in cursor.execute(
"SELECT punktnummer FROM Netzpunkte WHERE stabw_vorinfo_y IS NOT NULL").fetchall()]
liste_stabw_vorinfo_z = [str(row[0]).strip() for row in cursor.execute(
"SELECT punktnummer FROM Netzpunkte WHERE stabw_vorinfo_z IS NOT NULL").fetchall()]
liste_stabw_vorinfo_x_y_z = [str(row[0]).strip() for row in cursor.execute(
"SELECT punktnummer FROM Netzpunkte WHERE stabw_vorinfo_x IS NOT NULL AND stabw_vorinfo_y IS NOT NULL AND stabw_vorinfo_z IS NOT NULL").fetchall()]
if liste_datumskoordinaten_x != []:
for punktnummer in liste_datumskoordinaten_x:
punktnummer = str(punktnummer).strip()
if punktnummer in liste_stabw_vorinfo_x:
cursor.execute(f"UPDATE Netzpunkte SET datumskoordinate_x = 1 WHERE punktnummer = ? AND stabw_vorinfo_x IS NOT NULL", (str(punktnummer),))
else:
print(f"Die X-Koordinate des Punktes {punktnummer} wurde nicht in eine Datumskoordinate geändert, weil keine Vorinformationen zur Standardabweichung der X-Koordinate des Punktes vorliegen. Diese bitte zuerst erfassen und Datumsdefinition wiederholen.")
if liste_datumskoordinaten_y != []:
for punktnummer in liste_datumskoordinaten_y:
punktnummer = str(punktnummer).strip()
if punktnummer in liste_stabw_vorinfo_y:
cursor.execute(f"UPDATE Netzpunkte SET datumskoordinate_y = 1 WHERE punktnummer = ? AND stabw_vorinfo_y IS NOT NULL", (str(punktnummer),))
else:
print(f"Die Y-Koordinate des Punktes {punktnummer} wurde nicht in eine Datumskoordinate geändert, weil keine Vorinformationen zur Standardabweichung der Y-Koordinate des Punktes vorliegen. Diese bitte zuerst erfassen und Datumsdefinition wiederholen.")
if liste_datumskoordinaten_z != []:
for punktnummer in liste_datumskoordinaten_z:
punktnummer = str(punktnummer).strip()
if punktnummer in liste_stabw_vorinfo_z:
cursor.execute(f"UPDATE Netzpunkte SET datumskoordinate_z = 1 WHERE punktnummer = ? AND stabw_vorinfo_z IS NOT NULL", (str(punktnummer),))
else:
print(f"Die Z-Koordinate des Punktes {punktnummer} wurde nicht in eine Datumskoordinate geändert, weil keine Vorinformationen zur Standardabweichung der Z-Koordinate des Punktes vorliegen. Diese bitte zuerst erfassen und Datumsdefinition wiederholen.")
if liste_datumskoordinaten_x_y_z != []:
for punktnummer in liste_datumskoordinaten_x_y_z:
punktnummer = str(punktnummer).strip()
if punktnummer in liste_stabw_vorinfo_x_y_z:
cursor.execute(f"UPDATE Netzpunkte SET datumskoordinate_x = 1, datumskoordinate_y = 1, datumskoordinate_z = 1 WHERE punktnummer = ? AND stabw_vorinfo_x IS NOT NULL AND stabw_vorinfo_y IS NOT NULL AND stabw_vorinfo_z IS NOT NULL", (str(punktnummer),))
else:
print(f"Der Punkt {punktnummer} wurde nicht in einen Datumspunkt geändert, weil nicht alle Vorinformationen zur Standardabweichung der Koordinaten des Punktes vorliegen. Diese bitte zuerst erfassen und Datumsdefinition wiederholen.")
con.commit()
cursor.close()
con.close()
def set_datumskoordinaten_to_neupunkte(self, liste_datumskoordinaten_x, liste_datumskoordinaten_y, liste_datumskoordinaten_z, liste_datumskoordinaten_x_y_z):
con = sqlite3.connect(self.pfad_datenbank)
cursor = con.cursor()
if liste_datumskoordinaten_x != []:
for punktnummer in liste_datumskoordinaten_x:
punktnummer = str(punktnummer).strip()
cursor.execute(
f"UPDATE Netzpunkte SET datumskoordinate_x = 0 WHERE punktnummer = ?",
(str(punktnummer),))
if liste_datumskoordinaten_y != []:
for punktnummer in liste_datumskoordinaten_y:
punktnummer = str(punktnummer).strip()
cursor.execute(
f"UPDATE Netzpunkte SET datumskoordinate_y = 0 WHERE punktnummer = ?",
(str(punktnummer),))
if liste_datumskoordinaten_z != []:
for punktnummer in liste_datumskoordinaten_z:
punktnummer = str(punktnummer).strip()
cursor.execute(
f"UPDATE Netzpunkte SET datumskoordinate_z = 0 WHERE punktnummer = ?",
(str(punktnummer),))
if liste_datumskoordinaten_x_y_z != []:
for punktnummer in liste_datumskoordinaten_x_y_z:
punktnummer = str(punktnummer).strip()
cursor.execute(
f"UPDATE Netzpunkte SET datumskoordinate_x = 0, datumskoordinate_y = 0, datumskoordinate_z = 0 WHERE punktnummer = ?",
(str(punktnummer),))
con.commit()
cursor.close()
con.close()
def set_normalhoehe_hfp(self, liste_normalhoehe_hfp):
liste_hfp_in_db = self.get_normalhoehe_hfp()
if liste_normalhoehe_hfp != []:
con = sqlite3.connect(self.pfad_datenbank)
cursor = con.cursor()
liste_punktnummern_in_db = [str(r[0]) for r in cursor.execute(
"SELECT punktnummer FROM Netzpunkte"
).fetchall()]
ausgaben = []
for hfp in liste_normalhoehe_hfp:
if str(hfp[0]) in liste_punktnummern_in_db:
cursor.execute("UPDATE Netzpunkte SET normalhoehe_hfp = ? WHERE punktnummer = ?",
(hfp[1], hfp[0])
)
ausgaben.append(f"Der HFP {hfp[0]} wurde aktualisiert.")
else:
cursor.execute(
"INSERT INTO Netzpunkte (punktnummer, normalhoehe_hfp) VALUES (?, ?)",
(hfp[0], hfp[1])
)
ausgaben.append(f"Der HFP {hfp[0]} wurde neu hinzugefügt.")
con.commit()
cursor.close()
con.close()
return "\n".join(ausgaben)
else:
return f"Es wurden keine neuen Normalhöhen übergeben. Folgende Normalhöhen sind in der Datenbank enthalten: {liste_hfp_in_db}"
def get_normalhoehe_hfp(self):
con = sqlite3.connect(self.pfad_datenbank)
cursor = con.cursor()
liste_hfp = cursor.execute("SELECT punktnummer, normalhoehe_hfp FROM Netzpunkte WHERE normalhoehe_hfp IS NOT NULL").fetchall()
cursor.close()
con.close()
return liste_hfp
def get_instrument_liste(self, typ):
con = sqlite3.connect(self.pfad_datenbank)
cursor = con.cursor()
liste_instrumente = cursor.execute("SELECT * FROM Instrumente WHERE typ = ?", (typ,)).fetchall()
liste_typen = cursor.execute("SELECT DISTINCT typ FROM Instrumente").fetchall()
cursor.close()
con.close()
if liste_instrumente == []:
liste_instrumente = f"Kein Instrument vom Typ {typ} gefunden. Folgende Typen stehen aktuell zur Auswahl: {liste_typen}"
return liste_instrumente
def get_genauigkeiten_dict(self):
dict = {}
con = sqlite3.connect(self.pfad_datenbank)
cursor = con.cursor()
liste_genauigkeiten = cursor.execute("SELECT * FROM Genauigkeiten").fetchall()
for genauigkeit in liste_genauigkeiten:
dict[genauigkeit[0]] = genauigkeit[1:]
cursor.close()
con.close()
return dict
def get_instrumenteID_beobachtungenID_dict(self):
dict = {}
con = sqlite3.connect(self.pfad_datenbank)
cursor = con.cursor()
liste_beobachtungen_instrumente = cursor.execute("SELECT beobachtungenID, instrumenteID FROM Beobachtungen").fetchall()
for i in liste_beobachtungen_instrumente:
dict[i[0]] = i[1]
cursor.close()
con.close()
return dict
def get_beobachtungen_id_beobachtungsgruppe_standpunkt_zielpunkt(self, beobachtungsart):
con = sqlite3.connect(self.pfad_datenbank)
cursor = con.cursor()
liste_beobachtungen = cursor.execute(f"SELECT beobachtungenID, beobachtungsgruppeID, punktnummer_sp, punktnummer_zp FROM Beobachtungen WHERE {beobachtungsart} IS NOT NULL").fetchall()
cursor.close()
con.close()
return liste_beobachtungen
def get_beobachtungen_from_beobachtungenid(self):
con = sqlite3.connect(self.pfad_datenbank)
cursor = con.cursor()
liste_beobachtungen = cursor.execute(f"SELECT punktnummer_sp, punktnummer_zp, beobachtungenID, beobachtungsgruppeID, tachymeter_richtung, tachymeter_zenitwinkel, tachymeter_distanz FROM Beobachtungen").fetchall()
cursor.close()
con.close()
return liste_beobachtungen

154
Datumsfestlegung.py Normal file
View File

@@ -0,0 +1,154 @@
import sympy as sp
from typing import Iterable, List, Sequence, Tuple, Optional
class Datumsfestlegung:
@staticmethod
def datumskomponenten(
auswahl: Iterable[Tuple[str, str]],
liste_punktnummern: Sequence[str],
*,
layout: str = "XYZ"
) -> List[int]:
punkt2pos = {str(p): i for i, p in enumerate(liste_punktnummern)}
layout = layout.upper()
if layout != "XYZ":
raise ValueError("Nur layout='XYZ' unterstützt (wie bei euch).")
comp2off = {"X": 0, "Y": 1, "Z": 2}
aktive: List[int] = []
for pt, comp in auswahl:
spt = str(pt)
c = comp.upper()
if spt not in punkt2pos:
raise KeyError(f"Punkt '{pt}' nicht in liste_punktnummern.")
if c not in comp2off:
raise ValueError(f"Komponente '{comp}' ungültig. Nur X,Y,Z.")
p = punkt2pos[spt]
aktive.append(3 * p + comp2off[c])
# Duplikate entfernen
out, seen = [], set()
for i in aktive:
if i not in seen:
seen.add(i)
out.append(i)
return out
@staticmethod
def auswahlmatrix_E(u: int, aktive_unbekannte_indices: Iterable[int]) -> sp.Matrix:
E = sp.zeros(u, u)
for idx in aktive_unbekannte_indices:
i = int(idx)
if not (0 <= i < u):
raise IndexError(f"Aktiver Index {i} außerhalb [0,{u-1}]")
E[i, i] = 1
return E
@staticmethod
def raenderungsmatrix_G(
x0: sp.Matrix,
liste_punktnummern: Sequence[str],
*,
mit_massstab: bool = True,
layout: str = "XYZ",
) -> sp.Matrix:
if x0.cols != 1:
raise ValueError("x0 muss Spaltenvektor sein.")
layout = layout.upper()
if layout != "XYZ":
raise ValueError("Nur layout='XYZ' unterstützt (wie bei euch).")
nP = len(liste_punktnummern)
u = x0.rows
d = 7 if mit_massstab else 6
G = sp.zeros(u, d)
for p in range(nP):
ix, iy, iz = 3*p, 3*p+1, 3*p+2
xi, yi, zi = x0[ix, 0], x0[iy, 0], x0[iz, 0]
# Translationen
G[ix, 0] = 1
G[iy, 1] = 1
G[iz, 2] = 1
# Rotationen
G[iy, 3] = -zi; G[iz, 3] = yi # Rx
G[ix, 4] = zi; G[iz, 4] = -xi # Ry
G[ix, 5] = -yi; G[iy, 5] = xi # Rz
# Maßstab
if mit_massstab:
G[ix, 6] = xi
G[iy, 6] = yi
G[iz, 6] = zi
return G
@staticmethod
def berechne_dx_geraendert(N: sp.Matrix, n: sp.Matrix, Gi: sp.Matrix) -> sp.Matrix:
if N.rows != N.cols:
raise ValueError("N muss quadratisch sein.")
if n.cols != 1:
raise ValueError("n muss Spaltenvektor sein.")
if Gi.rows != N.rows:
raise ValueError("Gi hat falsche Zeilenzahl.")
u = N.rows
d = Gi.cols
K = N.row_join(Gi)
K = K.col_join(Gi.T.row_join(sp.zeros(d, d)))
rhs = n.col_join(sp.zeros(d, 1))
sol = K.LUsolve(rhs)
return sol[:u, :]
@staticmethod
def weiches_datum(
A: sp.Matrix,
dl: sp.Matrix,
Q_ll: sp.Matrix,
x0: sp.Matrix,
anschluss_indices: Sequence[int],
anschluss_werte: sp.Matrix,
Sigma_AA: Optional[sp.Matrix] = None,
) -> Tuple[sp.Matrix, sp.Matrix, sp.Matrix]:
if dl.cols != 1 or x0.cols != 1:
raise ValueError("dl und x0 müssen Spaltenvektoren sein.")
if A.rows != dl.rows:
raise ValueError("A.rows muss dl.rows entsprechen.")
if A.cols != x0.rows:
raise ValueError("A.cols muss x0.rows entsprechen.")
if Q_ll.rows != Q_ll.cols or Q_ll.rows != A.rows:
raise ValueError("Q_ll muss (n×n) sein und zu A.rows passen.")
u = A.cols
idx = [int(i) for i in anschluss_indices]
m = len(idx)
if anschluss_werte.cols != 1 or anschluss_werte.rows != m:
raise ValueError("anschluss_werte muss (m×1) sein.")
if Sigma_AA is None:
Sigma_AA = sp.eye(m)
if Sigma_AA.rows != m or Sigma_AA.cols != m:
raise ValueError("Sigma_AA muss (m×m) sein.")
A_A = sp.zeros(m, u)
for r, j in enumerate(idx):
if not (0 <= j < u):
raise IndexError(f"Anschluss-Index {j} außerhalb [0,{u-1}]")
A_A[r, j] = 1
x0_A = sp.Matrix([[x0[j, 0]] for j in idx])
dl_A = anschluss_werte - x0_A
A_ext = A.col_join(A_A)
dl_ext = dl.col_join(dl_A)
Q_ext = sp.zeros(Q_ll.rows + m, Q_ll.cols + m)
Q_ext[:Q_ll.rows, :Q_ll.cols] = Q_ll
Q_ext[Q_ll.rows:, Q_ll.cols:] = Sigma_AA
return A_ext, dl_ext, Q_ext

60
Export.py Normal file
View File

@@ -0,0 +1,60 @@
import csv
class Export:
def __init__(self):
pass
@staticmethod
def matrix_to_csv(dateiname, liste_spaltenbeschriftung, liste_zeilenbeschriftung, Matrix, beschriftung_kopfzeile = ""):
with open(dateiname, "w", newline="", encoding="utf-8") as csvfile:
writer = csv.writer(csvfile, delimiter=";")
kopfzeile = [beschriftung_kopfzeile]
for spaltenbeschriftung in liste_spaltenbeschriftung:
kopfzeile.append(str(spaltenbeschriftung))
writer.writerow(kopfzeile)
for zeilenbeschriftung, zeile in zip(liste_zeilenbeschriftung, Matrix.tolist()):
zeile_als_text = [zeilenbeschriftung]
for eintrag in zeile:
try:
eintrag_text = str(eintrag).replace(".", ",")
except Exception:
eintrag_text = str(eintrag)
zeile_als_text.append(eintrag_text)
writer.writerow(zeile_als_text)
@staticmethod
def ausgleichung_to_datei(dateiname, dict_ausgleichung):
with open(dateiname, "w", newline="", encoding="utf-8") as csvfile:
writer = csv.writer(csvfile, delimiter=";")
writer.writerow(["Parameter", "Wert"])
for key, value in dict_ausgleichung.items():
if hasattr(value, "tolist"):
rows = value.rows
cols = value.cols
writer.writerow([key, f"Matrix {rows}x{cols}"])
for i, zeile in enumerate(value.tolist()):
zeile_als_text = [f"{key}_zeile_{i+1}"]
for eintrag in zeile:
try:
eintrag_float = float(eintrag)
eintrag_text = f"{eintrag_float}".replace(".", ",")
except Exception:
eintrag_text = str(eintrag)
zeile_als_text.append(eintrag_text)
writer.writerow(zeile_als_text)
else:
try:
value_float = float(value)
value_text = f"{value_float}".replace(".", ",")
except Exception:
value_text = str(value)
writer.writerow([key, value_text])

700
Funktionales_Modell.py Normal file
View File

@@ -0,0 +1,700 @@
from Datenbank import *
import sympy as sp
from Export import Export
from Berechnungen import Berechnungen
class FunktionalesModell:
def __init__(self, pfad_datenbank, a, b):
self.pfad_datenbank = pfad_datenbank
self.berechnungen = Berechnungen(a, b)
self.substitutionen_dict = self.dict_substitutionen_uebergeordnetes_system()
self.dict_punkt_symbole = {}
def jacobi_matrix_symbolisch(self):
liste_beobachtungsarten = ["tachymeter_distanz", "tachymeter_richtung", "tachymeter_zenitwinkel"]
#liste_beobachtungsarten = ["tachymeter_distanz", "tachymeter_richtung"]
db_zugriff = Datenbankzugriff(self.pfad_datenbank)
liste_beobachtungen_rohdaten = []
liste_punktnummern =[]
liste_orientierungsunbekannte = []
for beobachtungsart in liste_beobachtungsarten:
liste_id_standpunkt_zielpunkt = db_zugriff.get_beobachtungen_id_beobachtungsgruppe_standpunkt_zielpunkt(beobachtungsart)
for beobachtungenID, beobachtungsgruppeID, standpunkt, zielpunkt in liste_id_standpunkt_zielpunkt:
liste_beobachtungen_rohdaten.append(
(beobachtungsart, beobachtungenID, beobachtungsgruppeID, standpunkt, zielpunkt)
)
if standpunkt not in liste_punktnummern:
liste_punktnummern.append(standpunkt)
if zielpunkt not in liste_punktnummern:
liste_punktnummern.append(zielpunkt)
if beobachtungsart == "tachymeter_richtung":
if beobachtungsgruppeID not in liste_orientierungsunbekannte:
liste_orientierungsunbekannte.append(beobachtungsgruppeID)
if liste_beobachtungen_rohdaten == []:
return None
#dict_punkt_symbole = {}
liste_unbekannte = []
for punkt in liste_punktnummern:
X, Y, Z = sp.symbols(f"X{punkt} Y{punkt} Z{punkt}")
self.dict_punkt_symbole[punkt] = (X, Y, Z)
liste_unbekannte.append(X)
liste_unbekannte.append(Y)
liste_unbekannte.append(Z)
dict_orientierung_symbole = {}
for orientierungsunbekannte in liste_orientierungsunbekannte:
O = sp.symbols(f"O{orientierungsunbekannte}")
dict_orientierung_symbole[orientierungsunbekannte] = O
liste_unbekannte.append(O)
liste_beobachtungsgleichungen_distanz =[]
liste_zeilenbeschriftungen_distanz = []
liste_A_richtung_zeilen = []
liste_zeilenbeschriftungen_richtung = []
liste_A_zenitwinkel_zeilen = []
liste_zeilenbeschriftungen_zenitwinkel = []
for beobachtungsart, beobachtungenID, beobachtungsgruppeID, standpunkt, zielpunkt in liste_beobachtungen_rohdaten:
X_sp, Y_sp, Z_sp = self.dict_punkt_symbole[standpunkt]
X_zp, Y_zp, Z_zp = self.dict_punkt_symbole[zielpunkt]
B_sp, L_sp = sp.symbols(f"B{standpunkt} L{standpunkt}")
# Symbole für die Beobachtungswerte (werden später numerisch substituiert)
alpha = sp.symbols(f"{beobachtungenID}_R_{beobachtungsgruppeID}_{standpunkt}_{zielpunkt}")
zw = sp.symbols(f"{beobachtungenID}_ZW_{beobachtungsgruppeID}_{standpunkt}_{zielpunkt}")
s = sp.symbols(f"{beobachtungenID}_SD_{beobachtungsgruppeID}_{standpunkt}_{zielpunkt}")
if beobachtungsart == "tachymeter_distanz":
beobachtungsgleichung = sp.sqrt((X_zp - X_sp) ** 2 + (Y_zp - Y_sp) ** 2 + (Z_zp - Z_sp) ** 2)
liste_beobachtungsgleichungen_distanz.append(beobachtungsgleichung)
liste_zeilenbeschriftungen_distanz.append(
f"{beobachtungenID}_SD_{beobachtungsgruppeID}_{standpunkt}_{zielpunkt}")
elif beobachtungsart == "tachymeter_richtung":
# Richtung nach Otepka: r = a12 + O
# dB und dL werden bewusst weggelassen
dX = X_zp - X_sp
dY = Y_zp - Y_sp
dZ = Z_zp - Z_sp
# Lokales System: x_loc = Nord, y_loc = Ost
x_loc = (-sp.sin(B_sp) * sp.cos(L_sp)) * dX + (-sp.sin(B_sp) * sp.sin(L_sp)) * dY + (sp.cos(B_sp)) * dZ
y_loc = (-sp.sin(L_sp)) * dX + (sp.cos(L_sp)) * dY
# Otepka-Nenner: s12 * sin(zw12) = sqrt(x_loc^2 + y_loc^2)
s_horiz = sp.sqrt(x_loc ** 2 + y_loc ** 2)
# sin(t12), cos(t12) im Horizontsystem (t12 = Azimut, rechtsdrehend, Bezug Nord)
sin_t = y_loc / s_horiz
cos_t = x_loc / s_horiz
# Partielle Ableitungen nach Otepka (15) ohne dB und dL
d_r_dX_zp = (sp.sin(B_sp) * sp.cos(L_sp) * sin_t - sp.sin(L_sp) * cos_t) / s_horiz
d_r_dY_zp = (sp.sin(B_sp) * sp.sin(L_sp) * sin_t + sp.cos(L_sp) * cos_t) / s_horiz
d_r_dZ_zp = (-sp.cos(B_sp) * sin_t) / s_horiz
# Standpunkt-Ableitungen (SP) = negatives Vorzeichen
d_r_dX_sp, d_r_dY_sp, d_r_dZ_sp = -d_r_dX_zp, -d_r_dY_zp, -d_r_dZ_zp
# Orientierung: r = a + O => ∂r/∂O = -1
d_r_dO_sp = -1
zeile_A_Matrix = []
for punkt in liste_punktnummern:
if punkt == standpunkt:
zeile_A_Matrix.extend([d_r_dX_sp, d_r_dY_sp, d_r_dZ_sp])
elif punkt == zielpunkt:
zeile_A_Matrix.extend([d_r_dX_zp, d_r_dY_zp, d_r_dZ_zp])
else:
zeile_A_Matrix.extend([0, 0, 0])
for orientierung in liste_orientierungsunbekannte:
zeile_A_Matrix.append(d_r_dO_sp if orientierung == beobachtungsgruppeID else 0)
liste_A_richtung_zeilen.append(zeile_A_Matrix)
liste_zeilenbeschriftungen_richtung.append(
f"{beobachtungenID}_R_{beobachtungsgruppeID}_{standpunkt}_{zielpunkt}"
)
elif beobachtungsart == "tachymeter_zenitwinkel":
# Zenitwinkel nach Otepka (16), dB und dL bewusst weggelassen
dX = X_zp - X_sp
dY = Y_zp - Y_sp
dZ = Z_zp - Z_sp
s_geom = sp.sqrt(dX ** 2 + dY ** 2 + dZ ** 2)
z_loc = (sp.cos(B_sp) * sp.cos(L_sp)) * dX + (sp.cos(B_sp) * sp.sin(L_sp)) * dY + (sp.sin(B_sp)) * dZ
cos_zw = z_loc / s_geom
sin_zw = sp.sqrt(1 - cos_zw ** 2)
denom = (s_geom ** 2) * sin_zw
d_zw_dX_zp = (dX * cos_zw - s_geom * sp.cos(B_sp) * sp.cos(L_sp)) / denom
d_zw_dY_zp = (dY * cos_zw - s_geom * sp.cos(B_sp) * sp.sin(L_sp)) / denom
d_zw_dZ_zp = (dZ * cos_zw - s_geom * sp.sin(B_sp)) / denom
d_zw_dX_sp, d_zw_dY_sp, d_zw_dZ_sp = -d_zw_dX_zp, -d_zw_dY_zp, -d_zw_dZ_zp
zeile_A_Matrix = []
for punkt in liste_punktnummern:
if punkt == standpunkt:
zeile_A_Matrix.extend([d_zw_dX_sp, d_zw_dY_sp, d_zw_dZ_sp])
elif punkt == zielpunkt:
zeile_A_Matrix.extend([d_zw_dX_zp, d_zw_dY_zp, d_zw_dZ_zp])
else:
zeile_A_Matrix.extend([0, 0, 0])
# Zenitwinkel hat keine Orientierungsunbekannte
for orientierung in liste_orientierungsunbekannte:
zeile_A_Matrix.append(0)
liste_A_zenitwinkel_zeilen.append(zeile_A_Matrix)
liste_zeilenbeschriftungen_zenitwinkel.append(
f"{beobachtungenID}_ZW_{beobachtungsgruppeID}_{standpunkt}_{zielpunkt}"
)
if liste_beobachtungsgleichungen_distanz:
f_matrix_dist = sp.Matrix(liste_beobachtungsgleichungen_distanz)
unbekanntenvektor = sp.Matrix(liste_unbekannte)
A_dist = f_matrix_dist.jacobian(unbekanntenvektor)
else:
A_dist = None
if liste_A_richtung_zeilen:
A_richtung = sp.Matrix(liste_A_richtung_zeilen)
else:
A_richtung = None
if liste_A_zenitwinkel_zeilen:
A_zenitwinkel = sp.Matrix(liste_A_zenitwinkel_zeilen)
else:
A_zenitwinkel = None
A_gesamt = None
liste_zeilenbeschriftungen_gesamt = []
if A_dist is not None:
A_gesamt = A_dist
liste_zeilenbeschriftungen_gesamt.extend(liste_zeilenbeschriftungen_distanz)
if A_richtung is not None:
if A_gesamt is None:
A_gesamt = A_richtung
else:
A_gesamt = A_gesamt.col_join(A_richtung)
liste_zeilenbeschriftungen_gesamt.extend(liste_zeilenbeschriftungen_richtung)
if A_zenitwinkel is not None:
if A_gesamt is None:
A_gesamt = A_zenitwinkel
else:
A_gesamt = A_gesamt.col_join(A_zenitwinkel)
liste_zeilenbeschriftungen_gesamt.extend(liste_zeilenbeschriftungen_zenitwinkel)
if A_gesamt is None:
return None
self.liste_unbekanntenvektor_symbolisch = liste_unbekannte
Export.matrix_to_csv(r"Zwischenergebnisse\Jacobi_Matrix_Symbolisch.csv", liste_unbekannte,
liste_zeilenbeschriftungen_gesamt, A_gesamt, "Beobachtung")
return A_gesamt, liste_unbekannte, liste_zeilenbeschriftungen_gesamt
def jacobi_matrix_symbolisch_alt(self):
#liste_beobachtungsarten = ["tachymeter_distanz", "tachymeter_richtung", "tachymeter_zenitwinkel"]
liste_beobachtungsarten = ["tachymeter_distanz", "tachymeter_richtung"]
db_zugriff = Datenbankzugriff(self.pfad_datenbank)
liste_beobachtungen_rohdaten = []
liste_punktnummern =[]
liste_orientierungsunbekannte = []
for beobachtungsart in liste_beobachtungsarten:
liste_id_standpunkt_zielpunkt = db_zugriff.get_beobachtungen_id_beobachtungsgruppe_standpunkt_zielpunkt(beobachtungsart)
for beobachtungenID, beobachtungsgruppeID, standpunkt, zielpunkt in liste_id_standpunkt_zielpunkt:
liste_beobachtungen_rohdaten.append(
(beobachtungsart, beobachtungenID, beobachtungsgruppeID, standpunkt, zielpunkt)
)
if standpunkt not in liste_punktnummern:
liste_punktnummern.append(standpunkt)
if zielpunkt not in liste_punktnummern:
liste_punktnummern.append(zielpunkt)
if beobachtungsart == "tachymeter_richtung":
if beobachtungsgruppeID not in liste_orientierungsunbekannte:
liste_orientierungsunbekannte.append(beobachtungsgruppeID)
if liste_beobachtungen_rohdaten == []:
return None
#dict_punkt_symbole = {}
liste_unbekannte = []
for punkt in liste_punktnummern:
X, Y, Z = sp.symbols(f"X{punkt} Y{punkt} Z{punkt}")
self.dict_punkt_symbole[punkt] = (X, Y, Z)
liste_unbekannte.append(X)
liste_unbekannte.append(Y)
liste_unbekannte.append(Z)
dict_orientierung_symbole = {}
for orientierungsunbekannte in liste_orientierungsunbekannte:
O = sp.symbols(f"O{orientierungsunbekannte}")
dict_orientierung_symbole[orientierungsunbekannte] = O
liste_unbekannte.append(O)
liste_beobachtungsgleichungen_distanz =[]
liste_zeilenbeschriftungen_distanz = []
liste_A_richtung_zeilen = []
liste_zeilenbeschriftungen_richtung = []
for beobachtungsart, beobachtungenID, beobachtungsgruppeID, standpunkt, zielpunkt in liste_beobachtungen_rohdaten:
X_sp, Y_sp, Z_sp = self.dict_punkt_symbole[standpunkt]
X_zp, Y_zp, Z_zp = self.dict_punkt_symbole[zielpunkt]
B_sp, L_sp = sp.symbols(f"B{standpunkt} L{standpunkt}")
alpha = sp.symbols(f"{beobachtungenID}_R_{beobachtungsgruppeID}_{standpunkt}_{zielpunkt}")
zw = sp.symbols(f"{beobachtungenID}_ZW_{beobachtungsgruppeID}_{standpunkt}_{zielpunkt}")
s = sp.symbols(f"{beobachtungenID}_SD_{beobachtungsgruppeID}_{standpunkt}_{zielpunkt}")
if beobachtungsart == "tachymeter_distanz":
beobachtungsgleichung = sp.sqrt(
(X_zp - X_sp) ** 2
+ (Y_zp - Y_sp) ** 2
+ (Z_zp - Z_sp) ** 2
)
liste_beobachtungsgleichungen_distanz.append(beobachtungsgleichung)
liste_zeilenbeschriftungen_distanz.append(f"{beobachtungenID}_SD_{beobachtungsgruppeID}_{standpunkt}_{zielpunkt}")
if beobachtungsart == "tachymeter_richtung":
#for beobachtungenID, beobachtungsgruppeID, standpunkt, zielpunkt in liste_id_standpunkt_zielpunkt:
d_r_dX_zp = ((sp.sin(B_sp)*sp.cos(L_sp)*sp.sin(alpha) - sp.sin(L_sp)*sp.cos(alpha)) / (s * sp.sin(zw)))
d_r_dX_sp = - d_r_dX_zp
d_r_dY_zp = ((sp.sin(B_sp)*sp.sin(L_sp)*sp.sin(alpha) + sp.cos(L_sp)*sp.cos(alpha)) / (s * sp.sin(zw)))
d_r_dY_sp = - d_r_dY_zp
d_r_dZ_zp = ((-sp.cos(B_sp) * sp.sin(alpha) / (s * sp.sin(zw))))
d_r_dZ_sp = - d_r_dZ_zp
d_r_dO_sp = -1
zeile_A_Matrix = []
for punkt in liste_punktnummern:
if punkt == standpunkt:
zeile_A_Matrix.extend([d_r_dX_sp, d_r_dY_sp, d_r_dZ_sp])
elif punkt == zielpunkt:
zeile_A_Matrix.extend([d_r_dX_zp, d_r_dY_zp, d_r_dZ_zp])
else:
zeile_A_Matrix.extend([0, 0, 0])
for orientierung in liste_orientierungsunbekannte:
if orientierung == beobachtungsgruppeID:
zeile_A_Matrix.append(d_r_dO_sp)
else:
zeile_A_Matrix.append(0)
liste_A_richtung_zeilen.append(zeile_A_Matrix)
liste_zeilenbeschriftungen_richtung.append(
f"{beobachtungenID}_R_{beobachtungsgruppeID}_{standpunkt}_{zielpunkt}"
)
if beobachtungsart == "tachymeter_zenitwinkel":
d_r_dX_zp = ((X_zp - X_sp) * sp.cos(zw) - s * sp.cos(B_sp) * sp.cos(L_sp)) / (s ** 2 * sp.sin(zw))
d_r_dX_sp = - d_r_dX_zp
d_r_dY_zp = ((Y_zp - Y_sp) * sp.cos(zw) - s * sp.cos(B_sp) * sp.sin(L_sp)) / (s ** 2 * sp.sin(zw))
d_r_dY_sp = - d_r_dY_zp
d_r_dZ_zp = ((Z_zp - Z_sp) * sp.cos(zw) - s * sp.sin(B_sp)) / (s ** 2 * sp.sin(zw))
d_r_dZ_sp = - d_r_dZ_zp
zeile_A_Matrix = []
for punkt in liste_punktnummern:
if punkt == standpunkt:
zeile_A_Matrix.extend([d_r_dX_sp, d_r_dY_sp, d_r_dZ_sp])
elif punkt == zielpunkt:
zeile_A_Matrix.extend([d_r_dX_zp, d_r_dY_zp, d_r_dZ_zp])
else:
zeile_A_Matrix.extend([0, 0, 0])
for orientierung in liste_orientierungsunbekannte:
zeile_A_Matrix.append(0)
liste_A_richtung_zeilen.append(zeile_A_Matrix)
liste_zeilenbeschriftungen_richtung.append(
f"{beobachtungenID}_ZW_{beobachtungsgruppeID}_{standpunkt}_{zielpunkt}"
)
if liste_beobachtungsgleichungen_distanz:
f_matrix_dist = sp.Matrix(liste_beobachtungsgleichungen_distanz)
unbekanntenvektor = sp.Matrix(liste_unbekannte)
A_dist = f_matrix_dist.jacobian(unbekanntenvektor)
else:
A_dist = None
if liste_A_richtung_zeilen:
A_richtung = sp.Matrix(liste_A_richtung_zeilen)
else:
A_richtung = None
if A_dist is not None and A_richtung is not None:
A_gesamt = A_dist.col_join(A_richtung)
liste_zeilenbeschriftungen_gesamt = (
liste_zeilenbeschriftungen_distanz + liste_zeilenbeschriftungen_richtung
)
elif A_dist is not None:
A_gesamt = A_dist
liste_zeilenbeschriftungen_gesamt = liste_zeilenbeschriftungen_distanz
elif A_richtung is not None:
A_gesamt = A_richtung
liste_zeilenbeschriftungen_gesamt = liste_zeilenbeschriftungen_richtung
else:
return None
self.liste_unbekanntenvektor_symbolisch = liste_unbekannte
Export.matrix_to_csv(r"Zwischenergebnisse\Jacobi_Matrix_Symbolisch.csv", liste_unbekannte,
liste_zeilenbeschriftungen_gesamt, A_gesamt, "Beobachtung")
return A_gesamt, liste_unbekannte, liste_zeilenbeschriftungen_gesamt
def jacobi_matrix_zahlen_iteration_0(self, A_symbolisch, koordinatenart, liste_unbekannte = None, liste_zeilenbeschriftungen_gesamt = None):
if koordinatenart == "naeherung_us":
A_numerisch = A_symbolisch.xreplace(self.substitutionen_dict)
Export.matrix_to_csv(r"Zwischenergebnisse\Jacobi_Matrix_Numerisch_Iteration0.csv", liste_unbekannte,
liste_zeilenbeschriftungen_gesamt, A_numerisch, "Beobachtung")
return A_numerisch
else:
print("Koordinaten noch nicht implementiert!")
def beobachtungsvektor_numerisch(self, liste_beobachtungsvektor_symbolisch):
liste_beobachtungsvektor_numerisch = []
for beobachtung_symbolisch in liste_beobachtungsvektor_symbolisch:
liste_beobachtungsvektor_numerisch.append(self.substitutionen_dict[sp.Symbol(beobachtung_symbolisch)])
beobachtungsvektor_numerisch = sp.Matrix(liste_beobachtungsvektor_numerisch)
Export.matrix_to_csv(r"Zwischenergebnisse\Beobachtungsvektor_Numerisch.csv", [""], liste_beobachtungsvektor_symbolisch, beobachtungsvektor_numerisch, "Beobachtungsvektor")
return beobachtungsvektor_numerisch
def beobachtungsvektor_naeherung_symbolisch_alt(self, liste_beobachtungsvektor_symbolisch):
liste_beobachtungsgleichungen = []
self.dict_punkt_symbole = {}
liste_punktnummern = []
for beobachtung_symbolisch in liste_beobachtungsvektor_symbolisch:
aufgeteilt = beobachtung_symbolisch.split("_")
standpunkt = str(aufgeteilt[3])
zielpunkt = str(aufgeteilt[4])
if standpunkt not in liste_punktnummern:
liste_punktnummern.append(standpunkt)
if zielpunkt not in liste_punktnummern:
liste_punktnummern.append(zielpunkt)
for punkt in liste_punktnummern:
X, Y, Z = sp.symbols(f"X{punkt} Y{punkt} Z{punkt}")
self.dict_punkt_symbole[str(punkt)] = (X, Y, Z)
for beobachtung_symbolisch in liste_beobachtungsvektor_symbolisch:
aufgeteilt = beobachtung_symbolisch.split("_")
#beobachtungen_ID = aufgeteilt[0]
beobachtungsart = aufgeteilt[1] # "SD", "R", "ZW"
#beobachtungsgruppeID = aufgeteilt[2]
standpunkt = str(aufgeteilt[3])
zielpunkt = str(aufgeteilt[4])
if beobachtungsart == "SD":
X_sp, Y_sp, Z_sp = self.dict_punkt_symbole[standpunkt]
X_zp, Y_zp, Z_zp = self.dict_punkt_symbole[zielpunkt]
beobachtungsgleichung = sp.sqrt(
(X_zp - X_sp) ** 2
+ (Y_zp - Y_sp) ** 2
+ (Z_zp - Z_sp) ** 2
)
liste_beobachtungsgleichungen.append(beobachtungsgleichung)
elif beobachtungsart == "R":
X_sp, Y_sp, Z_sp = self.dict_punkt_symbole[standpunkt]
X_zp, Y_zp, Z_zp = self.dict_punkt_symbole[zielpunkt]
dX = X_zp - X_sp
dY = Y_zp - Y_sp
dZ = Z_zp - Z_sp
B_sp = sp.Symbol(f"B{standpunkt}")
L_sp = sp.Symbol(f"L{standpunkt}")
O_sp = sp.Symbol(f"O{beobachtungsgruppeID}")
x = (-sp.sin(B_sp) * sp.cos(L_sp)) * dX + (-sp.sin(B_sp) * sp.sin(L_sp)) * dY + (sp.cos(B_sp)) * dZ
y = (-sp.sin(L_sp)) * dX + (sp.cos(L_sp)) * dY
a12 = sp.atan2(y, x)
beobachtungsgleichung = a12 - O_sp
liste_beobachtungsgleichungen.append(beobachtungsgleichung)
beobachtungsvektor_naeherung_symbolisch = sp.Matrix(liste_beobachtungsgleichungen)
Export.matrix_to_csv(r"Zwischenergebnisse\Beobachtungsvektor_Näherung_Symbolisch.csv", [""],
liste_beobachtungsvektor_symbolisch, beobachtungsvektor_naeherung_symbolisch, "Beobachtungsvektor")
return beobachtungsvektor_naeherung_symbolisch
def beobachtungsvektor_naeherung_symbolisch(self, liste_beobachtungsvektor_symbolisch):
liste_beobachtungsgleichungen = []
self.dict_punkt_symbole = {}
liste_punktnummern = []
for beobachtung_symbolisch in liste_beobachtungsvektor_symbolisch:
aufgeteilt = beobachtung_symbolisch.split("_")
standpunkt = str(aufgeteilt[3])
zielpunkt = str(aufgeteilt[4])
if standpunkt not in liste_punktnummern:
liste_punktnummern.append(standpunkt)
if zielpunkt not in liste_punktnummern:
liste_punktnummern.append(zielpunkt)
for punkt in liste_punktnummern:
X, Y, Z = sp.symbols(f"X{punkt} Y{punkt} Z{punkt}")
self.dict_punkt_symbole[str(punkt)] = (X, Y, Z)
for beobachtung_symbolisch in liste_beobachtungsvektor_symbolisch:
aufgeteilt = beobachtung_symbolisch.split("_")
#beobachtungen_ID = aufgeteilt[0]
beobachtungsart = aufgeteilt[1] # "SD", "R", "ZW"
beobachtungsgruppeID = aufgeteilt[2]
standpunkt = str(aufgeteilt[3])
zielpunkt = str(aufgeteilt[4])
X_sp, Y_sp, Z_sp = self.dict_punkt_symbole[standpunkt]
X_zp, Y_zp, Z_zp = self.dict_punkt_symbole[zielpunkt]
dX = X_zp - X_sp
dY = Y_zp - Y_sp
dZ = Z_zp - Z_sp
s = sp.sqrt(dX ** 2 + dY ** 2 + dZ ** 2) # Schrägstrecke
B_sp = sp.Symbol(f"B{standpunkt}")
L_sp = sp.Symbol(f"L{standpunkt}")
if beobachtungsart == "SD":
s_geom = sp.sqrt(dX ** 2 + dY ** 2 + dZ ** 2)
liste_beobachtungsgleichungen.append(s_geom)
elif beobachtungsart == "R":
O_sp = sp.Symbol(f"O{beobachtungsgruppeID}")
# Lokales System: x_loc = Nord, y_loc = Ost
x_loc = (-sp.sin(B_sp) * sp.cos(L_sp)) * dX + (-sp.sin(B_sp) * sp.sin(L_sp)) * dY + (sp.cos(B_sp)) * dZ
y_loc = (-sp.sin(L_sp)) * dX + (sp.cos(L_sp)) * dY
a12 = sp.atan2(y_loc, x_loc)
# Richtung nach Otepka: r = a12 - O
liste_beobachtungsgleichungen.append(a12 - O_sp)
elif beobachtungsart == "ZW":
dX = X_zp - X_sp
dY = Y_zp - Y_sp
dZ = Z_zp - Z_sp
s_geom = sp.sqrt(dX ** 2 + dY ** 2 + dZ ** 2)
z_loc = (sp.cos(B_sp) * sp.cos(L_sp)) * dX + (sp.cos(B_sp) * sp.sin(L_sp)) * dY + (sp.sin(B_sp)) * dZ
zw = sp.acos(z_loc / s_geom)
liste_beobachtungsgleichungen.append(zw)
beobachtungsvektor_naeherung_symbolisch = sp.Matrix(liste_beobachtungsgleichungen)
Export.matrix_to_csv(r"Zwischenergebnisse\Beobachtungsvektor_Näherung_Symbolisch.csv", [""],
liste_beobachtungsvektor_symbolisch, beobachtungsvektor_naeherung_symbolisch, "Beobachtungsvektor")
return beobachtungsvektor_naeherung_symbolisch
def beobachtungsvektor_naeherung_numerisch_iteration0(self, liste_beobachtungsvektor_symbolisch, beobachtungsvektor_naeherung_symbolisch):
beobachtungsvektor_naeherung_numerisch_iteration0 = beobachtungsvektor_naeherung_symbolisch.xreplace(self.substitutionen_dict)
Export.matrix_to_csv(r"Zwischenergebnisse\Beobachtungsvektor_Näherung_Numerisch_Iteration0.csv", [""],
liste_beobachtungsvektor_symbolisch, beobachtungsvektor_naeherung_numerisch_iteration0,
"Beobachtungsvektor")
return beobachtungsvektor_naeherung_numerisch_iteration0
def unbekanntenvektor_symbolisch(self, liste_unbekannte):
unbekanntenvektor_symbolisch = sp.Matrix(liste_unbekannte)
Export.matrix_to_csv(r"Zwischenergebnisse\Unbekanntenvektor_Symbolisch.csv", [""], liste_unbekannte, unbekanntenvektor_symbolisch,
"Unbekanntenvektor")
return(unbekanntenvektor_symbolisch)
def unbekanntenvektor_numerisch(self, liste_unbekanntenvektor_symbolisch, unbekanntenvektor_symbolisch, dX_Vektor = None, unbekanntenvektor_neumerisch_vorherige_Iteration = None):
if not hasattr(self, "liste_unbekanntenvektor_symbolisch"):
self.liste_unbekanntenvektor_symbolisch = liste_unbekanntenvektor_symbolisch
if dX_Vektor is None and unbekanntenvektor_neumerisch_vorherige_Iteration is None:
unbekanntenvektor_numerisch = unbekanntenvektor_symbolisch.xreplace(self.substitutionen_dict)
else:
unbekanntenvektor_numerisch = unbekanntenvektor_neumerisch_vorherige_Iteration + dX_Vektor
self.substitutionen_dict = self.dict_substitutionen_uebergeordnetes_system(unbekanntenvektor_numerisch)
Export.matrix_to_csv(r"Zwischenergebnisse\Unbekanntenvektor_Numerisch_Iteration0.csv", [""],
liste_unbekanntenvektor_symbolisch, unbekanntenvektor_numerisch,
"Unbekanntenvektor")
return unbekanntenvektor_numerisch
def unbekanntenvektor_numerisch_to_dict_unbekanntenvektor(self, liste_unbekanntenvektor_symbolisch, unbekanntenvektor_numerisch):
dict_unbekanntenvektor_numerisch = {}
index = 0
for symbol in liste_unbekanntenvektor_symbolisch:
name = str(symbol)
if not name.startswith("X"):
continue
punktnummer = str(name[1:])
dict_unbekanntenvektor_numerisch[punktnummer] = sp.Matrix([
unbekanntenvektor_numerisch[index],
unbekanntenvektor_numerisch[index + 1],
unbekanntenvektor_numerisch[index + 2]
])
index += 3
return dict_unbekanntenvektor_numerisch
def berechnung_dl(self, beobachtungsvektor_numerisch, beobachtungsvektor_naeherung_numerisch):
dl = beobachtungsvektor_numerisch - beobachtungsvektor_naeherung_numerisch
for i, name in enumerate(liste_beobachtungsvektor_symbolisch):
if "_R_" in name:
dl[i] = sp.atan2(sp.sin(dl[i]), sp.cos(dl[i])) # wrap auf (-pi, pi]
return dl
def dict_substitutionen_uebergeordnetes_system(self, unbekanntenvektor_aus_iteration = None):
db_zugriff = Datenbankzugriff(self.pfad_datenbank)
if unbekanntenvektor_aus_iteration is None:
dict_koordinaten = db_zugriff.get_koordinaten("naeherung_us")
else:
dict_koordinaten = self.unbekanntenvektor_numerisch_to_dict_unbekanntenvektor(
self.liste_unbekanntenvektor_symbolisch,
unbekanntenvektor_aus_iteration
)
dict_koordinaten_B_L = self.berechnungen.geometrische_breite_laenge(dict_koordinaten)
liste_beobachtungen = db_zugriff.get_beobachtungen_from_beobachtungenid()
substitutionen = {}
for punktnummer, vektor in dict_koordinaten_B_L.items():
X_sym, Y_sym, Z_sym, B_sym, L_Sym = sp.symbols(
f"X{punktnummer} Y{punktnummer} Z{punktnummer} B{punktnummer} L{punktnummer}")
substitutionen[X_sym] = vektor[0][0]
substitutionen[Y_sym] = vektor[0][1]
substitutionen[Z_sym] = vektor[0][2]
substitutionen[B_sym] = vektor[1]
substitutionen[L_Sym] = vektor[2]
for standpunkt, zielpunkt, beobachtungenID, beobachtungsgruppeID, tachymeter_richtung, tachymeter_zenitwinkel, tachymeter_distanz in liste_beobachtungen:
alpha = sp.symbols(f"{beobachtungenID}_R_{beobachtungsgruppeID}_{standpunkt}_{zielpunkt}")
zw = sp.symbols(f"{beobachtungenID}_ZW_{beobachtungsgruppeID}_{standpunkt}_{zielpunkt}")
s = sp.symbols(f"{beobachtungenID}_SD_{beobachtungsgruppeID}_{standpunkt}_{zielpunkt}")
substitutionen[alpha] = tachymeter_richtung
substitutionen[zw] = tachymeter_zenitwinkel
substitutionen[s] = tachymeter_distanz
if unbekanntenvektor_aus_iteration is not None:
dict_O = self.unbekanntenvektor_numerisch_to_dict_orientierungen(
self.liste_unbekanntenvektor_symbolisch,
unbekanntenvektor_aus_iteration
)
for orientierungs_id, wert in dict_O.items():
substitutionen[sp.Symbol(f"O{orientierungs_id}")] = wert
else:
for standpunkt, zielpunkt, beobachtungenID, beobachtungsgruppeID, *_ in liste_beobachtungen:
O_sym = sp.Symbol(f"O{beobachtungsgruppeID}")
if O_sym not in substitutionen:
substitutionen[O_sym] = 0
return substitutionen
def unbekanntenvektor_numerisch_to_dict_orientierungen(self, liste_unbekanntenvektor_symbolisch,
unbekanntenvektor_numerisch):
dict_O = {}
for i, symbol in enumerate(liste_unbekanntenvektor_symbolisch):
name = str(symbol)
if name.startswith("O"):
orientierungs_id = name[1:]
dict_O[orientierungs_id] = unbekanntenvektor_numerisch[i]
return dict_O

587
Import.py Normal file
View 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."

View File

@@ -0,0 +1,282 @@
import sympy as sp
from sympy.algebras.quaternion import Quaternion
import Datenbank
from itertools import combinations
class Transformationen:
def __init__(self, pfad_datenbank):
self.pfad_datenbank = pfad_datenbank
@staticmethod
def R_matrix_aus_euler(e1, e2, e3):
return sp.Matrix([
[
sp.cos(e2) * sp.cos(e3),
sp.cos(e1) * sp.sin(e3) + sp.sin(e1) * sp.sin(e2) * sp.cos(e3),
sp.sin(e1) * sp.sin(e3) - sp.cos(e1) * sp.sin(e2) * sp.cos(e3)
],
[
-sp.cos(e2) * sp.sin(e3),
sp.cos(e1) * sp.cos(e3) - sp.sin(e1) * sp.sin(e2) * sp.sin(e3),
sp.sin(e1) * sp.cos(e3) + sp.cos(e1) * sp.sin(e2) * sp.sin(e3)
],
[
sp.sin(e2),
-sp.sin(e1) * sp.cos(e2),
sp.cos(e1) * sp.cos(e2)
]
])
def Helmerttransformation_Euler_Transformationsparameter_berechne(self):
db = Datenbank.Datenbankzugriff(self.pfad_datenbank)
dict_ausgangssystem = db.get_koordinaten("naeherung_lh", "Dict")
dict_zielsystem = db.get_koordinaten("naeherung_us", "Dict")
gemeinsame_punktnummern = sorted(set(dict_ausgangssystem.keys()) & set(dict_zielsystem.keys()))
anzahl_gemeinsame_punkte = len(gemeinsame_punktnummern)
liste_punkte_ausgangssystem = [dict_ausgangssystem[i] for i in gemeinsame_punktnummern]
liste_punkte_zielsystem = [dict_zielsystem[i] for i in gemeinsame_punktnummern]
print("Anzahl gemeinsame Punkte:", anzahl_gemeinsame_punkte)
print("\nErste Zielpunkte:")
for pn, P in list(zip(gemeinsame_punktnummern, liste_punkte_zielsystem))[:5]:
print(pn, [float(P[0]), float(P[1]), float(P[2])])
print("\nErste Ausgangspunkte:")
for pn, p in list(zip(gemeinsame_punktnummern, liste_punkte_ausgangssystem))[:5]:
print(pn, [float(p[0]), float(p[1]), float(p[2])])
# --- Näherungswerte (minimal erweitert) ---
p1, p2, p3 = liste_punkte_ausgangssystem[0], liste_punkte_ausgangssystem[1], liste_punkte_ausgangssystem[2]
P1, P2, P3 = liste_punkte_zielsystem[0], liste_punkte_zielsystem[1], liste_punkte_zielsystem[2]
# 1) Näherungswert Maßstab: Mittelwert aus allen Punktpaaren
ratios = []
for i, j in combinations(range(anzahl_gemeinsame_punkte), 2):
dp = (liste_punkte_ausgangssystem[j] - liste_punkte_ausgangssystem[i]).norm()
dP = (liste_punkte_zielsystem[j] - liste_punkte_zielsystem[i]).norm()
dp_f = float(dp)
if dp_f > 0:
ratios.append(float(dP) / dp_f)
m0 = sum(ratios) / len(ratios)
if ratios:
print("min/mean/max:",
min(ratios),
sum(ratios) / len(ratios),
max(ratios))
U = (P2 - P1) / (P2 - P1).norm()
W = (U.cross(P3 - P1)) / (U.cross(P3 - P1)).norm()
V = W.cross(U)
u = (p2 - p1) / (p2 - p1).norm()
w = (u.cross(p3 - p1)) / (u.cross(p3 - p1)).norm()
v = w.cross(u)
R0 = sp.Matrix.hstack(U, V, W) * sp.Matrix.hstack(u, v, w).T
XS = sum(liste_punkte_zielsystem, sp.Matrix([0, 0, 0])) / anzahl_gemeinsame_punkte
xS = sum(liste_punkte_ausgangssystem, sp.Matrix([0, 0, 0])) / anzahl_gemeinsame_punkte
Translation0 = XS - m0 * R0 * xS
# 2) Test auf orthonormale Drehmatrix bei 3 Nachkommastellen!
if R0.T.applyfunc(lambda x: round(float(x), 3)) == R0.inv().applyfunc(lambda x: round(float(x), 3)) \
and (R0.T * R0).applyfunc(lambda x: round(float(x), 3)) == sp.eye(3).applyfunc(
lambda x: round(float(x), 3)) \
and ((round(R0.det(), 3) == 1.000 or round(R0.det(), 3) == -1.000)):
print("R ist Orthonormal!")
else:
print("R ist nicht Orthonormal!")
# 3) Euler-Näherungswerte aus R0
e2_0 = sp.asin(R0[2, 0])
# Schutz gegen Division durch 0 wenn cos(e2) ~ 0:
cos_e2_0 = sp.cos(e2_0)
e1_0 = sp.acos(R0[2, 2] / cos_e2_0)
e3_0 = sp.acos(R0[0, 0] / cos_e2_0)
# --- Symbolische Unbekannte (klassische 7 Parameter) ---
dX, dY, dZ, m, e1, e2, e3 = sp.symbols('dX dY dZ m e1 e2 e3')
R_symbolisch = self.R_matrix_aus_euler(e1, e2, e3)
# 4) Funktionales Modell
f_zeilen = []
for punkt in liste_punkte_ausgangssystem:
punkt_vektor = sp.Matrix([punkt[0], punkt[1], punkt[2]])
f_zeile_i = sp.Matrix([dX, dY, dZ]) + m * R_symbolisch * punkt_vektor
f_zeilen.extend(list(f_zeile_i))
f_matrix = sp.Matrix(f_zeilen)
f = f_matrix
A_ohne_zahlen = f_matrix.jacobian([dX, dY, dZ, m, e1, e2, e3])
# Parameterschätzung
schwellenwert = 1e-4
anzahl_iterationen = 0
alle_kleiner_vorherige_iteration = False
l_vektor = sp.Matrix([koord for P in liste_punkte_zielsystem for koord in P])
l = l_vektor
P_mat = sp.eye(3 * anzahl_gemeinsame_punkte)
l_berechnet_0 = None
while True:
if anzahl_iterationen == 0:
zahlen_0 = {
dX: float(Translation0[0]),
dY: float(Translation0[1]),
dZ: float(Translation0[2]),
m: float(m0),
e1: float(e1_0),
e2: float(e2_0),
e3: float(e3_0)
}
x0 = sp.Matrix([zahlen_0[dX], zahlen_0[dY], zahlen_0[dZ],
zahlen_0[m], zahlen_0[e1], zahlen_0[e2], zahlen_0[e3]])
l_berechnet_0 = f.subs(zahlen_0).evalf(n=30)
dl_0 = l_vektor - l_berechnet_0
A_0 = A_ohne_zahlen.subs(zahlen_0).evalf(n=30)
N = A_0.T * P_mat * A_0
n_0 = A_0.T * P_mat * dl_0
Qxx_0 = N.inv()
dx = Qxx_0 * n_0
x = x0 + dx
x = sp.N(x, 30)
anzahl_iterationen += 1
print(f"Iteration Nr.{anzahl_iterationen} abgeschlossen")
print(dx.evalf(n=3))
else:
zahlen_i = {
dX: float(x[0]),
dY: float(x[1]),
dZ: float(x[2]),
m: float(x[3]),
e1: float(x[4]),
e2: float(x[5]),
e3: float(x[6])
}
l_berechnet_i = f.subs(zahlen_i).evalf(n=30)
dl_i = l_vektor - l_berechnet_i
A_i = A_ohne_zahlen.subs(zahlen_i).evalf(n=30)
N_i = A_i.T * P_mat * A_i
Qxx_i = N_i.inv()
n_i = A_i.T * P_mat * dl_i
dx = Qxx_i * n_i
x = sp.Matrix(x + dx)
anzahl_iterationen += 1
print(f"Iteration Nr.{anzahl_iterationen} abgeschlossen")
print(dx.evalf(n=3))
alle_kleiner = True
for i in range(dx.rows):
wert = float(dx[i])
if abs(wert) > schwellenwert:
alle_kleiner = False
if (alle_kleiner and alle_kleiner_vorherige_iteration) or anzahl_iterationen == 100:
break
alle_kleiner_vorherige_iteration = alle_kleiner
print(l.evalf(n=3))
print(l_berechnet_0.evalf(n=3))
print(f"x = {x.evalf(n=3)}")
# --- Neuberechnung Zielsystem ---
zahlen_final = {
dX: float(x[0]),
dY: float(x[1]),
dZ: float(x[2]),
m: float(x[3]),
e1: float(x[4]),
e2: float(x[5]),
e3: float(x[6])
}
l_berechnet_final = f.subs(zahlen_final).evalf(n=30)
liste_l_berechnet_final = []
for i in range(anzahl_gemeinsame_punkte):
Xi = l_berechnet_final[3 * i + 0]
Yi = l_berechnet_final[3 * i + 1]
Zi = l_berechnet_final[3 * i + 2]
liste_l_berechnet_final.append(sp.Matrix([Xi, Yi, Zi]))
print("")
print("l_berechnet_final:")
for punktnummer, l_fin in zip(gemeinsame_punktnummern, liste_l_berechnet_final):
print(f"{punktnummer}: {float(l_fin[0]):.3f}, {float(l_fin[1]):.3f}, {float(l_fin[2]):.3f}")
print("Streckendifferenzen:")
streckendifferenzen = [
(punkt_zielsys - l_final).norm()
for punkt_zielsys, l_final in zip(liste_punkte_zielsystem, liste_l_berechnet_final)
]
print([round(float(s), 6) for s in streckendifferenzen])
Schwerpunkt_Zielsystem = sum(liste_punkte_zielsystem, sp.Matrix([0, 0, 0])) / anzahl_gemeinsame_punkte
Schwerpunkt_berechnet = sum(liste_l_berechnet_final, sp.Matrix([0, 0, 0])) / anzahl_gemeinsame_punkte
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")
return zahlen_final
def Helmerttransformation(self, transformationsparameter):
db = Datenbank.Datenbankzugriff(self.pfad_datenbank)
dict_ausgangssystem = db.get_koordinaten("naeherung_lh", "Dict")
dict_zielsystem = db.get_koordinaten("naeherung_us", "Dict")
dX, dY, dZ, m, e1, e2, e3 = sp.symbols('dX dY dZ m e1 e2 e3')
unterschiedliche_punktnummern = sorted(set(dict_ausgangssystem.keys()) ^ set(dict_zielsystem.keys()))
punktnummern_transformieren = [
punktnummer for punktnummer in unterschiedliche_punktnummern if punktnummer in dict_ausgangssystem
]
liste_punkte_ausgangssystem = [dict_ausgangssystem[punktnummer] for punktnummer in punktnummern_transformieren]
R = self.R_matrix_aus_euler(transformationsparameter[e1], transformationsparameter[e2], transformationsparameter[e3])
f_zeilen = []
for punkt in liste_punkte_ausgangssystem:
punkt_vektor = sp.Matrix([punkt[0], punkt[1], punkt[2]])
f_zeile_i = sp.Matrix([transformationsparameter[dX], transformationsparameter[dY], transformationsparameter[dZ]]) + transformationsparameter[m] * R * punkt_vektor
f_zeilen.extend(list(f_zeile_i))
f_matrix = sp.Matrix(f_zeilen)
dict_transformiert = {}
for i, pn in enumerate(punktnummern_transformieren):
Xi = f_matrix[3 * i + 0]
Yi = f_matrix[3 * i + 1]
Zi = f_matrix[3 * i + 2]
dict_transformiert[str(pn)] = sp.Matrix([
[float(Xi)],
[float(Yi)],
[float(Zi)]
])
return dict_transformiert

View File

@@ -0,0 +1,168 @@
from dataclasses import dataclass
from typing import Sequence, List, Dict
import sympy as sp
import numpy as np
import math
from decimal import Decimal
import matplotlib.pyplot as plt
@dataclass
class Genauigkeitsmaße:
def __init__(self):
pass
@staticmethod
def s0apost(v, P, r):
vv = (v.T * P * v)[0, 0]
vv = float(vv) # Sympy -> float
if r <= 0:
raise ValueError(f"Redundanz r muss > 0 sein, ist {r}.")
if not math.isfinite(vv):
raise ValueError(f"vv ist nicht endlich (NaN/Inf). vv={vv}")
if vv < 0:
raise ValueError(f"vv ist negativ. vv={vv}")
return math.sqrt(vv / float(r))
def helmertscher_punktfehler_3D(self, sigma_x: float, sigma_y: float, sigma_z: float) -> float:
sx = sp.sympify(sigma_x)
sy = sp.sympify(sigma_y)
sz = sp.sympify(sigma_z)
helmert_pf_3D = sp.sqrt(sx**2 + sy**2 + sz**2)
return float(helmert_pf_3D)
def helmertscher_punktfehler_3D_alle(
self,
sigma_x_list: Sequence[float],
sigma_y_list: Sequence[float],
sigma_z_list: Sequence[float],
) -> List[float]:
if not (
len(sigma_x_list) == len(sigma_y_list) == len(sigma_z_list)
):
raise ValueError("Listen sigma_x, sigma_y, sigma_z müssen gleich lang sein.")
return [
self.helmertscher_punktfehler_3D(sx, sy, sz)
for sx, sy, sz in zip(sigma_x_list, sigma_y_list, sigma_z_list)
]
def fehlerellipse_standard_2D(
self,
Q_xx: float,
Q_yy: float,
Q_xy: float,
sigma_0: float,
) -> Dict[str, float]:
Q_xx_s = sp.sympify(Q_xx)
Q_yy_s = sp.sympify(Q_yy)
Q_xy_s = sp.sympify(Q_xy)
sigma0_s = sp.sympify(sigma_0)
k = sp.sqrt((Q_xx_s - Q_yy_s)**2 + 4 * Q_xy_s**2)
Q_dmax = sp.Rational(1, 2) * (Q_xx_s + Q_yy_s + k)
Q_dmin = sp.Rational(1, 2) * (Q_xx_s + Q_yy_s - k)
s_max = sigma0_s * sp.sqrt(Q_dmax)
s_min = sigma0_s * sp.sqrt(Q_dmin)
theta_rad = sp.Rational(1, 2) * sp.atan2(2 * Q_xy_s, Q_xx_s - Q_yy_s)
theta_gon = theta_rad * 200 / sp.pi
return {
"Q_dmax": float(Q_dmax),
"Q_dmin": float(Q_dmin),
"s_max": float(s_max),
"s_min": float(s_min),
"theta_rad": float(theta_rad),
"theta_gon": float(theta_gon),
}
def fehlerellipse_konfidenz_2D(
self,
s_max: float,
s_min: float,
scale_value: float,
) -> Dict[str, float]:
s_max_s = sp.sympify(s_max)
s_min_s = sp.sympify(s_min)
scale_s = sp.sympify(scale_value)
faktor = sp.sqrt(scale_s)
A_K = faktor * s_max_s
B_K = faktor * s_min_s
return {
"A_K": float(A_K),
"B_K": float(B_K),
}
def plot_ellipsen_alle(
self,
x_list: Sequence[float],
y_list: Sequence[float],
Q_xx_list: Sequence[float],
Q_yy_list: Sequence[float],
Q_xy_list: Sequence[float],
sigma_0: float,
scale_value: float | None = None, # None = Standardellipse, sonst Konfidenzellipse
) -> plt.Axes:
n = len(x_list)
if not (
n == len(y_list) == len(Q_xx_list) == len(Q_yy_list) == len(Q_xy_list)
):
raise ValueError("Alle Listen müssen gleich lang sein (ein Eintrag pro Punkt).")
fig, ax = plt.subplots()
for i in range(n):
std = self.fehlerellipse_standard_2D(
Q_xx_list[i], Q_yy_list[i], Q_xy_list[i], sigma_0
)
s_max = std["s_max"]
s_min = std["s_min"]
theta = std["theta_rad"]
# ggf. Konfidenzellipse statt Standardellipse
if scale_value is not None:
konf = self.fehlerellipse_konfidenz_2D(s_max, s_min, scale_value)
A = konf["A_K"]
B = konf["B_K"]
else:
A = s_max
B = s_min
t = np.linspace(0, 2 * np.pi, 200)
ct = np.cos(theta)
st = np.sin(theta)
x_local = A * np.cos(t)
y_local = B * np.sin(t)
x_ell = x_list[i] + ct * x_local - st * y_local
y_ell = y_list[i] + st * x_local + ct * y_local
ax.plot(x_ell, y_ell, linewidth=0.8)
ax.plot(x_list[i], y_list[i], marker=".", color="k", markersize=3)
ax.set_aspect("equal", "box")
ax.grid(True)
ax.set_xlabel("x")
ax.set_ylabel("y")
return ax

View File

@@ -0,0 +1,109 @@
from dataclasses import dataclass
from typing import Sequence, List, Dict
import sympy as sp
@dataclass
class Zuverlaessigkeit:
def redundanzanalyse(self, r_vec: Sequence[float]) -> Dict[str, object]:
r_s = [sp.sympify(r) for r in r_vec]
EVi = [float(r * 100) for r in r_s]
klassen = [self.klassifiziere_ri(float(r)) for r in r_s]
return {
"r_i": [float(r) for r in r_s],
"EVi": EVi,
"klassen": klassen,
"r_sum": float(sum(r_s)),
"min_r": float(min(r_s)),
"max_r": float(max(r_s)),
}
def klassifiziere_ri(self, ri: float) -> str:
if ri < 0.01:
return "nicht kontrollierbar"
elif ri < 0.10:
return "schlecht kontrollierbar"
elif ri < 0.30:
return "ausreichend kontrollierbar"
elif ri < 0.70:
return "gut kontrollierbar"
else:
return "nahezu vollständig redundant"
def globaltest(self, sigma0_hat: float, sigma0_apriori: float, F_krit: float):
s_hat = sp.sympify(sigma0_hat)
s0 = sp.sympify(sigma0_apriori)
Fk = sp.sympify(F_krit)
T_G = (s_hat**2) / (s0**2)
H0 = bool(T_G <= Fk)
return {
"T_G": float(T_G),
"F_krit": float(Fk),
"H0_angenommen": H0,
}
def data_snooping(
self,
v: Sequence[float],
Qv_diag: Sequence[float],
r_vec: Sequence[float],
sigma0_hat: float,
k: float,
) -> List[Dict[str, float | bool]]:
v_s = [sp.sympify(x) for x in v]
Qv_s = [sp.sympify(q) for q in Qv_diag]
r_s = [sp.sympify(r) for r in r_vec]
s0 = sp.sympify(sigma0_hat)
k_s = sp.sympify(k)
results = []
for vi, Qvi, ri in zip(v_s, Qv_s, r_s):
s_vi = s0 * sp.sqrt(Qvi)
NV_i = sp.Abs(vi) / s_vi
if ri == 0:
GRZW_i = sp.oo
else:
GRZW_i = (s_vi / ri) * k_s
auff = bool(NV_i > k_s)
results.append({
"v_i": float(vi),
"Qv_i": float(Qvi),
"r_i": float(ri),
"s_vi": float(s_vi),
"NV_i": float(NV_i),
"GRZW_i": float(GRZW_i if GRZW_i != sp.oo else float("inf")),
"auffällig": auff,
})
return results
def aeussere_zuverlaessigkeit_EF(self, r_vec: Sequence[float], delta0: float):
delta = sp.sympify(delta0)
EF_list = []
for ri in r_vec:
ri_s = sp.sympify(ri)
if ri_s == 0:
EF = sp.oo
else:
EF = sp.sqrt((1 - ri_s) / ri_s) * delta
EF_list.append(float(EF if EF != sp.oo else float("inf")))
return EF_list

150
Parameterschaetzung.py Normal file
View File

@@ -0,0 +1,150 @@
from Stochastisches_Modell import StochastischesModell
from Netzqualität_Genauigkeit import Genauigkeitsmaße
from Datumsfestlegung import Datumsfestlegung
import sympy as sp
import Export
def ausgleichung_global(
A: sp.Matrix,
dl: sp.Matrix,
Q_ll: sp.Matrix,
x0: sp.Matrix,
idx_X, idx_Y, idx_Z,
anschluss_indices,
anschluss_werte,
Sigma_AA,
):
# 1) Datumsfestlegung (weiches Datum) System erweitern
A_ext, dl_ext, Q_ext = Datumsfestlegung.weiches_datum(
A=A,
dl=dl,
Q_ll=Q_ll,
x0=x0,
anschluss_indices=anschluss_indices,
anschluss_werte=anschluss_werte,
Sigma_AA=Sigma_AA,
)
# 2) Gewichtsmatrix P
P = StochastischesModell.berechne_P(Q_ext)
# 3) Normalgleichungsmatrix N und Absolutgliedvektor n
N = A_ext.T * P * A_ext
n = A_ext.T * P * dl_ext
# 4) Zuschlagsvektor dx
dx = N.LUsolve(n)
# 5) Residuenvektor v
v = dl - A * dx
# 6) Kofaktormatrix der Unbekannten Q_xx
Q_xx = StochastischesModell.berechne_Q_xx(N)
# 7) Kofaktormatrix der Beobachtungen Q_ll_dach
Q_ll_dach = A * Q_xx * A.T
# 8) Kofaktormatrix der Verbesserungen Q_vv
Q_vv = StochastischesModell.berechne_Qvv(A, P, Q_xx)
# 9) Redundanzmatrix R und Redundanzanteile r
R = StochastischesModell.berechne_R(Q_vv, P) #Redundanzmatrix R
r = StochastischesModell.berechne_r(R) #Redundanzanteile als Vektor r
redundanzanteile = A.shape[0] - A.shape[1] #n-u+d
# 10) s0 a posteriori
soaposteriori = Genauigkeitsmaße.s0apost(v, P, redundanzanteile)
# 11) 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,
"R": R,
"r": r,
"soaposteriori": soaposteriori,
}
Export.Export.ausgleichung_to_datei(r"Zwischenergebnisse\Ausgleichung_Iteration0.csv", dict_ausgleichung)
return dict_ausgleichung, dx
def ausgleichung_lokal(
A: sp.Matrix,
dl: sp.Matrix,
Q_ll: sp.Matrix,
x0: sp.Matrix,
liste_punktnummern,
auswahl,
mit_massstab: bool = True,
):
# 1) Gewichtsmatrix P
P = StochastischesModell.berechne_P(Q_ll)
# 2) Normalgleichungsmatrix N und Absolutgliedvektor n
N = A.T * P * A
n = A.T * P * dl
# 3) Datumsfestlegung (Teilspurminimierung)
G = Datumsfestlegung.raenderungsmatrix_G(x0, liste_punktnummern, mit_massstab=mit_massstab)
aktive = Datumsfestlegung.datumskomponenten(auswahl, liste_punktnummern)
E = Datumsfestlegung.auswahlmatrix_E(u=A.cols, aktive_unbekannte_indices=aktive)
Gi = E * G
# 4) Zuschlagsvektor dx
dx = Datumsfestlegung.berechne_dx_geraendert(N, n, Gi)
# 5) Residuenvektor v
v = dl - A * dx
# 6) Kofaktormatrix der Unbekannten Q_xx
N_inv = N.inv()
N_inv_G = N_inv * Gi
S = Gi.T * N_inv_G
S_inv = S.inv()
Q_xx = N_inv - N_inv_G * S_inv * N_inv_G.T
# 7) Kofaktormatrix der Beobachtungen Q_ll_dach
Q_lhat_lhat = A * Q_xx * A.T
# 8) Kofaktormatrix der Verbesserungen Q_vv
Q_vv = P.inv() - Q_lhat_lhat
# 9) Redundanzmatrix R, Redundanzanteile r, Redundanz
R = Q_vv * P
r_vec = sp.Matrix(R.diagonal())
n_beob = A.rows
u = A.cols
d = Gi.shape[1]
r_gesamt = n_beob - u + d
# 10) s0 a posteriori
sigma0_apost = Genauigkeitsmaße.s0apost(v, P, r_gesamt)
# 11) Ausgabe
dict_ausgleichung_lokal = {
"dx": dx,
"v": v,
"Q_ll": Q_ll,
"P": P,
"N": N,
"Q_xx": Q_xx,
"Q_lhat_lhat": Q_lhat_lhat,
"Q_vv": Q_vv,
"R": R,
"r": r_vec,
"r_gesamt": r_gesamt,
"sigma0_apost": sigma0_apost,
"G": G,
"Gi": Gi,
}
Export.Export.ausgleichung_to_datei(r"Zwischenergebnisse\Ausgleichung_Iteration0_lokal.csv", dict_ausgleichung_lokal)
return dict_ausgleichung_lokal, dx

197
Stochastisches_Modell.py Normal file
View File

@@ -0,0 +1,197 @@
import sympy as sp
from dataclasses import dataclass, field
from typing import Dict, Tuple, Iterable
from Export import Export
from Datenbank import Datenbankzugriff
@dataclass
class StochastischesModell:
n_beob: int
sigma_beob: Iterable[float] =None #σ a priori der einzelnen Beobachtung
gruppe_beob: Iterable[int] =None #Gruppenzugehörigkeit jeder Beobachtung (Distanz, Richtung, GNSS, Nivellement,...,)
sigma0_gruppe: Dict[int, float] = field(default_factory=dict) #σ0² für jede Gruppe
def __post_init__(self):
# Defaults setzen
if self.sigma_beob is None:
self.sigma_beob = [1.0] * int(self.n_beob)
if self.gruppe_beob is None:
self.gruppe_beob = [1] * int(self.n_beob)
# In SymPy-Spaltenvektoren umwandeln
self.sigma_beob = sp.Matrix(list(self.sigma_beob))
self.gruppe_beob = sp.Matrix(list(self.gruppe_beob))
# Dimension prüfen
if self.sigma_beob.rows != self.gruppe_beob.rows:
raise ValueError("sigma_beob und gruppe_beob müssen gleich viele Einträge haben.")
if self.sigma_beob.rows != int(self.n_beob):
raise ValueError("n_beob passt nicht zur Länge von sigma_beob / gruppe_beob.")
# Fehlende Gruppen mit sigma0_sq = 1.0 ergänzen
unique_groups = sorted({int(g) for g in self.gruppe_beob})
for g in unique_groups:
if g not in self.sigma0_gruppe:
self.sigma0_gruppe[g] = 1.0
def berechne_Qll(self) -> Tuple[sp.Matrix, sp.Matrix]:
n = self.n_beob
Q_ll = sp.zeros(n, n)
P = sp.zeros(n, n)
for i in range(self.n_beob):
sigma_i = self.sigma_beob[i, 0] #σ-Wert der i-ten Beobachtung holen
g = int(self.gruppe_beob[i, 0]) #Gruppenzugehörigkeit der Beobachtung bestimmen
sigma0_sq = self.sigma0_gruppe[g] #Den Varianzfaktor der Gruppe holen
q_ii = sigma_i**2 #σ² berechnen
Q_ll[i, i] = q_ii #Diagonale
return Q_ll
def Qll_symbolisch(self, pfad_datenbank, liste_beobachtungen_symbolisch):
liste_standardabweichungen_symbole = []
liste_beobachtungen_symbolisch = [str(b) for b in liste_beobachtungen_symbolisch]
Qll = sp.zeros(len(liste_beobachtungen_symbolisch), len(liste_beobachtungen_symbolisch))
db_zugriff = Datenbankzugriff(pfad_datenbank)
dict_beobachtungenID_instrumenteID = db_zugriff.get_instrumenteID_beobachtungenID_dict()
for i, beobachtung_symbolisch_i in enumerate(liste_beobachtungen_symbolisch):
aufgeteilt_i = beobachtung_symbolisch_i.split("_")
beobachtungenID_i = int(aufgeteilt_i[0])
instrumenteID_i = dict_beobachtungenID_instrumenteID[beobachtungenID_i]
beobachtungsart_i = str(aufgeteilt_i[1])
if beobachtungsart_i == "SD":
stabw_apriori_konstant = sp.Symbol(f"stabw_apriori_konstant_{beobachtungsart_i}_{instrumenteID_i}")
stabw_apriori_streckenprop = sp.Symbol(f"stabw_apriori_streckenprop_{beobachtungsart_i}_{instrumenteID_i}")
tachymeter_distanz = sp.Symbol(f"SD_{beobachtungenID_i}")
sigma = sp.sqrt(stabw_apriori_konstant ** 2 + (stabw_apriori_streckenprop * tachymeter_distanz / 1000000) ** 2)
liste_standardabweichungen_symbole.append(sigma)
Qll[i, i] = sigma ** 2
elif beobachtungsart_i == "R" or beobachtungsart_i == "ZW":
stabw_apriori_konstant = sp.Symbol(f"stabw_apriori_konstant_{beobachtungsart_i}_{instrumenteID_i}")
stabw_apriori_konstant_distanz = sp.Symbol(f"stabw_apriori_konstant_SD_{instrumenteID_i}")
tachymeter_distanz = sp.Symbol(f"SD_{beobachtungenID_i}")
sigma = sp.sqrt(
stabw_apriori_konstant ** 2 + (stabw_apriori_konstant_distanz / tachymeter_distanz) ** 2)
liste_standardabweichungen_symbole.append(sigma)
Qll[i, i] = sigma ** 2
for j in range(i + 1, len(liste_beobachtungen_symbolisch)):
beobachtung_symbolisch_j = liste_beobachtungen_symbolisch[j]
aufgeteilt_j = beobachtung_symbolisch_j.split("_")
beobachtungsart_j = str(aufgeteilt_j[1])
if beobachtungsart_i == "SD" and beobachtungsart_j == "SD":
Qll[i, j] = 0
Qll[j, i] = 0
Export.matrix_to_csv(r"Zwischenergebnisse\Qll_Symbolisch.csv", liste_beobachtungen_symbolisch, liste_beobachtungen_symbolisch, Qll, "Qll")
return Qll
def Qll_numerisch(self, pfad_datenbank, Qll_Matrix_Symbolisch, liste_beobachtungen_symbolisch):
db_zugriff = Datenbankzugriff(pfad_datenbank)
dict_genauigkeiten = db_zugriff.get_genauigkeiten_dict()
dict_beobachtungenID_instrumenteID = db_zugriff.get_instrumenteID_beobachtungenID_dict()
liste_beobachtungen = db_zugriff.get_beobachtungen_from_beobachtungenid()
dict_beobachtungenID_distanz = {}
for standpunkt, zielpunkt, beobachtungenID, beobachtungsgruppeID, tachymeter_richtung, tachymeter_zenitwinkel, tachymeter_distanz in liste_beobachtungen:
dict_beobachtungenID_distanz[int(beobachtungenID)] = tachymeter_distanz
dict_genauigkeiten_neu = {}
for genauigkeitenID, eintrag in dict_genauigkeiten.items():
instrumenteID = int(eintrag[0])
beobachtungsart = str(eintrag[1])
stabw_apriori_konstant = eintrag[2]
stabw_apriori_streckenprop = eintrag[3]
dict_genauigkeiten_neu[(instrumenteID, beobachtungsart)] = (stabw_apriori_konstant,
stabw_apriori_streckenprop)
substitutionen = {}
dict_konstante_sd = {}
for (instrumenteID, beobachtungsart), (stabw_apriori_konstant,
stabw_apriori_streckenprop) in dict_genauigkeiten_neu.items():
if beobachtungsart == "Tachymeter_Strecke":
if stabw_apriori_konstant is not None:
dict_konstante_sd[instrumenteID] = float(stabw_apriori_konstant)
for (instrumenteID, beobachtungsart), (stabw_apriori_konstant,
stabw_apriori_streckenprop) in dict_genauigkeiten_neu.items():
if beobachtungsart == "Tachymeter_Strecke":
beobachtungsart_kurz = "SD"
elif beobachtungsart == "Tachymeter_Richtung":
beobachtungsart_kurz = "R"
elif beobachtungsart == "Tachymeter_Zenitwinkel":
beobachtungsart_kurz = "ZW"
if stabw_apriori_konstant is not None:
substitutionen[sp.Symbol(f"stabw_apriori_konstant_{beobachtungsart_kurz}_{instrumenteID}")] = float(stabw_apriori_konstant)
if stabw_apriori_streckenprop is not None:
substitutionen[sp.Symbol(f"stabw_apriori_streckenprop_{beobachtungsart_kurz}_{instrumenteID}")] = float(stabw_apriori_streckenprop)
for instrumenteID, wert in dict_konstante_sd.items():
substitutionen[sp.Symbol(f"stabw_apriori_konstant_SD_{instrumenteID}")] = float(wert)
liste_beobachtungen_symbolisch = [str(b) for b in liste_beobachtungen_symbolisch]
for beobachtung_symbolisch in liste_beobachtungen_symbolisch:
aufgeteilt = beobachtung_symbolisch.split("_")
beobachtungenID = int(aufgeteilt[0])
distanz = dict_beobachtungenID_distanz.get(beobachtungenID, None)
if distanz is not None:
substitutionen[sp.Symbol(f"SD_{beobachtungenID}")] = float(distanz)
Qll_numerisch = Qll_Matrix_Symbolisch.xreplace(substitutionen)
Export.matrix_to_csv(
r"Zwischenergebnisse\Qll_Numerisch.csv",
liste_beobachtungen_symbolisch,
liste_beobachtungen_symbolisch,
Qll_numerisch,
"Qll"
)
return Qll_numerisch
def berechne_P(Q_ll: sp.Matrix) -> sp.Matrix:
P = Q_ll.inv()
return P
def berechne_Q_xx(N: sp.Matrix) -> sp.Matrix:
if N.rows != N.cols:
raise ValueError("N muss eine quadratische Matrix sein")
Q_xx = N.inv()
return Q_xx
def berechne_Qvv(self, A: sp.Matrix, P: sp.Matrix, Q_xx: sp.Matrix) -> sp.Matrix:
Q_vv = P.inv() - A * Q_xx * A.T
return Q_vv #Kofaktormatrix der Beobachtungsresiduen
def berechne_R(self, Q_vv: sp.Matrix, P: sp.Matrix) -> sp.Matrix:
R = Q_vv * P
return R #Redundanzmatrix
def berechne_r(self, R: sp.Matrix) -> sp.Matrix:
n = R.rows
r = sp.zeros(n, 1)
for i in range(n):
r[i, 0] = R[i, i]
return r #Redundanzanteile

View File

@@ -0,0 +1,56 @@
from typing import Dict, Any
import sympy as sp
from Stochastisches_Modell import StochastischesModell
def iterative_ausgleichung(
A: sp.Matrix,
dl: sp.Matrix,
modell: StochastischesModell,
) -> Dict[str, Any]:
ergebnisse_iter = [] #Liste für Zwischenergebnisse
for it in range(max_iter):
Q_ll, P = modell.berechne_Qll_P() #Stochastisches Modell: Qll und P berechnen
N = A.T * P * A #Normalgleichungsmatrix N
Q_xx = N.inv() #Kofaktormatrix der Unbekannten Qxx
n = A.T * P * dl #Absolutgliedvektor n
dx = N.LUsolve(n) #Zuschlagsvektor dx
v = dl - A * dx #Residuenvektor v
Q_vv = modell.berechne_Qvv(A, P, Q_xx) #Kofaktormatrix der Verbesserungen Qvv
R = modell.berechne_R(Q_vv, P) #Redundanzmatrix R
r = modell.berechne_r(R) #Redundanzanteile als Vektor r
ergebnisse_iter.append({ #Zwischenergebnisse speichern in Liste
"iter": it + 1,
"Q_ll": Q_ll,
"P": P,
"N": N,
"Q_xx": Q_xx,
"dx": dx,
"v": v,
"Q_vv": Q_vv,
"R": R,
"r": r,
"sigma_hat": sigma_hat,
"sigma0_groups": dict(modell.sigma0_groups),
})
return {
"dx": dx,
"v": v,
"Q_ll": Q_ll,
"P": P,
"N": N,
"Q_xx": Q_xx,
"Q_vv": Q_vv,
"R": R,
"r": r,
"sigma_hat": sigma_hat,
"sigma0_groups": dict(modell.sigma0_groups),
"history": ergebnisse_iter,
}

View File

@@ -0,0 +1,49 @@
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 NUMERIC(9,3),
naeherungy NUMERIC(7,3),
naeherungz NUMERIC(8,3),
CONSTRAINT pk_Netzpunkte PRIMARY KEY (punktnummer)
);
CREATE TABLE Standpunkte_Tachymeter (
spID INTEGER PRIMARY KEY AUTOINCREMENT,
punktnummer TEXT(10),
orientierunghz NUMERIC(2,5),
orientierungv NUMERIC(2,5),
dateipfad TEXT(150),
standpunktsnummer INTEGER,
CONSTRAINT fk_Standpunkte_Tachymeter_Netzpunkte FOREIGN KEY (punktnummer)
REFERENCES Netzpunkte(punktnummer)
);
CREATE TABLE Beobachtungen_Tachymeter (
btID INTEGER PRIMARY KEY AUTOINCREMENT,
spID INTEGER,
punktnummer TEXT(10),
hz NUMERIC(3,5),
v NUMERIC(3,5),
distanz NUMERIC(4,4),
CONSTRAINT fk_Beobachtungen_Tachymeter_Standpunkte_Tachymeter FOREIGN KEY (spID)
REFERENCES Standpunkte_Tachymeter(spID),
CONSTRAINT fk_Beobachtungen_Tachymeter_Netzpunkte FOREIGN KEY (punktnummer)
REFERENCES Netzpunkte(punktnummer)
);
""");
con.commit()
con.close()

View File

@@ -0,0 +1,157 @@
from pathlib import Path
import sqlite3
from decimal import Decimal, getcontext
# ToDo: instrumentenID von Anwender übergeben lassen!
def string_to_decimal(zahl):
zahl = zahl.replace(',', '.')
return Decimal(zahl)
pfad_script = Path(__file__).resolve().parent
dateiname = "campsnetz_beobachtungen_bereinigt.csv"
pfad_datei = pfad_script.parent / "Daten" / dateiname
# Prüfen, ob Bereits Daten aus der Datei in der Datenbank vorhanden sind
pfad_datenbank = pfad_script.parent / "Campusnetz.db"
instrumentenID = 1
con = sqlite3.connect(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 dateiname 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 = string_to_decimal(liste_aktueller_zielpunkt[5])
richtung2 = string_to_decimal(liste[5]) - Decimal(200)
zenitwinkel_vollsatz = (string_to_decimal(liste_aktueller_zielpunkt[6]) - string_to_decimal(liste[6]) + 400) / 2
distanz_vollsatz = (string_to_decimal(liste_aktueller_zielpunkt[7]) + string_to_decimal(liste[7])) / 2
if richtung2 < 0:
richtung2 += Decimal(400)
elif richtung2 > 400:
richtung2 -= Decimal(400)
richtung_vollsatz = (richtung1 + richtung2) / 2
#print(richtung_vollsatz)
#print(zenitwinkel_vollsatz)
#print(distanz_vollsatz)
liste_beobachtungen_import.append([liste[0], liste[3], liste[4], richtung_vollsatz, zenitwinkel_vollsatz, 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(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]), dateiname))
con.commit()
cursor.close()
con.close()
print(f"Der Import der Datei {pfad_datei} wurde erfolgreich abgeschlossen.")

View File

@@ -0,0 +1,208 @@
@staticmethod
def R_matrix_aus_quaternion(q0, q1, q2, q3):
return sp.Matrix([
[1 - 2 * (q2 ** 2 + q3 ** 2), 2 * (q1 * q2 - q0 * q3), 2 * (q0 * q2 + q1 * q3)],
[2 * (q1 * q2 + q0 * q3), 1 - 2 * (q1 ** 2 + q3 ** 2), 2 * (q2 * q3 - q0 * q1)],
[2 * (q1 * q3 - q0 * q2), 2 * (q0 * q1 + q2 * q3), 1 - 2 * (q1 ** 2 + q2 ** 2)]
])
def Helmerttransformation_Quaternionen(self):
db = Datenbank.Datenbankzugriff(self.pfad_datenbank)
dict_ausgangssystem = db.get_koordinaten("naeherung_lh", "Dict")
dict_zielsystem = db.get_koordinaten("naeherung_us", "Dict")
gemeinsame_punktnummern = sorted(set(dict_ausgangssystem.keys()) & set(dict_zielsystem.keys()))
anzahl_gemeinsame_punkte = len(gemeinsame_punktnummern)
liste_punkte_ausgangssystem = [dict_ausgangssystem[i] for i in gemeinsame_punktnummern]
liste_punkte_zielsystem = [dict_zielsystem[i] for i in gemeinsame_punktnummern]
print("Anzahl gemeinsame Punkte:", anzahl_gemeinsame_punkte)
print("\nErste Zielpunkte:")
for pn, P in list(zip(gemeinsame_punktnummern, liste_punkte_zielsystem))[:5]:
print(pn, [float(P[0]), float(P[1]), float(P[2])])
print("\nErste Ausgangspunkte:")
for pn, p in list(zip(gemeinsame_punktnummern, liste_punkte_ausgangssystem))[:5]:
print(pn, [float(p[0]), float(p[1]), float(p[2])])
# ToDo: Achtung: Die Ergebnisse sind leicht anders, als in den Beispielrechnung von Luhmann (Rundungsfehler bei Luhmann?)
# ToDo: Automatische Ermittlung der Anzahl Nachkommastellen für Test auf Orthonormalität integrieren!
p1, p2, p3 = liste_punkte_ausgangssystem[0], liste_punkte_ausgangssystem[1], liste_punkte_ausgangssystem[2]
P1, P2, P3 = liste_punkte_zielsystem[0], liste_punkte_zielsystem[1], liste_punkte_zielsystem[2]
# 1) Näherungswertberechnung
m0 = (P2 - P1).norm() / (p2 - p1).norm()
U = (P2 - P1) / (P2 - P1).norm()
W = (U.cross(P3 - P1)) / (U.cross(P3 - P1)).norm()
V = W.cross(U)
u = (p2 - p1) / (p2 - p1).norm()
w = (u.cross(p3 - p1)) / (u.cross(p3 - p1)).norm()
v = w.cross(u)
R = sp.Matrix.hstack(U, V, W) * sp.Matrix.hstack(u, v, w).T
XS = (P1 + P2 + P3) / 3
xS = (p1 + p2 + p3) / 3
Translation = XS - m0 * R * xS
# 2) Test auf orthonormale Drehmatrix bei 3 Nachkommastellen!
if R.T.applyfunc(lambda x: round(float(x), 3)) == R.inv().applyfunc(lambda x: round(float(x), 3)) and (
R.T * R).applyfunc(lambda x: round(float(x), 3)) == sp.eye(3).applyfunc(lambda x: round(float(x), 3)) and (
(round(R.det(), 3) == 1.000 or round(R.det(), 3) == -1.000)):
print("R ist Orthonormal!")
else:
print("R ist nicht Orthonormal!")
# 3) Quaternionen berechnen
# ToDo: Prüfen, ob Vorzeichen bei q0 richtig ist!
# ToDo: q0 stimmt nicht mit Luhmann überein!
q = Quaternion.from_rotation_matrix(R)
q0_wert = q.a
q1_wert = q.b
q2_wert = q.c
q3_wert = q.d
dX, dY, dZ, m, q0, q1, q2, q3 = sp.symbols('dX dY dZ m q0 q1 q2 q3')
R_symbolisch = self.R_matrix_aus_quaternion(q0, q1, q2, q3)
# 4) Funktionales Modell
f_zeilen = []
for punkt in liste_punkte_ausgangssystem:
punkt_vektor = sp.Matrix([punkt[0], punkt[1], punkt[2]])
f_zeile_i = sp.Matrix([dX, dY, dZ]) + m * R_symbolisch * punkt_vektor
f_zeilen.extend(list(f_zeile_i))
f_matrix = sp.Matrix(f_zeilen)
f = f_matrix
A_ohne_zahlen = f_matrix.jacobian([dX, dY, dZ, m, q0, q1, q2, q3])
# Parameterschätzung
schwellenwert = 1e-4
anzahl_iterationen = 0
alle_kleiner_vorherige_iteration = False
l_vektor = sp.Matrix([koord for P in liste_punkte_zielsystem for koord in P])
l = l_vektor
P = sp.eye(3 * anzahl_gemeinsame_punkte)
l_berechnet_0 = None
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),
q2: float(q2_wert),
q3: float(q3_wert)}
x0 = sp.Matrix(
[zahlen_0[dX], zahlen_0[dY], zahlen_0[dZ], zahlen_0[m], zahlen_0[q0], zahlen_0[q1], zahlen_0[q2],
zahlen_0[q3]])
l_berechnet_0 = f.subs(zahlen_0).evalf(n=30)
dl_0 = l_vektor - l_berechnet_0
A_0 = A_ohne_zahlen.subs(zahlen_0).evalf(n=30)
N = A_0.T * P * A_0
n_0 = A_0.T * P * dl_0
Qxx_0 = N.inv()
dx = Qxx_0 * n_0
x = x0 + dx
x = sp.N(x, 30) # 30 Nachkommastellen
q_norm = sp.sqrt(x[4] ** 2 + x[5] ** 2 + x[6] ** 2 + x[7] ** 2)
x = sp.Matrix(x)
x[4] /= q_norm
x[5] /= q_norm
x[6] /= q_norm
x[7] /= q_norm
anzahl_iterationen += 1
print(f"Iteration Nr.{anzahl_iterationen} abgeschlossen")
print(dx.evalf(n=3))
else:
zahlen_i = {dX: float(x[0]), dY: float(x[1]), dZ: float(x[2]), m: float(x[3]), q0: float(x[4]),
q1: float(x[5]),
q2: float(x[6]),
q3: float(x[7])}
l_berechnet_i = f.subs(zahlen_i).evalf(n=30)
dl_i = l_vektor - l_berechnet_i
A_i = A_ohne_zahlen.subs(zahlen_i).evalf(n=30)
N_i = A_i.T * P * A_i
Qxx_i = N_i.inv()
n_i = A_i.T * P * dl_i
dx = Qxx_i * n_i
x = sp.Matrix(x + dx)
q_norm = sp.sqrt(x[4] ** 2 + x[5] ** 2 + x[6] ** 2 + x[7] ** 2)
x[4] /= q_norm
x[5] /= q_norm
x[6] /= q_norm
x[7] /= q_norm
anzahl_iterationen += 1
print(f"Iteration Nr.{anzahl_iterationen} abgeschlossen")
print(dx.evalf(n=3))
alle_kleiner = True
for i in range(dx.rows):
wert = float(dx[i])
if abs(wert) > schwellenwert:
alle_kleiner = False
if alle_kleiner and alle_kleiner_vorherige_iteration or anzahl_iterationen == 100:
break
alle_kleiner_vorherige_iteration = alle_kleiner
print(l.evalf(n=3))
print(l_berechnet_0.evalf(n=3))
print(f"x = {x.evalf(n=3)}")
# Neuberechnung Zielsystem
zahlen_final = {
dX: float(x[0]),
dY: float(x[1]),
dZ: float(x[2]),
m: float(x[3]),
q0: float(x[4]),
q1: float(x[5]),
q2: float(x[6]),
q3: float(x[7])
}
l_berechnet_final = f.subs(zahlen_final).evalf(n=30)
liste_l_berechnet_final = []
for i in range(anzahl_gemeinsame_punkte):
Xi = l_berechnet_final[3 * i + 0]
Yi = l_berechnet_final[3 * i + 1]
Zi = l_berechnet_final[3 * i + 2]
liste_l_berechnet_final.append(sp.Matrix([Xi, Yi, Zi]))
print("")
print("l_berechnet_final:")
for punktnummer, l_fin in zip(gemeinsame_punktnummern, liste_l_berechnet_final):
print(f"{punktnummer}: {float(l_fin[0]):.3f}, {float(l_fin[1]):.3f}, {float(l_fin[2]):.3f}")
print("Streckendifferenzen:")
streckendifferenzen = [
(punkt_zielsys - l_final).norm()
for punkt_zielsys, l_final in zip(liste_punkte_zielsystem, liste_l_berechnet_final)
]
print([round(float(s), 6) for s in streckendifferenzen])
Schwerpunkt_Zielsystem = sum(liste_punkte_zielsystem, sp.Matrix([0, 0, 0])) / anzahl_gemeinsame_punkte
Schwerpunkt_berechnet = sum(liste_l_berechnet_final, sp.Matrix([0, 0, 0])) / anzahl_gemeinsame_punkte
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!

View File

@@ -0,0 +1,141 @@
import sympy as sp
from sympy.algebras.quaternion import Quaternion
#ToDo: Achtung: Die Ergebnisse sind leicht anders, als in den Beispielrechnung von Luhmann (Rundungsfehler bei Luhmann?)
#ToDo: Automatische Ermittlung der Anzahl Nachkommastellen für Test auf Orthonormalität integrieren!
#Beipsiel aus Luhmann S. 76
# Ausgangssystem
p1 = sp.Matrix([110, 100, 110])
p2 = sp.Matrix([150, 280, 100])
p3 = sp.Matrix([300, 300, 120])
p4 = sp.Matrix([170, 100, 100])
p5 = sp.Matrix([200, 200, 140])
# Zielsystem
P1 = sp.Matrix([153.559, 170.747, 150.768])
P2 = sp.Matrix([99.026, 350.313, 354.912])
P3 = sp.Matrix([215.054, 544.420, 319.003])
P4 = sp.Matrix([179.413, 251.030, 115.601])
P5 = sp.Matrix([213.431, 340.349, 253.036])
#1) Näherungswertberechnung
m0 = (P2 - P1).norm() / (p2 - p1).norm()
U = (P2 - P1) / (P2 - P1).norm()
W = (U.cross(P3 - P1)) / (U.cross(P3 - P1)).norm()
V = W.cross(U)
u = (p2 - p1) / (p2 - p1).norm()
w = (u.cross(p3 - p1)) / (u.cross(p3 - p1)).norm()
v = w.cross(u)
R = sp.Matrix.hstack(U, V, W) * sp.Matrix.hstack(u, v, w).T
XS = (P1 + P2 + P3) / 3
xS = (p1 + p2 + p3) / 3
Translation = XS - m0 * R * xS
#print(m0.evalf())
#print(R.evalf())
#print(Translation.evalf())
# 2) Test auf orthonormale Drehmatrix bei 3 Nachkommastellen!
if R.T.applyfunc(lambda x: round(float(x), 3)) == R.inv().applyfunc(lambda x: round(float(x), 3)) and (R.T * R).applyfunc(lambda x: round(float(x), 3)) == sp.eye(3).applyfunc(lambda x: round(float(x), 3)) and ((round(R.det(), 3) == 1.000 or round(R.det(), 3) == -1.000)):
print("R ist Orthonormal!")
else:
print("R ist nicht Orthonormal!")
# Testmatrix R aus Luhmann S. 66
#R = sp.Matrix([
# [0.996911, -0.013541, -0.077361],
# [0.030706, 0.973820, 0.225238],
# [0.072285, -0.226918, 0.971228]
#])
# 3) Quaternionen berechnen
# ToDo: Prüfen, ob Vorzeichen bei q0 richtig ist!
#ToDo: q0 stimmt nicht mit Luhmann überein!
q = Quaternion.from_rotation_matrix(R)
q0_wert = q.a
q1_wert = q.b
q2_wert = q.c
q3_wert = q.d
# 4) Funktionales Modell
liste_Punkte = ["P1", "P2", "P3", "P4", "P5"]
liste_unbekannte = ["dX", "dY", "dZ", "dm", "dq0", "dq1", "dq2", "dq3"]
liste_beobachtungen =[]
for punkt in liste_Punkte:
liste_beobachtungen.append(f"X_{punkt}")
liste_beobachtungen.append(f"Y_{punkt}")
liste_beobachtungen.append(f"Z_{punkt}")
dX, dY, dZ, m, q0, q1, q2, q3, xp1, yp1, zp1, xp2, yp2, zp2, xp3, yp3, zp3, xp4, yp4, zp4, xp5, yp5, zp5 = sp.symbols('dX dY dZ m q0 q1 q2 q3 xp1 yp1 zp1 xp2 yp2 zp2 xp3 yp3 zp3 xp4 yp4 zp4 xp5 yp5 zp5')
#print(Translation[0])
zahlen = {dX: Translation[0], dY: Translation[1], dZ: Translation[2], m: m0, q0: q0_wert, q1: q1_wert, q2: q2_wert, q3: 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]}
#print(zahlen[zp1])
f = sp.Matrix(
[[dX + m * (xp1 * (1 - 2 * (q2**2 + q3**2)) + yp1 * (2 * (q1 * q2 - q0 * q3)) + zp1 * (2 * (q0 * q2 + q1 * q3)))],
[dY + m * (xp1 * (2 * (q1 * q2 + q0 * q3)) + yp1 * (1 - 2 * (q1**2 + q3**2)) + zp1 * (2 * (q2 * q3 - q0 * q1)))],
[dZ + m * (xp1 * (2 * (q1 * q3 - q0 * q2)) + yp1 * (2 * (q0 * q1 + q2 * q3)) + zp1 * (1 - 2 * (q1**2 + q2**2)))],
[dX + m * (xp2 * (1 - 2 * (q2**2 + q3**2)) + yp2 * (2 * (q1 * q2 - q0 * q3)) + zp2 * (2 * (q0 * q2 + q1 * q3)))],
[dY + m * (xp2 * (2 * (q1 * q2 + q0 * q3)) + yp2 * (1 - 2 * (q1**2 + q3**2)) + zp2 * (2 * (q2 * q3 - q0 * q1)))],
[dZ + m * (xp2 * (2 * (q1 * q3 - q0 * q2)) + yp2 * (2 * (q0 * q1 + q2 * q3)) + zp2 * (1 - 2 * (q1**2 + q2**2)))],
[dX + m * (xp3 * (1 - 2 * (q2**2 + q3**2)) + yp3 * (2 * (q1 * q2 - q0 * q3)) + zp3 * (2 * (q0 * q2 + q1 * q3)))],
[dY + m * (xp3 * (2 * (q1 * q2 + q0 * q3)) + yp3 * (1 - 2 * (q1**2 + q3**2)) + zp3 * (2 * (q2 * q3 - q0 * q1)))],
[dZ + m * (xp3 * (2 * (q1 * q3 - q0 * q2)) + yp3 * (2 * (q0 * q1 + q2 * q3)) + zp3 * (1 - 2 * (q1**2 + q2**2)))],
[dX + m * (xp4 * (1 - 2 * (q2**2 + q3**2)) + yp4 * (2 * (q1 * q2 - q0 * q3)) + zp4 * (2 * (q0 * q2 + q1 * q3)))],
[dY + m * (xp4 * (2 * (q1 * q2 + q0 * q3)) + yp4 * (1 - 2 * (q1**2 + q3**2)) + zp4 * (2 * (q2 * q3 - q0 * q1)))],
[dZ + m * (xp4 * (2 * (q1 * q3 - q0 * q2)) + yp4 * (2 * (q0 * q1 + q2 * q3)) + zp4 * (1 - 2 * (q1**2 + q2**2)))],
[dX + m * (xp5 * (1 - 2 * (q2**2 + q3**2)) + yp5 * (2 * (q1 * q2 - q0 * q3)) + zp5 * (2 * (q0 * q2 + q1 * q3)))],
[dY + m * (xp5 * (2 * (q1 * q2 + q0 * q3)) + yp5 * (1 - 2 * (q1**2 + q3**2)) + zp5 * (2 * (q2 * q3 - q0 * q1)))],
[dZ + m * (xp5 * (2 * (q1 * q3 - q0 * q2)) + yp5 * (2 * (q0 * q1 + q2 * q3)) + zp5 * (1 - 2 * (q1**2 + q2**2)))],
]
)
A_ohne_zahlen = f.jacobian([dX, dY, dZ, m, q0, q1, q2, q3])
A = A_ohne_zahlen.subs(zahlen)
#print(J)
#print(J_zahlen.evalf(n=3))
# Parameterschätzung
schwellenwert = 1e-3
alle_kleiner = True
x0 = sp.Matrix([zahlen[dX], zahlen[dY], zahlen[dZ], zahlen[m], zahlen[q0], zahlen[q1], zahlen[q2], zahlen[q3]])
P = sp.eye(15)
N = A.T * P * A
l = sp.Matrix([p1[0], p1[1], p1[2], p2[0], p2[1], p2[2], p3[0], p3[1], p3[2], p4[0], p4[1], p4[2], p5[0], p5[1], p5[2]])
# ToDo: Prüfen, ob n mit l oder mit dl!
n = A.T * P * l
Qxx = N.evalf(n=30).inv()
dx = Qxx * n
x = x0 + dx
print(x0.evalf(n=3))
print(dx.evalf(n=3))
print(x.evalf(n=3))
for i in range (dx.rows):
wert = float(dx[i])
if abs(wert) >= schwellenwert:
print("Warnung")
alle_kleiner = False
if alle_kleiner: print("Ausgleichung fertig!")

View File

@@ -0,0 +1,155 @@
import sympy as sp
from sympy.algebras.quaternion import Quaternion
#ToDo: Achtung: Die Ergebnisse sind leicht anders, als in den Beispielrechnung von Luhmann (Rundungsfehler bei Luhmann?)
#ToDo: Automatische Ermittlung der Anzahl Nachkommastellen für Test auf Orthonormalität integrieren!
#Beipsiel aus Luhmann S. 76
# Ausgangssystem
p1 = sp.Matrix([110, 100, 110])
p2 = sp.Matrix([150, 280, 100])
p3 = sp.Matrix([300, 300, 120])
p4 = sp.Matrix([170, 100, 100])
p5 = sp.Matrix([200, 200, 140])
# Zielsystem
P1 = sp.Matrix([153.559, 170.747, 150.768])
P2 = sp.Matrix([99.026, 350.313, 354.912])
P3 = sp.Matrix([215.054, 544.420, 319.003])
P4 = sp.Matrix([179.413, 251.030, 115.601])
P5 = sp.Matrix([213.431, 340.349, 253.036])
#1) Näherungswertberechnung
m0 = (P2 - P1).norm() / (p2 - p1).norm()
U = (P2 - P1) / (P2 - P1).norm()
W = (U.cross(P3 - P1)) / (U.cross(P3 - P1)).norm()
V = W.cross(U)
u = (p2 - p1) / (p2 - p1).norm()
w = (u.cross(p3 - p1)) / (u.cross(p3 - p1)).norm()
v = w.cross(u)
R = sp.Matrix.hstack(U, V, W) * sp.Matrix.hstack(u, v, w).T
XS = (P1 + P2 + P3) / 3
xS = (p1 + p2 + p3) / 3
Translation = XS - m0 * R * xS
#print(m0.evalf())
#print(R.evalf())
#print(Translation.evalf())
# 2) Test auf orthonormale Drehmatrix bei 3 Nachkommastellen!
if R.T.applyfunc(lambda x: round(float(x), 3)) == R.inv().applyfunc(lambda x: round(float(x), 3)) and (R.T * R).applyfunc(lambda x: round(float(x), 3)) == sp.eye(3).applyfunc(lambda x: round(float(x), 3)) and ((round(R.det(), 3) == 1.000 or round(R.det(), 3) == -1.000)):
print("R ist Orthonormal!")
else:
print("R ist nicht Orthonormal!")
# Testmatrix R aus Luhmann S. 66
#R = sp.Matrix([
# [0.996911, -0.013541, -0.077361],
# [0.030706, 0.973820, 0.225238],
# [0.072285, -0.226918, 0.971228]
#])
# 3) Quaternionen berechnen
# ToDo: Prüfen, ob Vorzeichen bei q0 richtig ist!
#ToDo: q0 stimmt nicht mit Luhmann überein!
q = Quaternion.from_rotation_matrix(R)
q0_wert = q.a
q1_wert = q.b
q2_wert = q.c
q3_wert = q.d
# 4) Funktionales Modell
liste_Punkte = ["P1", "P2", "P3", "P4", "P5"]
liste_unbekannte = ["dX", "dY", "dZ", "dm", "dq0", "dq1", "dq2", "dq3"]
liste_beobachtungen =[]
for punkt in liste_Punkte:
liste_beobachtungen.append(f"X_{punkt}")
liste_beobachtungen.append(f"Y_{punkt}")
liste_beobachtungen.append(f"Z_{punkt}")
dX, dY, dZ, m, q0, q1, q2, q3, xp1, yp1, zp1, xp2, yp2, zp2, xp3, yp3, zp3, xp4, yp4, zp4, xp5, yp5, zp5 = sp.symbols('dX dY dZ m q0 q1 q2 q3 xp1 yp1 zp1 xp2 yp2 zp2 xp3 yp3 zp3 xp4 yp4 zp4 xp5 yp5 zp5')
#print(Translation[0])
zahlen = {dX: Translation[0], dY: Translation[1], dZ: Translation[2], m: m0, q0: q0_wert, q1: q1_wert, q2: q2_wert, q3: 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]}
#print(zahlen[zp1])
f = sp.Matrix(
[[dX + m * (xp1 * (1 - 2 * (q2**2 + q3**2)) + yp1 * (2 * (q1 * q2 - q0 * q3)) + zp1 * (2 * (q0 * q2 + q1 * q3)))],
[dY + m * (xp1 * (2 * (q1 * q2 + q0 * q3)) + yp1 * (1 - 2 * (q1**2 + q3**2)) + zp1 * (2 * (q2 * q3 - q0 * q1)))],
[dZ + m * (xp1 * (2 * (q1 * q3 - q0 * q2)) + yp1 * (2 * (q0 * q1 + q2 * q3)) + zp1 * (1 - 2 * (q1**2 + q2**2)))],
[dX + m * (xp2 * (1 - 2 * (q2**2 + q3**2)) + yp2 * (2 * (q1 * q2 - q0 * q3)) + zp2 * (2 * (q0 * q2 + q1 * q3)))],
[dY + m * (xp2 * (2 * (q1 * q2 + q0 * q3)) + yp2 * (1 - 2 * (q1**2 + q3**2)) + zp2 * (2 * (q2 * q3 - q0 * q1)))],
[dZ + m * (xp2 * (2 * (q1 * q3 - q0 * q2)) + yp2 * (2 * (q0 * q1 + q2 * q3)) + zp2 * (1 - 2 * (q1**2 + q2**2)))],
[dX + m * (xp3 * (1 - 2 * (q2**2 + q3**2)) + yp3 * (2 * (q1 * q2 - q0 * q3)) + zp3 * (2 * (q0 * q2 + q1 * q3)))],
[dY + m * (xp3 * (2 * (q1 * q2 + q0 * q3)) + yp3 * (1 - 2 * (q1**2 + q3**2)) + zp3 * (2 * (q2 * q3 - q0 * q1)))],
[dZ + m * (xp3 * (2 * (q1 * q3 - q0 * q2)) + yp3 * (2 * (q0 * q1 + q2 * q3)) + zp3 * (1 - 2 * (q1**2 + q2**2)))],
[dX + m * (xp4 * (1 - 2 * (q2**2 + q3**2)) + yp4 * (2 * (q1 * q2 - q0 * q3)) + zp4 * (2 * (q0 * q2 + q1 * q3)))],
[dY + m * (xp4 * (2 * (q1 * q2 + q0 * q3)) + yp4 * (1 - 2 * (q1**2 + q3**2)) + zp4 * (2 * (q2 * q3 - q0 * q1)))],
[dZ + m * (xp4 * (2 * (q1 * q3 - q0 * q2)) + yp4 * (2 * (q0 * q1 + q2 * q3)) + zp4 * (1 - 2 * (q1**2 + q2**2)))],
[dX + m * (xp5 * (1 - 2 * (q2**2 + q3**2)) + yp5 * (2 * (q1 * q2 - q0 * q3)) + zp5 * (2 * (q0 * q2 + q1 * q3)))],
[dY + m * (xp5 * (2 * (q1 * q2 + q0 * q3)) + yp5 * (1 - 2 * (q1**2 + q3**2)) + zp5 * (2 * (q2 * q3 - q0 * q1)))],
[dZ + m * (xp5 * (2 * (q1 * q3 - q0 * q2)) + yp5 * (2 * (q0 * q1 + q2 * q3)) + zp5 * (1 - 2 * (q1**2 + q2**2)))],
]
)
A_ohne_zahlen = f.jacobian([dX, dY, dZ, m, q0, q1, q2, q3])
A = A_ohne_zahlen.subs(zahlen)
#print(J)
#print(J_zahlen.evalf(n=3))
# Parameterschätzung
schwellenwert = 1e-3
alle_kleiner = True
x0 = sp.Matrix([zahlen[dX], zahlen[dY], zahlen[dZ], zahlen[m], zahlen[q0], zahlen[q1], zahlen[q2], zahlen[q3]])
P = sp.eye(15)
N = A.T * P * A
#l = sp.Matrix([p1[0], p1[1], p1[2], p2[0], p2[1], p2[2], p3[0], p3[1], p3[2], p4[0], p4[1], p4[2], p5[0], p5[1], p5[2]])
R_matrix = sp.Matrix([[1 - 2 * (q2_wert**2 + q3_wert**2), 2 * (q1_wert * q2_wert - q0_wert * q3_wert), 2 * (q0_wert * q2_wert + q1_wert * q3_wert)],
[2 * (q1_wert * q2_wert + q0_wert * q3_wert), 1 - 2 * (q1_wert**2 + q3_wert**2), 2 * (q2_wert * q3_wert - q0_wert * q1_wert)],
[2 * (q1_wert * q3_wert - q0_wert * q2_wert), 2 * (q0_wert * q1_wert + q2_wert * q3_wert), 1 - 2 * (q1_wert**2 + q2_wert**2)]])
liste_punkte_ausgangssystem = [p1, p2, p3, p4, p5]
liste_l_berechnet_0 = [Translation + m0 * R_matrix * p for p in liste_punkte_ausgangssystem]
l_berechnet_0 = sp.Matrix.vstack(*liste_l_berechnet_0)
l = sp.Matrix([P1[0] - p1[0], P1[1] - p1[1], P1[2] - p1[2], P2[0] - p2[0], P2[1] - p2[1], P2[2] - p2[2], P3[0] - p3[0], P3[1] - p3[1], P3[2] - p3[2], P4[0] - p4[0], P4[1] - p4[1], P4[2] - p4[2], P5[0] - p5[0], P5[1] - p5[1], P5[2] - p5[2]])
# ToDo: Prüfen, ob n mit l oder mit dl!
n = A.T * P * l
Qxx = N.evalf(n=30).inv()
dx = Qxx * n
x = x0 + dx
print(l.evalf(n=3))
print(l_berechnet_0.evalf(n=3))
#print(x0.evalf(n=3))
#print(dx.evalf(n=3))
#print(x.evalf(n=3))
for i in range (dx.rows):
wert = float(dx[i])
if abs(wert) >= schwellenwert:
#print("Warnung")
alle_kleiner = False
if alle_kleiner: print("Ausgleichung fertig!")

View File

@@ -0,0 +1,6 @@
i = 5
if i % 6 != 0:
print("nein")
else:
print("ja")

View File

@@ -0,0 +1,33 @@
{
"cells": [
{
"metadata": {},
"cell_type": "code",
"outputs": [],
"execution_count": null,
"source": "",
"id": "32199e6b9a0ba953"
}
],
"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
}

View File

@@ -0,0 +1,482 @@
import sympy as sp
from sympy.algebras.quaternion import Quaternion
#ToDo: Achtung: Die Ergebnisse sind leicht anders, als in den Beispielrechnung von Luhmann (Rundungsfehler bei Luhmann?)
#ToDo: Automatische Ermittlung der Anzahl Nachkommastellen für Test auf Orthonormalität integrieren!
#Beipsiel aus Luhmann S. 76
# Ausgangssystem
p1 = sp.Matrix([110, 100, 110])
p2 = sp.Matrix([150, 280, 100])
p3 = sp.Matrix([300, 300, 120])
p4 = sp.Matrix([170, 100, 100])
p5 = sp.Matrix([200, 200, 140])
# Zielsystem
P1 = sp.Matrix([153.559, 170.747, 150.768])
P2 = sp.Matrix([99.026, 350.313, 354.912])
P3 = sp.Matrix([215.054, 544.420, 319.003])
P4 = sp.Matrix([179.413, 251.030, 115.601])
P5 = sp.Matrix([213.431, 340.349, 253.036])
#1) Näherungswertberechnung
m0 = (P2 - P1).norm() / (p2 - p1).norm()
U = (P2 - P1) / (P2 - P1).norm()
W = (U.cross(P3 - P1)) / (U.cross(P3 - P1)).norm()
V = W.cross(U)
u = (p2 - p1) / (p2 - p1).norm()
w = (u.cross(p3 - p1)) / (u.cross(p3 - p1)).norm()
v = w.cross(u)
R = sp.Matrix.hstack(U, V, W) * sp.Matrix.hstack(u, v, w).T
XS = (P1 + P2 + P3) / 3
xS = (p1 + p2 + p3) / 3
Translation = XS - m0 * R * xS
#print(m0.evalf())
#print(R.evalf())
#print(Translation.evalf())
# 2) Test auf orthonormale Drehmatrix bei 3 Nachkommastellen!
if R.T.applyfunc(lambda x: round(float(x), 3)) == R.inv().applyfunc(lambda x: round(float(x), 3)) and (R.T * R).applyfunc(lambda x: round(float(x), 3)) == sp.eye(3).applyfunc(lambda x: round(float(x), 3)) and ((round(R.det(), 3) == 1.000 or round(R.det(), 3) == -1.000)):
print("R ist Orthonormal!")
else:
print("R ist nicht Orthonormal!")
# Testmatrix R aus Luhmann S. 66
#R = sp.Matrix([
# [0.996911, -0.013541, -0.077361],
# [0.030706, 0.973820, 0.225238],
# [0.072285, -0.226918, 0.971228]
#])
# 3) Quaternionen berechnen
# ToDo: Prüfen, ob Vorzeichen bei q0 richtig ist!
#ToDo: q0 stimmt nicht mit Luhmann überein!
q = Quaternion.from_rotation_matrix(R)
q0_wert = q.a
q1_wert = q.b
q2_wert = q.c
q3_wert = q.d
# 4) Funktionales Modell
liste_Punkte = ["P1", "P2", "P3", "P4", "P5"]
liste_unbekannte = ["dX", "dY", "dZ", "dm", "dq0", "dq1", "dq2", "dq3"]
liste_beobachtungen =[]
for punkt in liste_Punkte:
liste_beobachtungen.append(f"X_{punkt}")
liste_beobachtungen.append(f"Y_{punkt}")
liste_beobachtungen.append(f"Z_{punkt}")
dX, dY, dZ, m, q0, q1, q2, q3, xp1, yp1, zp1, xp2, yp2, zp2, xp3, yp3, zp3, xp4, yp4, zp4, xp5, yp5, zp5 = sp.symbols('dX dY dZ m q0 q1 q2 q3 xp1 yp1 zp1 xp2 yp2 zp2 xp3 yp3 zp3 xp4 yp4 zp4 xp5 yp5 zp5')
#print(Translation[0])
#print(zahlen[zp1])
f = sp.Matrix(
[[dX + m * (xp1 * (1 - 2 * (q2**2 + q3**2)) + yp1 * (2 * (q1 * q2 - q0 * q3)) + zp1 * (2 * (q0 * q2 + q1 * q3)))],
[dY + m * (xp1 * (2 * (q1 * q2 + q0 * q3)) + yp1 * (1 - 2 * (q1**2 + q3**2)) + zp1 * (2 * (q2 * q3 - q0 * q1)))],
[dZ + m * (xp1 * (2 * (q1 * q3 - q0 * q2)) + yp1 * (2 * (q0 * q1 + q2 * q3)) + zp1 * (1 - 2 * (q1**2 + q2**2)))],
[dX + m * (xp2 * (1 - 2 * (q2**2 + q3**2)) + yp2 * (2 * (q1 * q2 - q0 * q3)) + zp2 * (2 * (q0 * q2 + q1 * q3)))],
[dY + m * (xp2 * (2 * (q1 * q2 + q0 * q3)) + yp2 * (1 - 2 * (q1**2 + q3**2)) + zp2 * (2 * (q2 * q3 - q0 * q1)))],
[dZ + m * (xp2 * (2 * (q1 * q3 - q0 * q2)) + yp2 * (2 * (q0 * q1 + q2 * q3)) + zp2 * (1 - 2 * (q1**2 + q2**2)))],
[dX + m * (xp3 * (1 - 2 * (q2**2 + q3**2)) + yp3 * (2 * (q1 * q2 - q0 * q3)) + zp3 * (2 * (q0 * q2 + q1 * q3)))],
[dY + m * (xp3 * (2 * (q1 * q2 + q0 * q3)) + yp3 * (1 - 2 * (q1**2 + q3**2)) + zp3 * (2 * (q2 * q3 - q0 * q1)))],
[dZ + m * (xp3 * (2 * (q1 * q3 - q0 * q2)) + yp3 * (2 * (q0 * q1 + q2 * q3)) + zp3 * (1 - 2 * (q1**2 + q2**2)))],
[dX + m * (xp4 * (1 - 2 * (q2**2 + q3**2)) + yp4 * (2 * (q1 * q2 - q0 * q3)) + zp4 * (2 * (q0 * q2 + q1 * q3)))],
[dY + m * (xp4 * (2 * (q1 * q2 + q0 * q3)) + yp4 * (1 - 2 * (q1**2 + q3**2)) + zp4 * (2 * (q2 * q3 - q0 * q1)))],
[dZ + m * (xp4 * (2 * (q1 * q3 - q0 * q2)) + yp4 * (2 * (q0 * q1 + q2 * q3)) + zp4 * (1 - 2 * (q1**2 + q2**2)))],
[dX + m * (xp5 * (1 - 2 * (q2**2 + q3**2)) + yp5 * (2 * (q1 * q2 - q0 * q3)) + zp5 * (2 * (q0 * q2 + q1 * q3)))],
[dY + m * (xp5 * (2 * (q1 * q2 + q0 * q3)) + yp5 * (1 - 2 * (q1**2 + q3**2)) + zp5 * (2 * (q2 * q3 - q0 * q1)))],
[dZ + m * (xp5 * (2 * (q1 * q3 - q0 * q2)) + yp5 * (2 * (q0 * q1 + q2 * q3)) + zp5 * (1 - 2 * (q1**2 + q2**2)))],
]
)
A_ohne_zahlen = f.jacobian([dX, dY, dZ, m, q0, q1, q2, q3])
#print(J)
#print(J_zahlen.evalf(n=3))
# Parameterschätzung
schwellenwert = 1e-4
anzahl_iterationen = 0
alle_kleiner_vorherige_iteration = False
P = sp.eye(15)
#l = sp.Matrix([p1[0], p1[1], p1[2], p2[0], p2[1], p2[2], p3[0], p3[1], p3[2], p4[0], p4[1], p4[2], p5[0], p5[1], p5[2]])
liste_punkte_ausgangssystem = [p1, p2, p3, p4, p5]
#l = sp.Matrix([P1[0] - p1[0], P1[1] - p1[1], P1[2] - p1[2], P2[0] - p2[0], P2[1] - p2[1], P2[2] - p2[2], P3[0] - p3[0], P3[1] - p3[1], P3[2] - p3[2], P4[0] - p4[0], P4[1] - p4[1], P4[2] - p4[2], P5[0] - p5[0], P5[1] - p5[1], P5[2] - p5[2]])
l = sp.Matrix([P1[0], P1[1], P1[2], P2[0], P2[1], P2[2], P3[0], P3[1], P3[2], P4[0], P4[1], P4[2], P5[0], P5[1], P5[2]])
# ToDo: Prüfen, ob n mit l oder mit dl!
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),
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]}
x0 = sp.Matrix([zahlen_0[dX], zahlen_0[dY], zahlen_0[dZ], zahlen_0[m], zahlen_0[q0], zahlen_0[q1], zahlen_0[q2], zahlen_0[q3]])
R_matrix_0 = sp.Matrix([[1 - 2 * (q2_wert ** 2 + q3_wert ** 2), 2 * (q1_wert * q2_wert - q0_wert * q3_wert),
2 * (q0_wert * q2_wert + q1_wert * q3_wert)],
[2 * (q1_wert * q2_wert + q0_wert * q3_wert), 1 - 2 * (q1_wert ** 2 + q3_wert ** 2),
2 * (q2_wert * q3_wert - q0_wert * q1_wert)],
[2 * (q1_wert * q3_wert - q0_wert * q2_wert), 2 * (q0_wert * q1_wert + q2_wert * q3_wert),
1 - 2 * (q1_wert ** 2 + q2_wert ** 2)]])
liste_l_berechnet_0 = [Translation + m0 * R_matrix_0 * p for p in liste_punkte_ausgangssystem]
l_berechnet_0 = sp.Matrix.vstack(*liste_l_berechnet_0)
dl_0 = l - l_berechnet_0
A_0 = A_ohne_zahlen.subs(zahlen_0)
N = A_0.T * P * A_0
n_0 = A_0.T * P * dl_0
Qxx_0 = N.evalf(n=30).inv()
dx = Qxx_0 * n_0
x = x0 + dx
x = sp.N(x, 10) # 10 Nachkommastellen
q_norm = sp.sqrt(x[4] ** 2 + x[5] ** 2 + x[6] ** 2 + x[7] ** 2)
x = sp.Matrix(x)
x[4] /= q_norm
x[5] /= q_norm
x[6] /= q_norm
x[7] /= q_norm
anzahl_iterationen += 1
print(f"Iteration Nr.{anzahl_iterationen} abgeschlossen")
print(dx.evalf(n=3))
else:
zahlen_i = {dX: float(x[0]), dY: float(x[1]), dZ: float(x[2]), m: float(x[3]), q0: float(x[4]), q1: float(x[5]),
q2: float(x[6]),
q3: float(x[7]), 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]}
R_matrix_i = sp.Matrix([[1 - 2 * (zahlen_i[q2] ** 2 + zahlen_i[q3] ** 2), 2 * (zahlen_i[q1] * zahlen_i[q2] - zahlen_i[q0] * zahlen_i[q3]),
2 * (zahlen_i[q0] * zahlen_i[q2] + zahlen_i[q1] * zahlen_i[q3])],
[2 * (zahlen_i[q1] * zahlen_i[q2] + zahlen_i[q0] * zahlen_i[q3]), 1 - 2 * (zahlen_i[q1] ** 2 + zahlen_i[q3] ** 2),
2 * (zahlen_i[q2] * zahlen_i[q3] - zahlen_i[q0] * zahlen_i[q1])],
[2 * (zahlen_i[q1] * zahlen_i[q3] - zahlen_i[q0] * zahlen_i[q2]),
2 * (zahlen_i[q0] * zahlen_i[q1] + zahlen_i[q2] * zahlen_i[q3]),
1 - 2 * (zahlen_i[q1] ** 2 + zahlen_i[q2] ** 2)]])
#print("R_matrix_i")
liste_l_berechnet_i = [sp.Matrix([zahlen_i[dX], zahlen_i[dY], zahlen_i[dZ]]) + zahlen_i[m] * R_matrix_i * p for p in liste_punkte_ausgangssystem]
#print("liste_l_berechnet_i")
l_berechnet_i = sp.Matrix.vstack(*liste_l_berechnet_i)
#print("l_berechnet_i")
dl_i = l - l_berechnet_i
#print("dl_i")
A_i = A_ohne_zahlen.subs(zahlen_i).evalf(n=30)
#print("A_i")
N_i = A_i.T * P * A_i
#print("N_i")
n_i = A_i.T * P * dl_i
# print("n_i")
Qxx_i = N_i.evalf(n=30).inv()
#print("Qxx_i")
n_i = A_i.T * P * dl_i
#print("n_i")
dx = Qxx_i * n_i
#print("dx")
x += dx
x = sp.Matrix(x)
q_norm = sp.sqrt(x[4] ** 2 + x[5] ** 2 + x[6] ** 2 + x[7] ** 2)
x[4] /= q_norm
x[5] /= q_norm
x[6] /= q_norm
x[7] /= q_norm
# print("x")
anzahl_iterationen += 1
print(f"Iteration Nr.{anzahl_iterationen} abgeschlossen")
print(dx.evalf(n=3))
alle_kleiner = True
for i in range(dx.rows):
wert = float(dx[i])
if abs(wert) > schwellenwert:
alle_kleiner = False
if alle_kleiner and alle_kleiner_vorherige_iteration or anzahl_iterationen == 20:
break
alle_kleiner_vorherige_iteration = alle_kleiner
print(l.evalf(n=3))
print(l_berechnet_0.evalf(n=3))
print(f"x = {x.evalf(n=3)}")
#Neuberechnung Zielsystem
zahlen_i = {dX: float(x[0]), dY: float(x[1]), dZ: float(x[2]), m: float(x[3]), q0: float(x[4]), q1: float(x[5]),
q2: float(x[6]),
q3: float(x[7]), 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]}
# print("zahlen_i")
R_matrix_i = sp.Matrix(
[[1 - 2 * (zahlen_i[q2] ** 2 + zahlen_i[q3] ** 2), 2 * (zahlen_i[q1] * zahlen_i[q2] - zahlen_i[q0] * zahlen_i[q3]),
2 * (zahlen_i[q0] * zahlen_i[q2] + zahlen_i[q1] * zahlen_i[q3])],
[2 * (zahlen_i[q1] * zahlen_i[q2] + zahlen_i[q0] * zahlen_i[q3]), 1 - 2 * (zahlen_i[q1] ** 2 + zahlen_i[q3] ** 2),
2 * (zahlen_i[q2] * zahlen_i[q3] - zahlen_i[q0] * zahlen_i[q1])],
[2 * (zahlen_i[q1] * zahlen_i[q3] - zahlen_i[q0] * zahlen_i[q2]),
2 * (zahlen_i[q0] * zahlen_i[q1] + zahlen_i[q2] * zahlen_i[q3]),
1 - 2 * (zahlen_i[q1] ** 2 + zahlen_i[q2] ** 2)]])
# print("R_matrix_i")
liste_l_berechnet_i = [sp.Matrix([zahlen_i[dX], zahlen_i[dY], zahlen_i[dZ]]) + zahlen_i[m] * R_matrix_i * p for p in
liste_punkte_ausgangssystem]
# print("liste_l_berechnet_i")
l_berechnet_i = sp.Matrix.vstack(*liste_l_berechnet_i)
print("")
print("l_berechnet_final:")
liste_punkte_zielsystem = [P1, P2, P3, P4, P5]
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, 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!
def Helmerttransformation_Euler(self):
db = Datenbank.Datenbankzugriff(self.pfad_datenbank)
dict_ausgangssystem = db.get_koordinaten("naeherung_lh", "Dict")
dict_zielsystem = db.get_koordinaten("naeherung_us", "Dict")
gemeinsame_punktnummern = sorted(set(dict_ausgangssystem.keys()) & set(dict_zielsystem.keys()))
anzahl_gemeinsame_punkte = len(gemeinsame_punktnummern)
liste_punkte_ausgangssystem = [dict_ausgangssystem[i] for i in gemeinsame_punktnummern]
liste_punkte_zielsystem = [dict_zielsystem[i] for i in gemeinsame_punktnummern]
print("Anzahl gemeinsame Punkte:", anzahl_gemeinsame_punkte)
print("\nErste Zielpunkte:")
for pn, P in list(zip(gemeinsame_punktnummern, liste_punkte_zielsystem))[:5]:
print(pn, [float(P[0]), float(P[1]), float(P[2])])
print("\nErste Ausgangspunkte:")
for pn, p in list(zip(gemeinsame_punktnummern, liste_punkte_ausgangssystem))[:5]:
print(pn, [float(p[0]), float(p[1]), float(p[2])])
# --- Näherungswerte (minimal erweitert) ---
p1, p2, p3 = liste_punkte_ausgangssystem[0], liste_punkte_ausgangssystem[1], liste_punkte_ausgangssystem[2]
P1, P2, P3 = liste_punkte_zielsystem[0], liste_punkte_zielsystem[1], liste_punkte_zielsystem[2]
# 1) Näherungswert Maßstab: Mittelwert aus allen Punktpaaren
ratios = []
for i, j in combinations(range(anzahl_gemeinsame_punkte), 2):
dp = (liste_punkte_ausgangssystem[j] - liste_punkte_ausgangssystem[i]).norm()
dP = (liste_punkte_zielsystem[j] - liste_punkte_zielsystem[i]).norm()
dp_f = float(dp)
if dp_f > 0:
ratios.append(float(dP) / dp_f)
m0 = sum(ratios) / len(ratios)
if ratios:
print("min/mean/max:",
min(ratios),
sum(ratios) / len(ratios),
max(ratios))
U = (P2 - P1) / (P2 - P1).norm()
W = (U.cross(P3 - P1)) / (U.cross(P3 - P1)).norm()
V = W.cross(U)
u = (p2 - p1) / (p2 - p1).norm()
w = (u.cross(p3 - p1)) / (u.cross(p3 - p1)).norm()
v = w.cross(u)
R0 = sp.Matrix.hstack(U, V, W) * sp.Matrix.hstack(u, v, w).T
XS = sum(liste_punkte_zielsystem, sp.Matrix([0, 0, 0])) / anzahl_gemeinsame_punkte
xS = sum(liste_punkte_ausgangssystem, sp.Matrix([0, 0, 0])) / anzahl_gemeinsame_punkte
Translation0 = XS - m0 * R0 * xS
# 2) Test auf orthonormale Drehmatrix bei 3 Nachkommastellen!
if R0.T.applyfunc(lambda x: round(float(x), 3)) == R0.inv().applyfunc(lambda x: round(float(x), 3)) \
and (R0.T * R0).applyfunc(lambda x: round(float(x), 3)) == sp.eye(3).applyfunc(lambda x: round(float(x), 3)) \
and ((round(R0.det(), 3) == 1.000 or round(R0.det(), 3) == -1.000)):
print("R ist Orthonormal!")
else:
print("R ist nicht Orthonormal!")
# 3) Euler-Näherungswerte aus R0
e2_0 = sp.asin(R0[2, 0])
# Schutz gegen Division durch 0 wenn cos(e2) ~ 0:
cos_e2_0 = sp.cos(e2_0)
e1_0 = sp.acos(R0[2, 2] / cos_e2_0)
e3_0 = sp.acos(R0[0, 0] / cos_e2_0)
# --- Symbolische Unbekannte (klassische 7 Parameter) ---
dX, dY, dZ, m, e1, e2, e3 = sp.symbols('dX dY dZ m e1 e2 e3')
R_symbolisch = self.R_matrix_aus_euler(e1, e2, e3)
# 4) Funktionales Modell
f_zeilen = []
for punkt in liste_punkte_ausgangssystem:
punkt_vektor = sp.Matrix([punkt[0], punkt[1], punkt[2]])
f_zeile_i = sp.Matrix([dX, dY, dZ]) + m * R_symbolisch * punkt_vektor
f_zeilen.extend(list(f_zeile_i))
f_matrix = sp.Matrix(f_zeilen)
f = f_matrix
A_ohne_zahlen = f_matrix.jacobian([dX, dY, dZ, m, e1, e2, e3])
# Parameterschätzung
schwellenwert = 1e-4
anzahl_iterationen = 0
alle_kleiner_vorherige_iteration = False
l_vektor = sp.Matrix([koord for P in liste_punkte_zielsystem for koord in P])
l = l_vektor
P_mat = sp.eye(3 * anzahl_gemeinsame_punkte)
l_berechnet_0 = None
while True:
if anzahl_iterationen == 0:
zahlen_0 = {
dX: float(Translation0[0]),
dY: float(Translation0[1]),
dZ: float(Translation0[2]),
m: float(m0),
e1: float(e1_0),
e2: float(e2_0),
e3: float(e3_0)
}
x0 = sp.Matrix([zahlen_0[dX], zahlen_0[dY], zahlen_0[dZ],
zahlen_0[m], zahlen_0[e1], zahlen_0[e2], zahlen_0[e3]])
l_berechnet_0 = f.subs(zahlen_0).evalf(n=30)
dl_0 = l_vektor - l_berechnet_0
A_0 = A_ohne_zahlen.subs(zahlen_0).evalf(n=30)
N = A_0.T * P_mat * A_0
n_0 = A_0.T * P_mat * dl_0
Qxx_0 = N.inv()
dx = Qxx_0 * n_0
x = x0 + dx
x = sp.N(x, 30)
anzahl_iterationen += 1
print(f"Iteration Nr.{anzahl_iterationen} abgeschlossen")
print(dx.evalf(n=3))
else:
zahlen_i = {
dX: float(x[0]),
dY: float(x[1]),
dZ: float(x[2]),
m: float(x[3]),
e1: float(x[4]),
e2: float(x[5]),
e3: float(x[6])
}
l_berechnet_i = f.subs(zahlen_i).evalf(n=30)
dl_i = l_vektor - l_berechnet_i
A_i = A_ohne_zahlen.subs(zahlen_i).evalf(n=30)
N_i = A_i.T * P_mat * A_i
Qxx_i = N_i.inv()
n_i = A_i.T * P_mat * dl_i
dx = Qxx_i * n_i
x = sp.Matrix(x + dx)
anzahl_iterationen += 1
print(f"Iteration Nr.{anzahl_iterationen} abgeschlossen")
print(dx.evalf(n=3))
alle_kleiner = True
for i in range(dx.rows):
wert = float(dx[i])
if abs(wert) > schwellenwert:
alle_kleiner = False
if (alle_kleiner and alle_kleiner_vorherige_iteration) or anzahl_iterationen == 100:
break
alle_kleiner_vorherige_iteration = alle_kleiner
print(l.evalf(n=3))
print(l_berechnet_0.evalf(n=3))
print(f"x = {x.evalf(n=3)}")
# --- Neuberechnung Zielsystem ---
zahlen_final = {
dX: float(x[0]),
dY: float(x[1]),
dZ: float(x[2]),
m: float(x[3]),
e1: float(x[4]),
e2: float(x[5]),
e3: float(x[6])
}
l_berechnet_final = f.subs(zahlen_final).evalf(n=30)
liste_l_berechnet_final = []
for i in range(anzahl_gemeinsame_punkte):
Xi = l_berechnet_final[3 * i + 0]
Yi = l_berechnet_final[3 * i + 1]
Zi = l_berechnet_final[3 * i + 2]
liste_l_berechnet_final.append(sp.Matrix([Xi, Yi, Zi]))
print("")
print("l_berechnet_final:")
for punktnummer, l_fin in zip(gemeinsame_punktnummern, liste_l_berechnet_final):
print(f"{punktnummer}: {float(l_fin[0]):.3f}, {float(l_fin[1]):.3f}, {float(l_fin[2]):.3f}")
print("Streckendifferenzen:")
streckendifferenzen = [
(punkt_zielsys - l_final).norm()
for punkt_zielsys, l_final in zip(liste_punkte_zielsystem, liste_l_berechnet_final)
]
print([round(float(s), 6) for s in streckendifferenzen])
Schwerpunkt_Zielsystem = sum(liste_punkte_zielsystem, sp.Matrix([0, 0, 0])) / anzahl_gemeinsame_punkte
Schwerpunkt_berechnet = sum(liste_l_berechnet_final, sp.Matrix([0, 0, 0])) / anzahl_gemeinsame_punkte
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")

View File

@@ -0,0 +1,53 @@
# Transformation ITRF2020 --> ETRF89/DREF91 Realisierung 2025
import sympy as sp
from Berechnungen import Einheitenumrechnung
# Helmetert Paramteter zur Referenzepoche t0
t0 = 2015.0
T1 = Einheitenumrechnung.mm_to_m(41.1393)
T2 = Einheitenumrechnung.mm_to_m(51.9830)
T3 = Einheitenumrechnung.mm_to_m(-101.1455)
D = Einheitenumrechnung.ppb(7.8918)
R1 = Einheitenumrechnung.mas_to_rad(0.8878)
R2 = Einheitenumrechnung.mas_to_rad(12.7748)
R3 = Einheitenumrechnung.mas_to_rad(-22.2616)
dotT1 = Einheitenumrechnung.mm_to_m(0)
dotT2 = Einheitenumrechnung.mm_to_m(0)
dotT3 = Einheitenumrechnung.mm_to_m(0)
dotD = 0
dotR1 = Einheitenumrechnung.mas_to_rad(0.086)
dotR2 = Einheitenumrechnung.mas_to_rad(0.519)
dotR3 = Einheitenumrechnung.mas_to_rad(-0.753)
# Testdatensatz der AdV
tc = 2021.48
BRMG = sp.Matrix([4245557.0412, 568958.1394, 4710200.0645])
RANT = sp.Matrix([3645376.2264, 531202.1700, 5189297.0638])
TIT2 = sp.Matrix([3993787.0533, 450204.1794, 4936131.8526])
LDB2 = sp.Matrix([3798344.6978, 955553.3244, 5017221.8937])
FFMJ = sp.Matrix([4053455.6399, 617729.9375, 4869395.8850])
# 1) Epochendifferenz
dt = tc - t0
# 2) Parameter von Epoche t0 auf tc umrechnen
T1_c = T1 + dotT1 * dt
T2_c = T2 + dotT2 * dt
T3_c = T3 + dotT3 * dt
R1_c = R1 + dotR1 * dt
R2_c = R2 + dotR2 * dt
R3_c = R3 + dotR3 * dt
D_c = D + dotD * dt
# 3) Matrizen aufstellen
R_Matrix = sp.Matrix([[D_c, -R3_c, R2_c], [R3_c, D_c, -R1_c], [-R2_c, R1_c, D_c]])
T_Vektor = sp.Matrix([T1_c, T2_c, T3_c])
# 4) Helmerttransformation
print(f"BRMG = {(BRMG + T_Vektor + R_Matrix * BRMG).evalf()}")
print(f"RANT = {(RANT + T_Vektor + R_Matrix * RANT).evalf()}")
print(f"TIT2 = {(TIT2 + T_Vektor + R_Matrix * TIT2).evalf()}")
print(f"LDB2 = {(LDB2 + T_Vektor + R_Matrix * LDB2).evalf()}")
print(f"FFMJ = {(FFMJ + T_Vektor + R_Matrix * FFMJ).evalf()}")

View File

@@ -0,0 +1,239 @@
{
"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
}

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff