Einbinden einer *.dll oder *.tlb

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
kussji
User
Beiträge: 12
Registriert: Mittwoch 16. Mai 2018, 09:58

Mittwoch 16. Mai 2018, 10:14

Hallo
Bin noch Anfänger in python wie auch in linux (Raspian/Raspberry)

Ich würde gerne von einem GPS-Empfänger die WGS84-Koordinaten in Schweizer-Koordinaten (LV95) transformieren. Dazu gibt es von swisstopo.ch eine DLL bzw. je nach System Bibliotheken.
https://shop.swisstopo.admin.ch/de/prod ... e/DLL_info

Es gibt ein Beispiel-Code für Python mit Hilfe von COMTYPES - schön und gut aber irgendwann habe ich rausgefunden, dass diese für Python mit Windowssystemen sind und nicht Linux. Oder verstehe ich was falsch?
Kann mir jemand Tipps geben, wie ich hier ans Ziel komme. (Grundlagenstudium bin ich dran :roll: , googeln kann ich auch, aber vielleicht suche ich falsch ?)

Danke und Gruss

Code: Alles auswählen

import os
try:
#Load Reframe COM library
from comtypes.client import GetModule, CreateObject
GetModule(os.environ["ProgramFiles"] + "\\swisstopo\\ReframeDLL\\swisstopoReframeLib.tlb")
#Create a new Reframe object
from comtypes.gen.swisstopoReframeLib import Reframe
o=CreateObject(Reframe)
Federal Office of Topography swisstopo Report 09-07
REFRAME library Page 24
#Input coordinates: read in a file, got from a textbox, #or obtained through another method or library...
e_lv03 = 601000.0
n_lv03 = 197500.0
h_ln02 = 555.0
#Transform LV03 coordinates to LV95 and LN02 height to Bessel
result = o.ComputeReframe(e_lv03, n_lv03, h_ln02, 0, 1, 0, 2)
#Save results to variables
e_lv95 = result[0]
n_lv95 = result[1]
h_bessel = result[2]
retcode = result[3]
#Analyze result
if retcode == 1: #OK
… #TODO
else: #Error
… #TODO
__deets__
User
Beiträge: 2687
Registriert: Mittwoch 14. Oktober 2015, 14:29

Mittwoch 16. Mai 2018, 11:25

COM ist zwar strenggenommen plattformunabhaengig, jedoch nur unter Windows ueblich. Aber spaetestens deine DLL ist nur noch fuer Windows nutzbar. Theoretisch kannst du mit Wine arbeiten, aber dann ist *alles* in Wine, auch zB der Python-Interpreter, und alle anderen Pakete die du benutzen willst.

Das einfachste waere wohl die Verwendung von https://proj4.org/ via pyproj. Wenn das deine gewuenschte Transformation beherrscht.
__deets__
User
Beiträge: 2687
Registriert: Mittwoch 14. Oktober 2015, 14:29

Mittwoch 16. Mai 2018, 11:27

Oh, gerade nochmal geschaut. Es gibt doch https://github.com/ValentinMinder/Swiss ... _ch1903.py von den gleichen Leuten. Das ist pures Python.
kussji
User
Beiträge: 12
Registriert: Mittwoch 16. Mai 2018, 09:58

Mittwoch 16. Mai 2018, 17:24

__deets__ hat geschrieben:
Mittwoch 16. Mai 2018, 11:27
Oh, gerade nochmal geschaut. Es gibt doch https://github.com/ValentinMinder/Swiss ... _ch1903.py von den gleichen Leuten. Das ist pures Python.
Als Anfänger sage ich mal "schönes script" um zu sehen, wie man sowas macht. Leider hilft mir das für mein Projekt nicht weiter, weil die Berechnung eine Genauigkeit im 1-Meter-Bereich hat. Mein Ziel ist aber cm-Genauigkeit zu erreichen. Mit DGNSS durch gemachte Tests durchaus realistisch. Nur fand die Umrechnung per Hand statt das soll python unter linux machen.
Die genannte DLL hätte diese Präzision - ist aber meines Wissens nur compiliert verfügbar.

In diesem Forum kann mir wohl für folgendes nicht geholfen werden. Die exakte Formel (cm-Bereich) hätte ich ja, was mir aber jetzt fehlt ist der Offset zwischen CH1903 und ETRS89 (als Formel oder Tabelle, da scheinbar nicht linear)
__deets__
User
Beiträge: 2687
Registriert: Mittwoch 14. Oktober 2015, 14:29

