Compare commits
61 Commits
220068e17a
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
| 098a02527f | |||
| 30f1104b6d | |||
| 0e8154dc23 | |||
| 8431bad4ff | |||
| 01abbc81d9 | |||
| 86bfd54928 | |||
| ae38545212 | |||
| cd0d60093e | |||
| 425e55f2a5 | |||
| 67c2540c26 | |||
| fe5e69dcf3 | |||
| 1654155f53 | |||
| b652f432b5 | |||
| ac03826d3e | |||
| a31d101576 | |||
| cfc5d60bb9 | |||
| 787ad56a03 | |||
| 6428e15757 | |||
| b5f5161b3d | |||
| 3accf4cf74 | |||
| 2519033f81 | |||
| e21d39844b | |||
| 90930d3619 | |||
| 44f31b8fb0 | |||
| feb33a5c93 | |||
| c38d8b3572 | |||
| 1efd1599f3 | |||
| 656c535208 | |||
| 5f23c68d84 | |||
| b4c1c0a5c8 | |||
| cac12f6569 | |||
| 546cfe9494 | |||
| d1a46f8db1 | |||
| 3aacff9a49 | |||
| 1cd357e5bc | |||
| de829f5e5b | |||
| 68809a1319 | |||
| 55c314dc0c | |||
| 7fc47363af | |||
| 8e999c80cc | |||
| 9d45b50b83 | |||
| d078147386 | |||
| 922b0fe516 | |||
| 669db5373f | |||
| 4db713b2da | |||
| dfe31970b4 | |||
| 38eb77d91f | |||
| 5a1fa3d76a | |||
| 41838462fd | |||
| fe3f7da878 | |||
| 16e22eee89 | |||
| 48a629b144 | |||
| 90a2743b67 | |||
| d40dc9d4c5 | |||
| 819cf92c2d | |||
| 32e73f0114 | |||
| 7ec6532fc3 | |||
| 47ea03b45f | |||
| fe85ec5fbc | |||
| 4f814dcc37 | |||
| 858cfbdde6 |
2
.idea/Masterprojekt-Campusnetz.iml
generated
2
.idea/Masterprojekt-Campusnetz.iml
generated
@@ -4,7 +4,7 @@
|
||||
<content url="file://$MODULE_DIR$">
|
||||
<excludeFolder url="file://$MODULE_DIR$/.venv" />
|
||||
</content>
|
||||
<orderEntry type="jdk" jdkName="Python 3.14 (Masterprojekt)" jdkType="Python SDK" />
|
||||
<orderEntry type="jdk" jdkName="Python 3.14" jdkType="Python SDK" />
|
||||
<orderEntry type="sourceFolder" forTests="false" />
|
||||
</component>
|
||||
</module>
|
||||
26
.idea/dataSources.local.xml
generated
26
.idea/dataSources.local.xml
generated
@@ -14,5 +14,31 @@
|
||||
</introspection-scope>
|
||||
</schema-mapping>
|
||||
</data-source>
|
||||
<data-source name="Campusnetz.db [2]" uuid="1e70ba7f-d1a3-44cb-96d4-ec35638383ed">
|
||||
<database-info product="SQLite" version="3.45.1" jdbc-version="4.2" driver-name="SQLite JDBC" driver-version="3.45.1.0" dbms="SQLITE" exact-version="3.45.1" exact-driver-version="3.45">
|
||||
<identifier-quote-string>"</identifier-quote-string>
|
||||
</database-info>
|
||||
<case-sensitivity plain-identifiers="mixed" quoted-identifiers="mixed" />
|
||||
<secret-storage>master_key</secret-storage>
|
||||
<auth-provider>no-auth</auth-provider>
|
||||
<schema-mapping>
|
||||
<introspection-scope>
|
||||
<node kind="schema" qname="@" />
|
||||
</introspection-scope>
|
||||
</schema-mapping>
|
||||
</data-source>
|
||||
<data-source name="Campusnetz.db [3]" uuid="bf3bfb54-ef6e-4a90-8cb8-69f52581bab9">
|
||||
<database-info product="SQLite" version="3.45.1" jdbc-version="4.2" driver-name="SQLite JDBC" driver-version="3.45.1.0" dbms="SQLITE" exact-version="3.45.1" exact-driver-version="3.45">
|
||||
<identifier-quote-string>"</identifier-quote-string>
|
||||
</database-info>
|
||||
<case-sensitivity plain-identifiers="mixed" quoted-identifiers="mixed" />
|
||||
<secret-storage>master_key</secret-storage>
|
||||
<auth-provider>no-auth</auth-provider>
|
||||
<schema-mapping>
|
||||
<introspection-scope>
|
||||
<node kind="schema" qname="@" />
|
||||
</introspection-scope>
|
||||
</schema-mapping>
|
||||
</data-source>
|
||||
</component>
|
||||
</project>
|
||||
14
.idea/dataSources.xml
generated
14
.idea/dataSources.xml
generated
@@ -8,5 +8,19 @@
|
||||
<jdbc-url>jdbc:sqlite:$PROJECT_DIR$/Campusnetz.db</jdbc-url>
|
||||
<working-dir>$ProjectFileDir$</working-dir>
|
||||
</data-source>
|
||||
<data-source source="LOCAL" name="Campusnetz.db [2]" uuid="1e70ba7f-d1a3-44cb-96d4-ec35638383ed">
|
||||
<driver-ref>sqlite.xerial</driver-ref>
|
||||
<synchronize>true</synchronize>
|
||||
<jdbc-driver>org.sqlite.JDBC</jdbc-driver>
|
||||
<jdbc-url>jdbc:sqlite:$PROJECT_DIR$/Campusnetz.db</jdbc-url>
|
||||
<working-dir>$ProjectFileDir$</working-dir>
|
||||
</data-source>
|
||||
<data-source source="LOCAL" name="Campusnetz.db [3]" uuid="bf3bfb54-ef6e-4a90-8cb8-69f52581bab9">
|
||||
<driver-ref>sqlite.xerial</driver-ref>
|
||||
<synchronize>true</synchronize>
|
||||
<jdbc-driver>org.sqlite.JDBC</jdbc-driver>
|
||||
<jdbc-url>jdbc:sqlite:$PROJECT_DIR$/Campusnetz.db</jdbc-url>
|
||||
<working-dir>$ProjectFileDir$</working-dir>
|
||||
</data-source>
|
||||
</component>
|
||||
</project>
|
||||
70
.idea/dataSources/1e70ba7f-d1a3-44cb-96d4-ec35638383ed.corrupted.20251216-091841.reason.txt
generated
Normal file
70
.idea/dataSources/1e70ba7f-d1a3-44cb-96d4-ec35638383ed.corrupted.20251216-091841.reason.txt
generated
Normal file
@@ -0,0 +1,70 @@
|
||||
java.lang.IllegalStateException: Storage for [C:\Users\fabia\AppData\Local\JetBrains\PyCharm2025.2\data-source\e067176d\1e70ba7f-d1a3-44cb-96d4-ec35638383ed\entities\entities.dat] is already registered
|
||||
at com.intellij.util.io.FilePageCache.registerPagedFileStorage(FilePageCache.java:411)
|
||||
at com.intellij.util.io.PagedFileStorage.<init>(PagedFileStorage.java:74)
|
||||
at com.intellij.util.io.ResizeableMappedFile.<init>(ResizeableMappedFile.java:71)
|
||||
at com.intellij.util.io.PersistentBTreeEnumerator.<init>(PersistentBTreeEnumerator.java:130)
|
||||
at com.intellij.util.io.PersistentEnumerator.createDefaultEnumerator(PersistentEnumerator.java:53)
|
||||
at com.intellij.util.io.PersistentMapImpl.<init>(PersistentMapImpl.java:166)
|
||||
at com.intellij.util.io.PersistentMapImpl.<init>(PersistentMapImpl.java:141)
|
||||
at com.intellij.util.io.PersistentMapBuilder.buildImplementation(PersistentMapBuilder.java:91)
|
||||
at com.intellij.util.io.PersistentMapBuilder.build(PersistentMapBuilder.java:74)
|
||||
at com.intellij.database.model.ModelEntityStoragePersistentBackend.opened(ModelEntityStoragePersistentBackend.kt:136)
|
||||
at com.intellij.database.model.ModelEntityStoragePersistentBackend.<init>(ModelEntityStoragePersistentBackend.kt:86)
|
||||
at com.intellij.database.model.ModelEntityStoragePersistentBackendKt$ourFlusher$1$create$1.invoke(ModelEntityStoragePersistentBackend.kt:45)
|
||||
at com.intellij.database.model.ModelEntityStoragePersistentBackendKt$ourFlusher$1$create$1.invoke(ModelEntityStoragePersistentBackend.kt:45)
|
||||
at com.intellij.database.model.ModelEntityStoragePersistentBackendKt$ourFlusher$1.create$lambda$0(ModelEntityStoragePersistentBackend.kt:45)
|
||||
at java.base/java.util.concurrent.ConcurrentMap.computeIfAbsent(ConcurrentMap.java:330)
|
||||
at com.intellij.database.model.ModelEntityStoragePersistentBackendKt$ourFlusher$1.create(ModelEntityStoragePersistentBackend.kt:45)
|
||||
at com.intellij.database.model.ModelEntityStoragePersistentBackendKt.create(ModelEntityStoragePersistentBackend.kt:76)
|
||||
at com.intellij.database.dataSource.srcStorage.DbSrcModelStorage.createBackend(DbSrcModelStorage.java:289)
|
||||
at com.intellij.database.dataSource.srcStorage.DbSrcModelStorage.createPersistentBackend(DbSrcModelStorage.java:280)
|
||||
at com.intellij.database.dataSource.srcStorage.DbSrcModelStorage.createEntityStorage(DbSrcModelStorage.java:260)
|
||||
at com.intellij.database.model.BaseModel.<init>(BaseModel.java:101)
|
||||
at com.intellij.database.dialects.sqlite.model.SqliteImplModel.<init>(SqliteImplModel.java:40)
|
||||
at com.intellij.database.model.meta.BasicMetaModel.newModel(BasicMetaModel.java:56)
|
||||
at com.intellij.database.model.ModelFacade.createModel(ModelFacade.java:28)
|
||||
at com.intellij.database.model.ModelFactory.createModel(ModelFactory.kt:22)
|
||||
at com.intellij.database.model.serialization.ModelImporter.deserializeFast(ModelImporter.java:91)
|
||||
at com.intellij.database.model.serialization.ModelImporter.deserialize(ModelImporter.java:68)
|
||||
at com.intellij.database.dataSource.DataSourceModelStorageImpl$Companion.readModel(DataSourceModelStorageImpl.kt:605)
|
||||
at com.intellij.database.dataSource.DataSourceModelStorageImpl$Companion.readModel(DataSourceModelStorageImpl.kt:588)
|
||||
at com.intellij.database.dataSource.DataSourceModelStorageImpl.readModel(DataSourceModelStorageImpl.kt:373)
|
||||
at com.intellij.database.dataSource.DataSourceModelStorageImpl.loadModels(DataSourceModelStorageImpl.kt:262)
|
||||
at com.intellij.database.dataSource.DataSourceModelStorageImpl.readStateHeavy(DataSourceModelStorageImpl.kt:161)
|
||||
at com.intellij.database.dataSource.DataSourceModelStorageImpl.continueLoadingWhenInitialized$lambda$8$lambda$7$lambda$6$lambda$5(DataSourceModelStorageImpl.kt:144)
|
||||
at com.intellij.openapi.progress.util.BackgroundTaskUtil.lambda$runUnderDisposeAwareIndicator$15(BackgroundTaskUtil.java:371)
|
||||
at com.intellij.openapi.progress.impl.CoreProgressManager.lambda$runProcess$1(CoreProgressManager.java:229)
|
||||
at com.intellij.platform.diagnostic.telemetry.helpers.TraceKt.use(trace.kt:44)
|
||||
at com.intellij.openapi.progress.impl.CoreProgressManager.lambda$runProcess$2(CoreProgressManager.java:228)
|
||||
at com.intellij.openapi.progress.impl.CoreProgressManager.lambda$executeProcessUnderProgress$14(CoreProgressManager.java:681)
|
||||
at com.intellij.openapi.progress.impl.CoreProgressManager.registerIndicatorAndRun(CoreProgressManager.java:756)
|
||||
at com.intellij.openapi.progress.impl.CoreProgressManager.computeUnderProgress(CoreProgressManager.java:712)
|
||||
at com.intellij.openapi.progress.impl.CoreProgressManager.executeProcessUnderProgress(CoreProgressManager.java:680)
|
||||
at com.intellij.openapi.progress.impl.ProgressManagerImpl.executeProcessUnderProgress(ProgressManagerImpl.java:78)
|
||||
at com.intellij.openapi.progress.impl.CoreProgressManager.runProcess(CoreProgressManager.java:209)
|
||||
at com.intellij.openapi.progress.util.BackgroundTaskUtil.runUnderDisposeAwareIndicator(BackgroundTaskUtil.java:366)
|
||||
at com.intellij.openapi.progress.util.BackgroundTaskUtil.runUnderDisposeAwareIndicator(BackgroundTaskUtil.java:349)
|
||||
at com.intellij.database.dataSource.DataSourceModelStorageImpl.continueLoadingWhenInitialized$lambda$8$lambda$7$lambda$6(DataSourceModelStorageImpl.kt:143)
|
||||
at com.intellij.database.util.AsyncTask$Frame$compute$$inlined$supply$1$1.run(AsyncTask.kt:878)
|
||||
at com.intellij.openapi.progress.impl.CoreProgressManager.lambda$executeProcessUnderProgress$14(CoreProgressManager.java:681)
|
||||
at com.intellij.openapi.progress.impl.CoreProgressManager.registerIndicatorAndRun(CoreProgressManager.java:756)
|
||||
at com.intellij.openapi.progress.impl.CoreProgressManager.computeUnderProgress(CoreProgressManager.java:712)
|
||||
at com.intellij.openapi.progress.impl.CoreProgressManager.executeProcessUnderProgress(CoreProgressManager.java:680)
|
||||
at com.intellij.openapi.progress.impl.ProgressManagerImpl.executeProcessUnderProgress(ProgressManagerImpl.java:78)
|
||||
at com.intellij.database.util.AsyncTask$Frame$compute$$inlined$supply$1.get(AsyncTask.kt:903)
|
||||
at java.base/java.util.concurrent.CompletableFuture$AsyncSupply.run(CompletableFuture.java:1768)
|
||||
at com.intellij.util.concurrency.ChildContext$runInChildContext$1.invoke(propagation.kt:167)
|
||||
at com.intellij.util.concurrency.ChildContext$runInChildContext$1.invoke(propagation.kt:167)
|
||||
at com.intellij.util.concurrency.ChildContext.runInChildContext(propagation.kt:173)
|
||||
at com.intellij.util.concurrency.ChildContext.runInChildContext(propagation.kt:167)
|
||||
at com.intellij.util.concurrency.ContextRunnable.run(ContextRunnable.java:27)
|
||||
at com.intellij.database.dataSource.DataSourceModelStorageImpl$continueLoadingWhenInitialized$2$1$1$1$1.invokeSuspend(DataSourceModelStorageImpl.kt:142)
|
||||
at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
|
||||
at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:100)
|
||||
at kotlinx.coroutines.scheduling.CoroutineScheduler.runSafely(CoroutineScheduler.kt:613)
|
||||
at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.executeTask(CoroutineScheduler.kt:1189)
|
||||
at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.runWorker(CoroutineScheduler.kt:778)
|
||||
at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.run(CoroutineScheduler.kt:765)
|
||||
Suppressed: java.lang.Exception: Storage[C:\Users\fabia\AppData\Local\JetBrains\PyCharm2025.2\data-source\e067176d\1e70ba7f-d1a3-44cb-96d4-ec35638383ed\entities\entities.dat] registration stack trace
|
||||
at com.intellij.util.io.FilePageCache.registerPagedFileStorage(FilePageCache.java:438)
|
||||
... 65 more
|
||||
1714
.idea/dataSources/1e70ba7f-d1a3-44cb-96d4-ec35638383ed.corrupted.20251216-091841.xml
generated
Normal file
1714
.idea/dataSources/1e70ba7f-d1a3-44cb-96d4-ec35638383ed.corrupted.20251216-091841.xml
generated
Normal file
File diff suppressed because it is too large
Load Diff
1714
.idea/dataSources/1e70ba7f-d1a3-44cb-96d4-ec35638383ed.xml
generated
Normal file
1714
.idea/dataSources/1e70ba7f-d1a3-44cb-96d4-ec35638383ed.xml
generated
Normal file
File diff suppressed because it is too large
Load Diff
2
.idea/dataSources/1e70ba7f-d1a3-44cb-96d4-ec35638383ed/storage_v2/_src_/schema/main.uQUzAA.meta
generated
Normal file
2
.idea/dataSources/1e70ba7f-d1a3-44cb-96d4-ec35638383ed/storage_v2/_src_/schema/main.uQUzAA.meta
generated
Normal file
@@ -0,0 +1,2 @@
|
||||
#n:main
|
||||
!<md> [0, 0, null, null, -2147483648, -2147483648]
|
||||
70
.idea/dataSources/bf3bfb54-ef6e-4a90-8cb8-69f52581bab9.corrupted.20251218-033406.reason.txt
generated
Normal file
70
.idea/dataSources/bf3bfb54-ef6e-4a90-8cb8-69f52581bab9.corrupted.20251218-033406.reason.txt
generated
Normal file
@@ -0,0 +1,70 @@
|
||||
java.lang.IllegalStateException: Storage for [C:\Users\fabia\AppData\Local\JetBrains\PyCharm2025.2\data-source\e067176d\bf3bfb54-ef6e-4a90-8cb8-69f52581bab9\entities\entities.dat] is already registered
|
||||
at com.intellij.util.io.FilePageCache.registerPagedFileStorage(FilePageCache.java:411)
|
||||
at com.intellij.util.io.PagedFileStorage.<init>(PagedFileStorage.java:74)
|
||||
at com.intellij.util.io.ResizeableMappedFile.<init>(ResizeableMappedFile.java:71)
|
||||
at com.intellij.util.io.PersistentBTreeEnumerator.<init>(PersistentBTreeEnumerator.java:130)
|
||||
at com.intellij.util.io.PersistentEnumerator.createDefaultEnumerator(PersistentEnumerator.java:53)
|
||||
at com.intellij.util.io.PersistentMapImpl.<init>(PersistentMapImpl.java:166)
|
||||
at com.intellij.util.io.PersistentMapImpl.<init>(PersistentMapImpl.java:141)
|
||||
at com.intellij.util.io.PersistentMapBuilder.buildImplementation(PersistentMapBuilder.java:91)
|
||||
at com.intellij.util.io.PersistentMapBuilder.build(PersistentMapBuilder.java:74)
|
||||
at com.intellij.database.model.ModelEntityStoragePersistentBackend.opened(ModelEntityStoragePersistentBackend.kt:136)
|
||||
at com.intellij.database.model.ModelEntityStoragePersistentBackend.<init>(ModelEntityStoragePersistentBackend.kt:86)
|
||||
at com.intellij.database.model.ModelEntityStoragePersistentBackendKt$ourFlusher$1$create$1.invoke(ModelEntityStoragePersistentBackend.kt:45)
|
||||
at com.intellij.database.model.ModelEntityStoragePersistentBackendKt$ourFlusher$1$create$1.invoke(ModelEntityStoragePersistentBackend.kt:45)
|
||||
at com.intellij.database.model.ModelEntityStoragePersistentBackendKt$ourFlusher$1.create$lambda$0(ModelEntityStoragePersistentBackend.kt:45)
|
||||
at java.base/java.util.concurrent.ConcurrentMap.computeIfAbsent(ConcurrentMap.java:330)
|
||||
at com.intellij.database.model.ModelEntityStoragePersistentBackendKt$ourFlusher$1.create(ModelEntityStoragePersistentBackend.kt:45)
|
||||
at com.intellij.database.model.ModelEntityStoragePersistentBackendKt.create(ModelEntityStoragePersistentBackend.kt:76)
|
||||
at com.intellij.database.dataSource.srcStorage.DbSrcModelStorage.createBackend(DbSrcModelStorage.java:289)
|
||||
at com.intellij.database.dataSource.srcStorage.DbSrcModelStorage.createPersistentBackend(DbSrcModelStorage.java:280)
|
||||
at com.intellij.database.dataSource.srcStorage.DbSrcModelStorage.createEntityStorage(DbSrcModelStorage.java:260)
|
||||
at com.intellij.database.model.BaseModel.<init>(BaseModel.java:101)
|
||||
at com.intellij.database.dialects.sqlite.model.SqliteImplModel.<init>(SqliteImplModel.java:40)
|
||||
at com.intellij.database.model.meta.BasicMetaModel.newModel(BasicMetaModel.java:56)
|
||||
at com.intellij.database.model.ModelFacade.createModel(ModelFacade.java:28)
|
||||
at com.intellij.database.model.ModelFactory.createModel(ModelFactory.kt:22)
|
||||
at com.intellij.database.model.serialization.ModelImporter.deserializeFast(ModelImporter.java:91)
|
||||
at com.intellij.database.model.serialization.ModelImporter.deserialize(ModelImporter.java:68)
|
||||
at com.intellij.database.dataSource.DataSourceModelStorageImpl$Companion.readModel(DataSourceModelStorageImpl.kt:605)
|
||||
at com.intellij.database.dataSource.DataSourceModelStorageImpl$Companion.readModel(DataSourceModelStorageImpl.kt:588)
|
||||
at com.intellij.database.dataSource.DataSourceModelStorageImpl.readModel(DataSourceModelStorageImpl.kt:373)
|
||||
at com.intellij.database.dataSource.DataSourceModelStorageImpl.loadModels(DataSourceModelStorageImpl.kt:262)
|
||||
at com.intellij.database.dataSource.DataSourceModelStorageImpl.readStateHeavy(DataSourceModelStorageImpl.kt:161)
|
||||
at com.intellij.database.dataSource.DataSourceModelStorageImpl.continueLoadingWhenInitialized$lambda$8$lambda$7$lambda$6$lambda$5(DataSourceModelStorageImpl.kt:144)
|
||||
at com.intellij.openapi.progress.util.BackgroundTaskUtil.lambda$runUnderDisposeAwareIndicator$15(BackgroundTaskUtil.java:371)
|
||||
at com.intellij.openapi.progress.impl.CoreProgressManager.lambda$runProcess$1(CoreProgressManager.java:229)
|
||||
at com.intellij.platform.diagnostic.telemetry.helpers.TraceKt.use(trace.kt:44)
|
||||
at com.intellij.openapi.progress.impl.CoreProgressManager.lambda$runProcess$2(CoreProgressManager.java:228)
|
||||
at com.intellij.openapi.progress.impl.CoreProgressManager.lambda$executeProcessUnderProgress$14(CoreProgressManager.java:681)
|
||||
at com.intellij.openapi.progress.impl.CoreProgressManager.registerIndicatorAndRun(CoreProgressManager.java:756)
|
||||
at com.intellij.openapi.progress.impl.CoreProgressManager.computeUnderProgress(CoreProgressManager.java:712)
|
||||
at com.intellij.openapi.progress.impl.CoreProgressManager.executeProcessUnderProgress(CoreProgressManager.java:680)
|
||||
at com.intellij.openapi.progress.impl.ProgressManagerImpl.executeProcessUnderProgress(ProgressManagerImpl.java:78)
|
||||
at com.intellij.openapi.progress.impl.CoreProgressManager.runProcess(CoreProgressManager.java:209)
|
||||
at com.intellij.openapi.progress.util.BackgroundTaskUtil.runUnderDisposeAwareIndicator(BackgroundTaskUtil.java:366)
|
||||
at com.intellij.openapi.progress.util.BackgroundTaskUtil.runUnderDisposeAwareIndicator(BackgroundTaskUtil.java:349)
|
||||
at com.intellij.database.dataSource.DataSourceModelStorageImpl.continueLoadingWhenInitialized$lambda$8$lambda$7$lambda$6(DataSourceModelStorageImpl.kt:143)
|
||||
at com.intellij.database.util.AsyncTask$Frame$compute$$inlined$supply$1$1.run(AsyncTask.kt:878)
|
||||
at com.intellij.openapi.progress.impl.CoreProgressManager.lambda$executeProcessUnderProgress$14(CoreProgressManager.java:681)
|
||||
at com.intellij.openapi.progress.impl.CoreProgressManager.registerIndicatorAndRun(CoreProgressManager.java:756)
|
||||
at com.intellij.openapi.progress.impl.CoreProgressManager.computeUnderProgress(CoreProgressManager.java:712)
|
||||
at com.intellij.openapi.progress.impl.CoreProgressManager.executeProcessUnderProgress(CoreProgressManager.java:680)
|
||||
at com.intellij.openapi.progress.impl.ProgressManagerImpl.executeProcessUnderProgress(ProgressManagerImpl.java:78)
|
||||
at com.intellij.database.util.AsyncTask$Frame$compute$$inlined$supply$1.get(AsyncTask.kt:903)
|
||||
at java.base/java.util.concurrent.CompletableFuture$AsyncSupply.run(CompletableFuture.java:1768)
|
||||
at com.intellij.util.concurrency.ChildContext$runInChildContext$1.invoke(propagation.kt:167)
|
||||
at com.intellij.util.concurrency.ChildContext$runInChildContext$1.invoke(propagation.kt:167)
|
||||
at com.intellij.util.concurrency.ChildContext.runInChildContext(propagation.kt:173)
|
||||
at com.intellij.util.concurrency.ChildContext.runInChildContext(propagation.kt:167)
|
||||
at com.intellij.util.concurrency.ContextRunnable.run(ContextRunnable.java:27)
|
||||
at com.intellij.database.dataSource.DataSourceModelStorageImpl$continueLoadingWhenInitialized$2$1$1$1$1.invokeSuspend(DataSourceModelStorageImpl.kt:142)
|
||||
at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
|
||||
at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:100)
|
||||
at kotlinx.coroutines.scheduling.CoroutineScheduler.runSafely(CoroutineScheduler.kt:613)
|
||||
at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.executeTask(CoroutineScheduler.kt:1189)
|
||||
at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.runWorker(CoroutineScheduler.kt:778)
|
||||
at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.run(CoroutineScheduler.kt:765)
|
||||
Suppressed: java.lang.Exception: Storage[C:\Users\fabia\AppData\Local\JetBrains\PyCharm2025.2\data-source\e067176d\bf3bfb54-ef6e-4a90-8cb8-69f52581bab9\entities\entities.dat] registration stack trace
|
||||
at com.intellij.util.io.FilePageCache.registerPagedFileStorage(FilePageCache.java:438)
|
||||
... 65 more
|
||||
1714
.idea/dataSources/bf3bfb54-ef6e-4a90-8cb8-69f52581bab9.corrupted.20251218-033406.xml
generated
Normal file
1714
.idea/dataSources/bf3bfb54-ef6e-4a90-8cb8-69f52581bab9.corrupted.20251218-033406.xml
generated
Normal file
File diff suppressed because it is too large
Load Diff
1714
.idea/dataSources/bf3bfb54-ef6e-4a90-8cb8-69f52581bab9.xml
generated
Normal file
1714
.idea/dataSources/bf3bfb54-ef6e-4a90-8cb8-69f52581bab9.xml
generated
Normal file
File diff suppressed because it is too large
Load Diff
2
.idea/dataSources/bf3bfb54-ef6e-4a90-8cb8-69f52581bab9/storage_v2/_src_/schema/main.uQUzAA.meta
generated
Normal file
2
.idea/dataSources/bf3bfb54-ef6e-4a90-8cb8-69f52581bab9/storage_v2/_src_/schema/main.uQUzAA.meta
generated
Normal file
@@ -0,0 +1,2 @@
|
||||
#n:main
|
||||
!<md> [0, 0, null, null, -2147483648, -2147483648]
|
||||
@@ -499,7 +499,7 @@
|
||||
<routine id="190" parent="1" name="fts5"/>
|
||||
<schema id="191" parent="1" name="main">
|
||||
<Current>1</Current>
|
||||
<LastIntrospectionLocalTimestamp>2025-12-09.09:30:08</LastIntrospectionLocalTimestamp>
|
||||
<LastIntrospectionLocalTimestamp>2025-12-22.12:12:45</LastIntrospectionLocalTimestamp>
|
||||
</schema>
|
||||
<argument id="192" parent="16">
|
||||
<ArgumentDirection>R</ArgumentDirection>
|
||||
@@ -1590,65 +1590,262 @@
|
||||
<argument id="554" parent="190">
|
||||
<Position>1</Position>
|
||||
</argument>
|
||||
<table id="555" parent="191" name="Netzpunkte"/>
|
||||
<table id="556" parent="191" name="sqlite_master">
|
||||
<table id="555" parent="191" name="Beobachtungen"/>
|
||||
<table id="556" parent="191" name="Genauigkeiten"/>
|
||||
<table id="557" parent="191" name="GenauigkeitenGNSS"/>
|
||||
<table id="558" parent="191" name="Instrumente"/>
|
||||
<table id="559" parent="191" name="Netzpunkte"/>
|
||||
<table id="560" parent="191" name="sqlite_master">
|
||||
<System>1</System>
|
||||
</table>
|
||||
<column id="557" parent="555" name="punktnummer">
|
||||
<column id="561" parent="555" name="beobachtungenID">
|
||||
<Position>1</Position>
|
||||
<StoredType>INTEGER|0s</StoredType>
|
||||
</column>
|
||||
<column id="562" parent="555" name="beobachtungsgruppeID">
|
||||
<Position>2</Position>
|
||||
<StoredType>INTEGER|0s</StoredType>
|
||||
</column>
|
||||
<column id="563" parent="555" name="punktnummer_sp">
|
||||
<Position>3</Position>
|
||||
<StoredType>TEXT(10)|0s</StoredType>
|
||||
</column>
|
||||
<column id="564" parent="555" name="punktnummer_zp">
|
||||
<Position>4</Position>
|
||||
<StoredType>TEXT(10)|0s</StoredType>
|
||||
</column>
|
||||
<column id="565" parent="555" name="instrumenteID">
|
||||
<Position>5</Position>
|
||||
<StoredType>INTEGER|0s</StoredType>
|
||||
</column>
|
||||
<column id="566" parent="555" name="tachymeter_richtung">
|
||||
<Position>6</Position>
|
||||
<StoredType>NUMERIC(8,6)|0s</StoredType>
|
||||
</column>
|
||||
<column id="567" parent="555" name="tachymeter_zenitwinkel">
|
||||
<Position>7</Position>
|
||||
<StoredType>NUMERIC(8,6)|0s</StoredType>
|
||||
</column>
|
||||
<column id="568" parent="555" name="tachymeter_distanz">
|
||||
<Position>8</Position>
|
||||
<StoredType>NUMERIC(8,4)|0s</StoredType>
|
||||
</column>
|
||||
<column id="569" parent="555" name="gnss_bx">
|
||||
<Position>9</Position>
|
||||
<StoredType>NUMERIC(7,4)|0s</StoredType>
|
||||
</column>
|
||||
<column id="570" parent="555" name="gnss_by">
|
||||
<Position>10</Position>
|
||||
<StoredType>NUMERIC(7,4)|0s</StoredType>
|
||||
</column>
|
||||
<column id="571" parent="555" name="gnss_bz">
|
||||
<Position>11</Position>
|
||||
<StoredType>NUMERIC(7,4)|0s</StoredType>
|
||||
</column>
|
||||
<column id="572" parent="555" name="dateiname">
|
||||
<Position>12</Position>
|
||||
<StoredType>TEXT(200)|0s</StoredType>
|
||||
</column>
|
||||
<foreign-key id="573" parent="555" name="fk_Beobachtungen_Netzpunktesp">
|
||||
<ColNames>punktnummer_sp</ColNames>
|
||||
<RefColNames>punktnummer</RefColNames>
|
||||
<RefTableName>Netzpunkte</RefTableName>
|
||||
</foreign-key>
|
||||
<foreign-key id="574" parent="555" name="fk_Beobachtungen_Netzpunktezp">
|
||||
<ColNames>punktnummer_zp</ColNames>
|
||||
<RefColNames>punktnummer</RefColNames>
|
||||
<RefTableName>Netzpunkte</RefTableName>
|
||||
</foreign-key>
|
||||
<foreign-key id="575" parent="555" name="fk_Beobachtungen_Instrumente">
|
||||
<ColNames>instrumenteID</ColNames>
|
||||
<RefColNames>instrumenteID</RefColNames>
|
||||
<RefTableName>Instrumente</RefTableName>
|
||||
</foreign-key>
|
||||
<key id="576" parent="555" name="pk_Beobachtungen">
|
||||
<ColNames>beobachtungenID</ColNames>
|
||||
<Primary>1</Primary>
|
||||
</key>
|
||||
<column id="577" parent="556" name="genauigkeitenID">
|
||||
<Position>1</Position>
|
||||
<StoredType>INTEGER|0s</StoredType>
|
||||
</column>
|
||||
<column id="578" parent="556" name="instrumenteID">
|
||||
<Position>2</Position>
|
||||
<StoredType>INTEGER|0s</StoredType>
|
||||
</column>
|
||||
<column id="579" parent="556" name="beobachtungsart">
|
||||
<Position>3</Position>
|
||||
<StoredType>TEXT(25)|0s</StoredType>
|
||||
</column>
|
||||
<column id="580" parent="556" name="stabw_apriori_konstant">
|
||||
<Position>4</Position>
|
||||
<StoredType>NUMERIC(3,8)|0s</StoredType>
|
||||
</column>
|
||||
<column id="581" parent="556" name="stabw_apriori_streckenprop">
|
||||
<Position>5</Position>
|
||||
<StoredType>NUMERIC(3,8)|0s</StoredType>
|
||||
</column>
|
||||
<foreign-key id="582" parent="556" name="fk_Genauigkeiten_Instrumente">
|
||||
<ColNames>instrumenteID</ColNames>
|
||||
<RefColNames>instrumenteID</RefColNames>
|
||||
<RefTableName>Instrumente</RefTableName>
|
||||
</foreign-key>
|
||||
<key id="583" parent="556" name="pk_Genauigkeiten">
|
||||
<ColNames>genauigkeitenID</ColNames>
|
||||
<Primary>1</Primary>
|
||||
</key>
|
||||
<column id="584" parent="557" name="genauigkeitengnssID">
|
||||
<Position>1</Position>
|
||||
<StoredType>INTEGER|0s</StoredType>
|
||||
</column>
|
||||
<column id="585" parent="557" name="beobachtungenID">
|
||||
<Position>2</Position>
|
||||
<StoredType>INTEGER|0s</StoredType>
|
||||
</column>
|
||||
<column id="586" parent="557" name="m0">
|
||||
<Position>3</Position>
|
||||
<StoredType>NUMERIC(1,8)|0s</StoredType>
|
||||
</column>
|
||||
<column id="587" parent="557" name="q11">
|
||||
<Position>4</Position>
|
||||
<StoredType>NUMERIC(1,8)|0s</StoredType>
|
||||
</column>
|
||||
<column id="588" parent="557" name="q12">
|
||||
<Position>5</Position>
|
||||
<StoredType>NUMERIC(1,8)|0s</StoredType>
|
||||
</column>
|
||||
<column id="589" parent="557" name="q13">
|
||||
<Position>6</Position>
|
||||
<StoredType>NUMERIC(1,8)|0s</StoredType>
|
||||
</column>
|
||||
<column id="590" parent="557" name="q21">
|
||||
<Position>7</Position>
|
||||
<StoredType>NUMERIC(1,8)|0s</StoredType>
|
||||
</column>
|
||||
<column id="591" parent="557" name="q22">
|
||||
<Position>8</Position>
|
||||
<StoredType>NUMERIC(1,8)|0s</StoredType>
|
||||
</column>
|
||||
<column id="592" parent="557" name="q23">
|
||||
<Position>9</Position>
|
||||
<StoredType>NUMERIC(1,8)|0s</StoredType>
|
||||
</column>
|
||||
<column id="593" parent="557" name="q31">
|
||||
<Position>10</Position>
|
||||
<StoredType>NUMERIC(1,8)|0s</StoredType>
|
||||
</column>
|
||||
<column id="594" parent="557" name="q32">
|
||||
<Position>11</Position>
|
||||
<StoredType>NUMERIC(1,8)|0s</StoredType>
|
||||
</column>
|
||||
<column id="595" parent="557" name="q33">
|
||||
<Position>12</Position>
|
||||
<StoredType>NUMERIC(1,8)|0s</StoredType>
|
||||
</column>
|
||||
<foreign-key id="596" parent="557" name="fk_GenauigkeitenGNSS_Beobachtungen">
|
||||
<ColNames>beobachtungenID</ColNames>
|
||||
<RefColNames>beobachtungenID</RefColNames>
|
||||
<RefTableName>Beobachtungen</RefTableName>
|
||||
</foreign-key>
|
||||
<key id="597" parent="557" name="pk_GenauigkeitenGNSS">
|
||||
<ColNames>genauigkeitengnssID</ColNames>
|
||||
<Primary>1</Primary>
|
||||
</key>
|
||||
<column id="598" parent="558" name="instrumenteID">
|
||||
<Position>1</Position>
|
||||
<StoredType>INTEGER|0s</StoredType>
|
||||
</column>
|
||||
<column id="599" parent="558" name="typ">
|
||||
<Position>2</Position>
|
||||
<StoredType>TEXT(200)|0s</StoredType>
|
||||
</column>
|
||||
<column id="600" parent="558" name="name">
|
||||
<Position>3</Position>
|
||||
<StoredType>TEXT(200)|0s</StoredType>
|
||||
</column>
|
||||
<key id="601" parent="558" name="pk_Instrumente">
|
||||
<ColNames>instrumenteID</ColNames>
|
||||
<Primary>1</Primary>
|
||||
</key>
|
||||
<column id="602" parent="559" name="punktnummer">
|
||||
<Position>1</Position>
|
||||
<StoredType>TEXT(10)|0s</StoredType>
|
||||
</column>
|
||||
<column id="558" parent="555" name="naeherungx_lh">
|
||||
<column id="603" parent="559" name="naeherungx_lh">
|
||||
<Position>2</Position>
|
||||
<StoredType>NUMERIC(9,3)|0s</StoredType>
|
||||
</column>
|
||||
<column id="559" parent="555" name="naeherungy_lh">
|
||||
<column id="604" parent="559" name="naeherungy_lh">
|
||||
<Position>3</Position>
|
||||
<StoredType>NUMERIC(7,3)|0s</StoredType>
|
||||
</column>
|
||||
<column id="560" parent="555" name="naeherungz_lh">
|
||||
<column id="605" parent="559" name="naeherungz_lh">
|
||||
<Position>4</Position>
|
||||
<StoredType>NUMERIC(8,3)|0s</StoredType>
|
||||
</column>
|
||||
<column id="561" parent="555" name="naeherungx_us">
|
||||
<column id="606" parent="559" name="naeherungx_us">
|
||||
<Position>5</Position>
|
||||
<StoredType>NUMERIC(9,3)|0s</StoredType>
|
||||
</column>
|
||||
<column id="562" parent="555" name="naeherungy_us">
|
||||
<column id="607" parent="559" name="naeherungy_us">
|
||||
<Position>6</Position>
|
||||
<StoredType>NUMERIC(7,3)|0s</StoredType>
|
||||
</column>
|
||||
<column id="563" parent="555" name="naeherungz_us">
|
||||
<column id="608" parent="559" name="naeherungz_us">
|
||||
<Position>7</Position>
|
||||
<StoredType>NUMERIC(8,3)|0s</StoredType>
|
||||
</column>
|
||||
<index id="564" parent="555" name="sqlite_autoindex_Netzpunkte_1">
|
||||
<column id="609" parent="559" name="datumskoordinate_x">
|
||||
<Position>8</Position>
|
||||
<StoredType>INTEGER|0s</StoredType>
|
||||
</column>
|
||||
<column id="610" parent="559" name="datumskoordinate_y">
|
||||
<Position>9</Position>
|
||||
<StoredType>INTEGER|0s</StoredType>
|
||||
</column>
|
||||
<column id="611" parent="559" name="datumskoordinate_z">
|
||||
<Position>10</Position>
|
||||
<StoredType>INTEGER|0s</StoredType>
|
||||
</column>
|
||||
<column id="612" parent="559" name="stabw_vorinfo_x">
|
||||
<Position>11</Position>
|
||||
<StoredType>NUMERIC(3,8)|0s</StoredType>
|
||||
</column>
|
||||
<column id="613" parent="559" name="stabw_vorinfo_y">
|
||||
<Position>12</Position>
|
||||
<StoredType>NUMERIC(3,8)|0s</StoredType>
|
||||
</column>
|
||||
<column id="614" parent="559" name="stabw_vorinfo_z">
|
||||
<Position>13</Position>
|
||||
<StoredType>NUMERIC(3,8)|0s</StoredType>
|
||||
</column>
|
||||
<index id="615" parent="559" name="sqlite_autoindex_Netzpunkte_1">
|
||||
<ColNames>punktnummer</ColNames>
|
||||
<NameSurrogate>1</NameSurrogate>
|
||||
<Unique>1</Unique>
|
||||
</index>
|
||||
<key id="565" parent="555" name="pk_Netzpunkte">
|
||||
<key id="616" parent="559" name="pk_Netzpunkte">
|
||||
<ColNames>punktnummer</ColNames>
|
||||
<Primary>1</Primary>
|
||||
<UnderlyingIndexName>sqlite_autoindex_Netzpunkte_1</UnderlyingIndexName>
|
||||
</key>
|
||||
<column id="566" parent="556" name="type">
|
||||
<column id="617" parent="560" name="type">
|
||||
<Position>1</Position>
|
||||
<StoredType>TEXT|0s</StoredType>
|
||||
</column>
|
||||
<column id="567" parent="556" name="name">
|
||||
<column id="618" parent="560" name="name">
|
||||
<Position>2</Position>
|
||||
<StoredType>TEXT|0s</StoredType>
|
||||
</column>
|
||||
<column id="568" parent="556" name="tbl_name">
|
||||
<column id="619" parent="560" name="tbl_name">
|
||||
<Position>3</Position>
|
||||
<StoredType>TEXT|0s</StoredType>
|
||||
</column>
|
||||
<column id="569" parent="556" name="rootpage">
|
||||
<column id="620" parent="560" name="rootpage">
|
||||
<Position>4</Position>
|
||||
<StoredType>INT|0s</StoredType>
|
||||
</column>
|
||||
<column id="570" parent="556" name="sql">
|
||||
<column id="621" parent="560" name="sql">
|
||||
<Position>5</Position>
|
||||
<StoredType>TEXT|0s</StoredType>
|
||||
</column>
|
||||
|
||||
2
.idea/misc.xml
generated
2
.idea/misc.xml
generated
@@ -3,5 +3,5 @@
|
||||
<component name="Black">
|
||||
<option name="sdkName" value="Python 3.14" />
|
||||
</component>
|
||||
<component name="ProjectRootManager" version="2" project-jdk-name="Python 3.14 (Masterprojekt)" project-jdk-type="Python SDK" />
|
||||
<component name="ProjectRootManager" version="2" project-jdk-name="Python 3.14" project-jdk-type="Python SDK" />
|
||||
</project>
|
||||
71
Berechnungen.py
Normal file
71
Berechnungen.py
Normal 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
|
||||
BIN
Campusnetz.db
BIN
Campusnetz.db
Binary file not shown.
1277
Campusnetz.ipynb
1277
Campusnetz.ipynb
File diff suppressed because it is too large
Load Diff
0
Daten/Campusnetz.db
Normal file
0
Daten/Campusnetz.db
Normal file
17
Daten/Koordinaten_OL_umliegend_bereinigt.csv
Normal file
17
Daten/Koordinaten_OL_umliegend_bereinigt.csv
Normal 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
|
||||
|
996
Daten/Niv_bereinigt.DAT.csv
Normal file
996
Daten/Niv_bereinigt.DAT.csv
Normal 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| | | |
|
||||
|
1814
Daten/campsnetz_beobachtungen_bereinigt.csv
Normal file
1814
Daten/campsnetz_beobachtungen_bereinigt.csv
Normal file
File diff suppressed because it is too large
Load Diff
59
Daten/campsnetz_koordinaten_bereinigt.csv
Normal file
59
Daten/campsnetz_koordinaten_bereinigt.csv
Normal 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
|
||||
|
1515
Daten/campusnetz_beobachtungen_25_11 - Kopie.csv
Normal file
1515
Daten/campusnetz_beobachtungen_25_11 - Kopie.csv
Normal file
File diff suppressed because it is too large
Load Diff
1524
Daten/campusnetz_beobachtungen_25_11.csv
Normal file
1524
Daten/campusnetz_beobachtungen_25_11.csv
Normal file
File diff suppressed because it is too large
Load Diff
337
Datenbank.py
337
Datenbank.py
@@ -1,6 +1,9 @@
|
||||
import os
|
||||
import sqlite3
|
||||
import sympy as sp
|
||||
from Berechnungen import Einheitenumrechnung
|
||||
from decimal import Decimal
|
||||
|
||||
|
||||
|
||||
class Datenbank_anlegen:
|
||||
@@ -18,12 +21,69 @@ class Datenbank_anlegen:
|
||||
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()
|
||||
@@ -51,7 +111,14 @@ class Datenbankzugriff:
|
||||
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([float(koordinate[1]), float(koordinate[2]), float(koordinate[3])]) for koordinate in liste_koordinaten}
|
||||
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)
|
||||
@@ -75,4 +142,270 @@ class Datenbankzugriff:
|
||||
|
||||
con.commit()
|
||||
cursor.close()
|
||||
con.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
154
Datumsfestlegung.py
Normal 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
|
||||
@@ -1,18 +0,0 @@
|
||||
import sympy as sp
|
||||
|
||||
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
|
||||
60
Export.py
Normal file
60
Export.py
Normal 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])
|
||||
@@ -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
|
||||
|
||||
532
Import.py
532
Import.py
@@ -1,5 +1,9 @@
|
||||
import csv
|
||||
import sqlite3
|
||||
from decimal import Decimal
|
||||
|
||||
import Berechnungen
|
||||
|
||||
|
||||
class Import:
|
||||
def __init__(self, pfad_datenbank):
|
||||
@@ -10,6 +14,10 @@ class Import:
|
||||
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 = []
|
||||
@@ -54,4 +62,526 @@ class Import:
|
||||
con.commit()
|
||||
cursor.close()
|
||||
con.close()
|
||||
print("Der Import der Näherungskoordinaten wurde erfolgreich abgeschlossen")
|
||||
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."
|
||||
|
||||
|
||||
168
Netzqualität_Genauigkeit.py
Normal file
168
Netzqualität_Genauigkeit.py
Normal 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
|
||||
109
Netzqualität_Zuverlässigkeit.py
Normal file
109
Netzqualität_Zuverlässigkeit.py
Normal 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
|
||||
@@ -1,26 +1,150 @@
|
||||
from Stochastisches_Modell import StochastischesModell
|
||||
from Netzqualität_Genauigkeit import Genauigkeitsmaße
|
||||
from Datumsfestlegung import Datumsfestlegung
|
||||
import sympy as sp
|
||||
import Export
|
||||
|
||||
#für Varianzkomponentenschätzung
|
||||
MAX_ITER = 10
|
||||
TOL = 1e-3 # 0.1%.
|
||||
|
||||
for loop in range(MAX_ITER):
|
||||
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,
|
||||
)
|
||||
|
||||
Q_ll, P = modell.aufstellen_Qll_P()
|
||||
# 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_vec = A.T * P * l
|
||||
dx = N.LUsolve(n_vec)
|
||||
n = A.T * P * dl
|
||||
|
||||
v = l - A * dx
|
||||
# 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
|
||||
|
||||
sigma_hat = modell.varianzkomponenten(v, A)
|
||||
# 4) Zuschlagsvektor dx
|
||||
dx = Datumsfestlegung.berechne_dx_geraendert(N, n, Gi)
|
||||
|
||||
print(f"Iteration {loop+1}, σ̂² Gruppen:", sigma_hat)
|
||||
# 5) Residuenvektor v
|
||||
v = dl - A * dx
|
||||
|
||||
# Prüfen: ist jede Komponente ≈ 1?
|
||||
if all(abs(val - 1) < TOL for val in sigma_hat.values()):
|
||||
print("Konvergenz erreicht ✔")
|
||||
break
|
||||
# 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
|
||||
|
||||
modell.update_sigma(sigma_hat)
|
||||
# 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
|
||||
@@ -1,86 +1,197 @@
|
||||
import sympy as sp
|
||||
from dataclasses import dataclass, field
|
||||
from typing import Dict, Tuple
|
||||
from typing import Dict, Tuple, Iterable
|
||||
from Export import Export
|
||||
from Datenbank import Datenbankzugriff
|
||||
|
||||
@dataclass
|
||||
class StochastischesModell:
|
||||
sigma_beob: Iterable[float] #σ der einzelnen Beobachtung
|
||||
group_beob: Iterable[int] #Gruppenzugehörigkeit jeder Beobachtung (Distanz, Richtung, GNSS, Nivellement,...,)
|
||||
sigma0_groups: Dict[int, float] = field(default_factory=dict) #σ0² für jede Gruppe
|
||||
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):
|
||||
self.sigma_beob = sp.Matrix(list(self.sigma_beob)) #Spaltenvektor
|
||||
self.group_beob = sp.Matrix(list(self.group_beob)) #Spaltenvektor
|
||||
# Defaults setzen
|
||||
if self.sigma_beob is None:
|
||||
self.sigma_beob = [1.0] * int(self.n_beob)
|
||||
|
||||
if self.sigma_beob.rows != self.group_beob.rows:
|
||||
raise ValueError("sigma_obs und group_ids müssen gleich viele Einträge haben.")
|
||||
if self.gruppe_beob is None:
|
||||
self.gruppe_beob = [1] * int(self.n_beob)
|
||||
|
||||
unique_groups = sorted({int(g) for g in self.group_beob}) #jede Beobachtungsgruppe wird genau einmal berücksichtigt
|
||||
# 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_groups: #Fehlende Gruppen mit σ_0j^2 = 1.0
|
||||
self.sigma0_groups[g] = 1.0
|
||||
if g not in self.sigma0_gruppe:
|
||||
self.sigma0_gruppe[g] = 1.0
|
||||
|
||||
|
||||
@property
|
||||
def n_beob(self) -> int:
|
||||
return int(self.sigma_beob.rows)
|
||||
|
||||
|
||||
def aufstellen_Qll_P(self) -> Tuple[sp.Matrix, sp.Matrix]:
|
||||
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):
|
||||
for i in range(self.n_beob):
|
||||
sigma_i = self.sigma_beob[i, 0] #σ-Wert der i-ten Beobachtung holen
|
||||
g = int(self.group_beob[i, 0]) #Gruppenzugehörigkeit der Beobachtung bestimmen
|
||||
sigma0_sq = self.sigma0_groups[g] #Den Varianzfaktor der Gruppe 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
|
||||
P[i, i] = 1 / (sigma0_sq * q_ii) #durch VKS nicht mehr P=Qll^-1
|
||||
return Q_ll, P
|
||||
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"
|
||||
|
||||
|
||||
@staticmethod
|
||||
def redundanz_pro_beobachtung(A, P):
|
||||
n = P.rows
|
||||
sqrtP = sp.zeros(n, n)
|
||||
for i in range(n):
|
||||
sqrtP[i, i] = sp.sqrt(P[i, i])
|
||||
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)
|
||||
|
||||
A_tilde = sqrtP * A
|
||||
M = (A_tilde.T * A_tilde).inv()
|
||||
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):
|
||||
a_i = sp.Matrix([A_tilde.row(i)])
|
||||
r[i] = 1 - (a_i * M * a_i.T)[0]
|
||||
return r
|
||||
|
||||
|
||||
def varianzkomponenten(self, v, A) -> Dict[int, float]:
|
||||
_, P = self.aufstellen_Qll_P()
|
||||
r_obs = self.redundanz_pro_beobachtung(A, P)
|
||||
gruppen = sorted(set(int(g) for g in self.group_beob))
|
||||
|
||||
sigma_hat = {}
|
||||
|
||||
for g in gruppen:
|
||||
idx = [i for i in range(self.n) if int(self.group_beob[i]) == g]
|
||||
|
||||
v_i = sp.Matrix([v[i] for i in idx])
|
||||
|
||||
P_i = sp.zeros(len(idx))
|
||||
for k, j in enumerate(idx):
|
||||
P_i[k, k] = P[j, j]
|
||||
|
||||
r_g = sum(r_obs[j] for j in idx)
|
||||
|
||||
sigma_hat[g] = float((v_i.T * P_i * v_i)[0] / r_g)
|
||||
return sigma_hat
|
||||
|
||||
|
||||
def update_sigma(self, sigma_hat_dict):
|
||||
for g, val in sigma_hat_dict.items():
|
||||
self.sigma0_groups[g] = float(val)
|
||||
r[i, 0] = R[i, i]
|
||||
return r #Redundanzanteile
|
||||
56
Tests_Michelle/Parameterschaetzung_müll.py
Normal file
56
Tests_Michelle/Parameterschaetzung_müll.py
Normal 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,
|
||||
}
|
||||
0
Vorbereitungen_Fabian/Campusnetz.db
Normal file
0
Vorbereitungen_Fabian/Campusnetz.db
Normal file
157
Vorbereitungen_Fabian/Import_Tachymeter.py
Normal file
157
Vorbereitungen_Fabian/Import_Tachymeter.py
Normal 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.")
|
||||
@@ -1,9 +1,6 @@
|
||||
import sympy as sp
|
||||
i = 5
|
||||
|
||||
dX, dY, dZ, m, q0, q1, q2, q3 = sp.symbols('dX dY dZ m q0 q1 q2 q3')
|
||||
|
||||
f = sp.Matrix([dX + m * q0 + 1])
|
||||
|
||||
J = f.jacobian([dX, dY, q0])
|
||||
|
||||
print(J)
|
||||
if i % 6 != 0:
|
||||
print("nein")
|
||||
else:
|
||||
print("ja")
|
||||
@@ -1,7 +1,7 @@
|
||||
# Transformation ITRF2020 --> ETRF89/DREF91 Realisierung 2025
|
||||
|
||||
import sympy as sp
|
||||
from Einheitenumrechnung import Einheitenumrechnung
|
||||
from Berechnungen import Einheitenumrechnung
|
||||
|
||||
# Helmetert Paramteter zur Referenzepoche t0
|
||||
t0 = 2015.0
|
||||
|
||||
5798
Zwischenergebnisse/Ausgleichung_Iteration0.csv
Normal file
5798
Zwischenergebnisse/Ausgleichung_Iteration0.csv
Normal file
File diff suppressed because one or more lines are too long
2629
Zwischenergebnisse/Beobachtungsvektor_Numerisch.csv
Normal file
2629
Zwischenergebnisse/Beobachtungsvektor_Numerisch.csv
Normal file
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
2629
Zwischenergebnisse/Beobachtungsvektor_Näherung_Symbolisch.csv
Normal file
2629
Zwischenergebnisse/Beobachtungsvektor_Näherung_Symbolisch.csv
Normal file
File diff suppressed because it is too large
Load Diff
2629
Zwischenergebnisse/Jacobi_Matrix_Numerisch_Iteration0.csv
Normal file
2629
Zwischenergebnisse/Jacobi_Matrix_Numerisch_Iteration0.csv
Normal file
File diff suppressed because it is too large
Load Diff
2629
Zwischenergebnisse/Jacobi_Matrix_Symbolisch.csv
Normal file
2629
Zwischenergebnisse/Jacobi_Matrix_Symbolisch.csv
Normal file
File diff suppressed because it is too large
Load Diff
2629
Zwischenergebnisse/Qll_Numerisch.csv
Normal file
2629
Zwischenergebnisse/Qll_Numerisch.csv
Normal file
File diff suppressed because one or more lines are too long
2629
Zwischenergebnisse/Qll_Symbolisch.csv
Normal file
2629
Zwischenergebnisse/Qll_Symbolisch.csv
Normal file
File diff suppressed because one or more lines are too long
178
Zwischenergebnisse/Unbekanntenvektor_Numerisch_Iteration0.csv
Normal file
178
Zwischenergebnisse/Unbekanntenvektor_Numerisch_Iteration0.csv
Normal file
@@ -0,0 +1,178 @@
|
||||
Unbekanntenvektor;
|
||||
X10009;3794737,8261094868
|
||||
Y10009;546742,68877082553
|
||||
Z10009;5080128,3507065025
|
||||
X10006;3794737,3173918251
|
||||
Y10006;546711,81881005680
|
||||
Z10006;5080139,1948981553
|
||||
X10010;3794749,9062764374
|
||||
Y10010;546779,89873060947
|
||||
Z10010;5080150,0065082129
|
||||
X10018;3794746,3410212440
|
||||
Y10018;546805,36274589579
|
||||
Z10018;5080131,2606735807
|
||||
X10008;3794766,3320322788
|
||||
Y10008;546753,35065436338
|
||||
Z10008;5080126,6029089628
|
||||
X10005;3794766,1208143157
|
||||
Y10005;546724,06052930078
|
||||
Z10005;5080116,5199339003
|
||||
X10003;3794815,3173410210
|
||||
Y10003;546732,77828696876
|
||||
Z10003;5080080,1724589822
|
||||
X10004;3794777,6376987905
|
||||
Y10004;546715,83150049957
|
||||
Z10004;5080113,1123126568
|
||||
X10007;3794837,5286159980
|
||||
Y10007;546770,79318297003
|
||||
Z10007;5080113,7809357923
|
||||
X10001;3794877,4442163322
|
||||
Y10001;546736,00280125012
|
||||
Z10001;5080033,9233738090
|
||||
X10002;3794847,2705692228
|
||||
Y10002;546727,23776782755
|
||||
Z10002;5080068,6550395742
|
||||
X10016;3794821,5493086762
|
||||
Y10016;546795,35855828324
|
||||
Z10016;5080096,3781247181
|
||||
X10011;3794865,2733347461
|
||||
Y10011;546819,04011517813
|
||||
Z10011;5080007,2618007053
|
||||
X10026;3794745,3602895556
|
||||
Y10026;546838,50900056992
|
||||
Z10026;5080137,0151585320
|
||||
X10027;3794739,3149203953
|
||||
Y10027;546879,33793638616
|
||||
Z10027;5080111,1458846316
|
||||
X10043;3794734,8351122441
|
||||
Y10043;546926,68930651186
|
||||
Z10043;5080112,5813005353
|
||||
X10044;3794729,0623322332
|
||||
Y10044;546959,86250598939
|
||||
Z10044;5080088,3333714346
|
||||
X10021;3794756,6131819634
|
||||
Y10021;546837,75365389517
|
||||
Z10021;5080107,5121020472
|
||||
X10020;3794765,2080349228
|
||||
Y10020;546838,53030298970
|
||||
Z10020;5080104,5111676977
|
||||
X10024;3794750,8358620867
|
||||
Y10024;546859,63394459803
|
||||
Z10024;5080100,5394282307
|
||||
X10025;3794751,7663267483
|
||||
Y10025;546873,57347223762
|
||||
Z10025;5080095,0451717615
|
||||
X10022;3794759,1895938955
|
||||
Y10022;546845,28401077731
|
||||
Z10022;5080103,5899291664
|
||||
X10023;3794761,9526928161
|
||||
Y10023;546851,33336517339
|
||||
Z10023;5080100,5059386708
|
||||
X10019;3794800,8740875486
|
||||
Y10019;546840,94087227260
|
||||
Z10019;5080110,3273932595
|
||||
X10033;3794796,8531006654
|
||||
Y10033;546879,07184937566
|
||||
Z10033;5080094,0204517832
|
||||
X10017;3794800,7678644184
|
||||
Y10017;546828,68122233710
|
||||
Z10017;5080065,2825882381
|
||||
X10052;3794730,1960150051
|
||||
Y10052;546990,10831652910
|
||||
Z10052;5080096,2656965254
|
||||
X10042;3794728,5162126020
|
||||
Y10042;546934,34006903819
|
||||
Z10042;5080079,7273739038
|
||||
X10053;3794719,6916959078
|
||||
Y10053;547015,48054781071
|
||||
Z10053;5080068,7703563867
|
||||
X10037;3794772,9778814467
|
||||
Y10037;546952,92013359477
|
||||
Z10037;5080046,8109239414
|
||||
X10040;3794739,6030496521
|
||||
Y10040;546947,75984157427
|
||||
Z10040;5080048,1969198893
|
||||
X10041;3794730,1824448139
|
||||
Y10041;546914,19811434475
|
||||
Z10041;5080049,3500350653
|
||||
X10038;3794782,7017423193
|
||||
Y10038;546922,48386199018
|
||||
Z10038;5080051,8118791558
|
||||
X10051;3794745,1460916233
|
||||
Y10051;546988,18094585355
|
||||
Z10051;5080068,9972397214
|
||||
X10036;3794786,0750212390
|
||||
Y10036;546959,93132156577
|
||||
Z10036;5080032,2974019706
|
||||
X10035;3794812,6082424349
|
||||
Y10035;546947,26188674066
|
||||
Z10035;5080006,7163449917
|
||||
X10039;3794777,7914583969
|
||||
Y10039;546907,18289460418
|
||||
Z10039;5080055,0958695237
|
||||
X10059;3794705,8658490042
|
||||
Y10059;547076,03198452389
|
||||
Z10059;5080058,6055812442
|
||||
X10050;3794734,7983456069
|
||||
Y10050;547006,91683443581
|
||||
Z10050;5080052,2874619229
|
||||
X10013;3794826,9382148853
|
||||
Y10013;546821,50874597263
|
||||
Z10013;5080049,8667718192
|
||||
X10028;3794859,0233499698
|
||||
Y10028;546892,27846656784
|
||||
Z10028;5079987,7607363630
|
||||
X10012;3794821,3323145389
|
||||
Y10012;546795,84225596000
|
||||
Z10012;5080043,3879320889
|
||||
X10014;3794813,7871761550
|
||||
Y10014;546807,87279685993
|
||||
Z10014;5080059,9679990845
|
||||
X10031;3794800,9671774456
|
||||
Y10031;546875,13272652383
|
||||
Z10031;5080058,5378277475
|
||||
X10015;3794825,3025951464
|
||||
Y10015;546794,34543982906
|
||||
Z10015;5080076,0668343443
|
||||
X10032;3794744,6965562960
|
||||
Y10032;546866,50282400186
|
||||
Z10032;5080024,1065637068
|
||||
X10030;3794813,4354968976
|
||||
Y10030;546887,79185455695
|
||||
Z10030;5080021,1584832004
|
||||
X10029;3794812,4058714940
|
||||
Y10029;546901,17878684785
|
||||
Z10029;5080017,3976387208
|
||||
X10034;3794851,7492064292
|
||||
Y10034;546947,45549867210
|
||||
Z10034;5079974,2108252074
|
||||
X10045;3794857,0124008224
|
||||
Y10045;547004,59141104372
|
||||
Z10045;5079971,9726825530
|
||||
X10049;3794751,2572443298
|
||||
Y10049;547011,56194730279
|
||||
Z10049;5080031,2696144487
|
||||
X10047;3794794,0888480879
|
||||
Y10047;547003,25526369818
|
||||
Z10047;5079996,4270136360
|
||||
X10046;3794809,3628738735
|
||||
Y10046;546996,66390205411
|
||||
Z10046;5079986,7426119278
|
||||
X10048;3794772,8513984394
|
||||
Y10048;547004,79019417693
|
||||
Z10048;5080014,6234130393
|
||||
X10057;3794763,2886457477
|
||||
Y10057;547065,11840483252
|
||||
Z10057;5080003,6886467107
|
||||
X10055;3794799,7076102519
|
||||
Y10055;547064,35354224121
|
||||
Z10055;5079974,0101138130
|
||||
X10054;3794845,9912677171
|
||||
Y10054;547061,68456488943
|
||||
Z10054;5079930,5760331770
|
||||
X10058;3794736,1075504871
|
||||
Y10058;547085,20337710682
|
||||
Z10058;5080034,3588629889
|
||||
X10056;3794790,3311639278
|
||||
Y10056;547079,62319395720
|
||||
Z10056;5079984,3166781181
|
||||
|
178
Zwischenergebnisse/Unbekanntenvektor_Symbolisch.csv
Normal file
178
Zwischenergebnisse/Unbekanntenvektor_Symbolisch.csv
Normal file
@@ -0,0 +1,178 @@
|
||||
Unbekanntenvektor;
|
||||
X10009;X10009
|
||||
Y10009;Y10009
|
||||
Z10009;Z10009
|
||||
X10006;X10006
|
||||
Y10006;Y10006
|
||||
Z10006;Z10006
|
||||
X10010;X10010
|
||||
Y10010;Y10010
|
||||
Z10010;Z10010
|
||||
X10018;X10018
|
||||
Y10018;Y10018
|
||||
Z10018;Z10018
|
||||
X10008;X10008
|
||||
Y10008;Y10008
|
||||
Z10008;Z10008
|
||||
X10005;X10005
|
||||
Y10005;Y10005
|
||||
Z10005;Z10005
|
||||
X10003;X10003
|
||||
Y10003;Y10003
|
||||
Z10003;Z10003
|
||||
X10004;X10004
|
||||
Y10004;Y10004
|
||||
Z10004;Z10004
|
||||
X10007;X10007
|
||||
Y10007;Y10007
|
||||
Z10007;Z10007
|
||||
X10001;X10001
|
||||
Y10001;Y10001
|
||||
Z10001;Z10001
|
||||
X10002;X10002
|
||||
Y10002;Y10002
|
||||
Z10002;Z10002
|
||||
X10016;X10016
|
||||
Y10016;Y10016
|
||||
Z10016;Z10016
|
||||
X10011;X10011
|
||||
Y10011;Y10011
|
||||
Z10011;Z10011
|
||||
X10026;X10026
|
||||
Y10026;Y10026
|
||||
Z10026;Z10026
|
||||
X10027;X10027
|
||||
Y10027;Y10027
|
||||
Z10027;Z10027
|
||||
X10043;X10043
|
||||
Y10043;Y10043
|
||||
Z10043;Z10043
|
||||
X10044;X10044
|
||||
Y10044;Y10044
|
||||
Z10044;Z10044
|
||||
X10021;X10021
|
||||
Y10021;Y10021
|
||||
Z10021;Z10021
|
||||
X10020;X10020
|
||||
Y10020;Y10020
|
||||
Z10020;Z10020
|
||||
X10024;X10024
|
||||
Y10024;Y10024
|
||||
Z10024;Z10024
|
||||
X10025;X10025
|
||||
Y10025;Y10025
|
||||
Z10025;Z10025
|
||||
X10022;X10022
|
||||
Y10022;Y10022
|
||||
Z10022;Z10022
|
||||
X10023;X10023
|
||||
Y10023;Y10023
|
||||
Z10023;Z10023
|
||||
X10019;X10019
|
||||
Y10019;Y10019
|
||||
Z10019;Z10019
|
||||
X10033;X10033
|
||||
Y10033;Y10033
|
||||
Z10033;Z10033
|
||||
X10017;X10017
|
||||
Y10017;Y10017
|
||||
Z10017;Z10017
|
||||
X10052;X10052
|
||||
Y10052;Y10052
|
||||
Z10052;Z10052
|
||||
X10042;X10042
|
||||
Y10042;Y10042
|
||||
Z10042;Z10042
|
||||
X10053;X10053
|
||||
Y10053;Y10053
|
||||
Z10053;Z10053
|
||||
X10037;X10037
|
||||
Y10037;Y10037
|
||||
Z10037;Z10037
|
||||
X10040;X10040
|
||||
Y10040;Y10040
|
||||
Z10040;Z10040
|
||||
X10041;X10041
|
||||
Y10041;Y10041
|
||||
Z10041;Z10041
|
||||
X10038;X10038
|
||||
Y10038;Y10038
|
||||
Z10038;Z10038
|
||||
X10051;X10051
|
||||
Y10051;Y10051
|
||||
Z10051;Z10051
|
||||
X10036;X10036
|
||||
Y10036;Y10036
|
||||
Z10036;Z10036
|
||||
X10035;X10035
|
||||
Y10035;Y10035
|
||||
Z10035;Z10035
|
||||
X10039;X10039
|
||||
Y10039;Y10039
|
||||
Z10039;Z10039
|
||||
X10059;X10059
|
||||
Y10059;Y10059
|
||||
Z10059;Z10059
|
||||
X10050;X10050
|
||||
Y10050;Y10050
|
||||
Z10050;Z10050
|
||||
X10013;X10013
|
||||
Y10013;Y10013
|
||||
Z10013;Z10013
|
||||
X10028;X10028
|
||||
Y10028;Y10028
|
||||
Z10028;Z10028
|
||||
X10012;X10012
|
||||
Y10012;Y10012
|
||||
Z10012;Z10012
|
||||
X10014;X10014
|
||||
Y10014;Y10014
|
||||
Z10014;Z10014
|
||||
X10031;X10031
|
||||
Y10031;Y10031
|
||||
Z10031;Z10031
|
||||
X10015;X10015
|
||||
Y10015;Y10015
|
||||
Z10015;Z10015
|
||||
X10032;X10032
|
||||
Y10032;Y10032
|
||||
Z10032;Z10032
|
||||
X10030;X10030
|
||||
Y10030;Y10030
|
||||
Z10030;Z10030
|
||||
X10029;X10029
|
||||
Y10029;Y10029
|
||||
Z10029;Z10029
|
||||
X10034;X10034
|
||||
Y10034;Y10034
|
||||
Z10034;Z10034
|
||||
X10045;X10045
|
||||
Y10045;Y10045
|
||||
Z10045;Z10045
|
||||
X10049;X10049
|
||||
Y10049;Y10049
|
||||
Z10049;Z10049
|
||||
X10047;X10047
|
||||
Y10047;Y10047
|
||||
Z10047;Z10047
|
||||
X10046;X10046
|
||||
Y10046;Y10046
|
||||
Z10046;Z10046
|
||||
X10048;X10048
|
||||
Y10048;Y10048
|
||||
Z10048;Z10048
|
||||
X10057;X10057
|
||||
Y10057;Y10057
|
||||
Z10057;Z10057
|
||||
X10055;X10055
|
||||
Y10055;Y10055
|
||||
Z10055;Z10055
|
||||
X10054;X10054
|
||||
Y10054;Y10054
|
||||
Z10054;Z10054
|
||||
X10058;X10058
|
||||
Y10058;Y10058
|
||||
Z10058;Z10058
|
||||
X10056;X10056
|
||||
Y10056;Y10056
|
||||
Z10056;Z10056
|
||||
|
Reference in New Issue
Block a user