Mittwoch 16. Mai 2018, 17:32

So ganz verstehe ich dich nicht. Wenn die Umrechnung per Hand geschah, dann hast du doch eine Formel? Und warum kann die nicht einfach verwandt werden? Oder meinst du die Nutzung eines Tools unter Windows, das jetzt durch Python/Linux ersetzt werden soll?

Und die DLL gibt es in der REFRAME-Variante ja auch fuer Linux. Wenn das nicht reicht - ja, dann musst du in den sauren Apfel beissen, und entweder Windows benutzen (kann ja auch virtualisiert unter Linux laufen), oder eben auf Wine setzen.

Hilfe bei der Erstellung einer eigenen Umrechnung ist tatsaechlich eher nicht zu erwarten hier - das ist halt schon ein sehr spezielles Thema.
kussji
User
Beiträge: 12
Registriert: Mittwoch 16. Mai 2018, 09:58

Mittwoch 16. Mai 2018, 17:35

__deets__ hat geschrieben:
Mittwoch 16. Mai 2018, 11:25
COM ist zwar strenggenommen plattformunabhaengig, jedoch nur unter Windows ueblich. Aber spaetestens deine DLL ist nur noch fuer Windows nutzbar. Theoretisch kannst du mit Wine arbeiten, aber dann ist *alles* in Wine, auch zB der Python-Interpreter, und alle anderen Pakete die du benutzen willst.

Das einfachste waere wohl die Verwendung von https://proj4.org/ via pyproj. Wenn das deine gewuenschte Transformation beherrscht.
was mir komisch scheint, dass beim Download der DLL folgendes steht:
"Beschreibung: Version 3.2 für Windows 32- oder 64-Bit, Mac oder Linux - Zip-Archiv, das die Binärdateien, die Dokumentation und Beispiele enthält"
warum steht da Linux?

die gleichnamige (zugehörige) Datei "swisstopoReframeLib.tlb" zur *.dll hilft wohl auch nicht weiter - oder?

Ev. versuche ich es mal mit WINE kenne ich nicht - klingt insgesamt aber interessant - auch in andern Zusammenhängen.

Danke trotzdem
__deets__
User
Beiträge: 2687
Registriert: Mittwoch 14. Oktober 2015, 14:29

Mittwoch 16. Mai 2018, 17:43

Stehen tut das da, finden tut man nur DLLs, und ggf. ein JAR. Du kannst ja auch einfach mit Java arbeiten, das sollte plattformunabhaengig sein. Wenn die Helden nicht einen Wrapper fuer ihre Windows DLLs gebaut haben 🙄
narpfel
User
Beiträge: 184
Registriert: Freitag 20. Oktober 2017, 16:10

Mittwoch 16. Mai 2018, 20:29

Die DLLs sind anscheinend keine nativen Windows-DLLs, sondern .NET- bzw- Mono-DLLs (das sagt zumindest die Downloadseite und `file`) und sollten deswegen eigentlich auch unter Linux laufen. Mit IronPython sollten die relativ einfach ansprechbar sein.
__deets__
User
Beiträge: 2687
Registriert: Mittwoch 14. Oktober 2015, 14:29

Mittwoch 16. Mai 2018, 21:28

Cool. Für Python tut das natürlich auch nix. Aber C# ist ja auch ok.
kussji
User
Beiträge: 12
Registriert: Mittwoch 16. Mai 2018, 09:58

Mittwoch 16. Mai 2018, 23:10

__deets__ hat geschrieben:
Mittwoch 16. Mai 2018, 17:43
Stehen tut das da, finden tut man nur DLLs, und ggf. ein JAR. Du kannst ja auch einfach mit Java arbeiten, das sollte plattformunabhaengig sein. Wenn die Helden nicht einen Wrapper fuer ihre Windows DLLs gebaut haben 🙄
Danke für die Antworten.
Vielleicht sind es doch Helden 8) . Mit meinen Kenntnissen hätte ich es wohl geschafft einer DLL Umrechnungen zu entlocken. Aber die Integration für python und linux in meinem Fall übersteigt meine Kenntnisse.
Die Helden stellen auch folgende Dateien (im Download enthalten) zur Verfügung - kann das ev. weiterhelfen?
- ReframeLibWrapper.dll
- ReframeLibWrapper.lib

Ansonsten klopfe ich mal bei den Helden an, wenn die sich überhaupt mit mir abgeben wollen :lol:
Mit Java und IronPython schaue ich mir mal an...

Danke euch...
Antworten