Moin Moin,
ich bin dabei mich gerade in das wirklich tolle AutoIt-Paket einzuarbeiten und brauche Hilfe bei der Bewältigung des folgenden Problems:
Für eine GPS-Anwendung möchte ich Geo-Koordinaten, die im Format Grad (GG), Minuten (MM), Sekunden (SS) vorliegen, in ein spezielles Dezimalformat umzuwandeln. Aus GG MM SS wird dann GGMM.SSSS. Die Grad- und auch die Minutenzahl soll aus dem Dropdownfeld übernommen werden ... lediglich der Sekundenwert wird durch 60 geteilt und 4 Ziffern NACH dem Komma in den euen Wert übernommen.
Beispiel: Aus 53 Grad, 17 Minuten und 25 Sekunden wird dann der Wert 5317.4166 ... da 25/60 = 0,4166
Die Optik des GUI habe ich bereits fertig! Es gibt also 6 Dropdown-Felder für Grad-Minuten- und Sekunden des Längen- und Breitengrades, 2 Dropdownfelder für O/W und N/S und einen "Umrechnung"-Button Ich habe nur keine Ahnung, wie ich die Werte jetzt aus den verschiedenen Feldern in das neue Format-Feld bekommen soll?!
Wenn alles richtig funktioniert soll aus
53° 17' 25" Ost
010° 34' 45" Nord
der folgende String werden:
01034.7500,N,5317.4166,E
werden
Bin für jede Hilfe dankbar!!!
Viele Grüsse - defcon999
Geo-Koordinaten umrechnen
-
- [ gelöst ]
-
defcon999 -
26. Dezember 2009 um 14:47 -
Geschlossen -
Erledigt
-
-
Zeig doch mal dein Skript.
Wir können dir ja nicht zeigen wie die Werte aus deinen "Feldern" verwendet werden können, wenn wir nicht wissen wie du das aufgebaut hast und woher die Werte kommen.Mal von der Umsetzung abgesehen ist mir allerdings nicht klar was das für ein Koordinatensystem werden soll und warum ausgerechnet so eine Darstellung benötigt.
-
An die Werte aus den Dropdowns zu kommen sollte an sich ja nicht schwer sein...
klar wird es für uns erst klarer wenn er sein script reinstellt aber geht man davon aus dass die werte so:
[autoit];Ost-West Koordinaten
[/autoit][autoit][/autoit][autoit]
$ew_gg = 53
$ew_mm = 17
$ew_ss = 25
$ew = "E";Nord-Süd Koordinaten
[/autoit]
$ns_gg = 010
$ns_mm = 34
$ns_ss = 45
$ns = "N"oder so ähnlich zurückgibt ist es kein Problem diese zu seinem gewünschten string umzuformen...
wobei ich zugeben muss dass ich schlichtweg keine Ahnung habe wie man den wert der variablem $ns_gg = 010 weitergeben soll, da er die führende Null abschneidet! Der Rückgabewert der Variablen ist also nur 10 und nicht 010 -
Zitat
An die Werte aus den Dropdowns zu kommen sollte an sich ja nicht schwer sein...
Anscheinend doch:
Ich habe nur keine Ahnung, wie ich die Werte jetzt aus den verschiedenen Feldern in das neue Format-Feld bekommen soll?!
Zitatwobei ich zugeben muss dass ich schlichtweg keine Ahnung habe wie man den wert der variablem $ns_gg = 010 weitergeben soll, da er die führende Null abschneidet!
Spoiler anzeigen
[autoit];Nord-Süd Koordinaten
[/autoit] [autoit][/autoit] [autoit]
$ns_gg = 10
$ns_mm = 34
$ns_ss = 46
$ns = StringFormat("%03d%02d.%4d", $ns_gg, $ns_mm, 500*$ns_ss/3)MsgBox(0,"", $ns)
[/autoit]
Wenn er mit führenden Nullen wechseln will müsste er allerdings die Zahl als String übergeben (also mit Anführungszeichen) und nicht wie hier als richtige Zahl.
Denn dann werden führende Nullen schon beim einlesen nicht beachtet. -
AspirinJunkie: Das Format wird für eine ganz spezielle GPS-Software benötigt! Einfach mal hinnehmen
Bisher steht lediglich das Layout:
--------------------------------------------------------------------------------------------------------------
#include <GUIConstants.au3>GUICreate("GeoCreator")
$font = "Arial"
GUICtrlCreateLabel("Breitengrad", 150, 5, 150)
GUICtrlSetFont(-1, 12, 400, 2, $font)GUICtrlCreateLabel("Nord-Süd", 190, 50, 70)
GUICtrlCreateCombo("N", 250, 45)
GUICtrlSetData(-1, "S", "N")GUICtrlCreateLabel("Grad", 10, 40, 70)
GUICtrlCreateCombo("1", 85, 45)
GUICtrlSetData(-1, "2|3|4|5|6|7|8|9|10|11|12|13|14|15|16|17|18|19|20|21|22|23|24|25|26|27|28|29|30|31|32|33|34|35|36|37|38|39|40|41|42|43|44|45|46|47|48|49|50|51|52|53|54|55|56|57|58|59|60|61|62|63|64|65|66|67|68|69|70|71|72|73|74|75|76|77|78|79|80|81|82|83|84|85", "53")GUICtrlCreateLabel("Minuten", 10, 70, 70)
GUICtrlCreateCombo("1", 85, 70)
GUICtrlSetData(-1, "2|3|4|5|6|7|8|9|10|11|12|13|14|15|16|17|18|19|20|21|22|23|24|25|26|27|28|29|30|31|32|33|34|35|36|37|38|39|40|41|42|43|44|45|46|47|48|49|50|51|52|53|54|55|56|57|58|59|60|61|62|63|64|65|66|67|68|69|70|71|72|73|74|75|76|77|78|79|80|81|82|83|84|85", "30")GUICtrlCreateLabel("Sekunden", 10, 100, 70)
GUICtrlCreateCombo("1", 85, 100)
GUICtrlSetData(-1, "2|3|4|5|6|7|8|9|10|11|12|13|14|15|16|17|18|19|20|21|22|23|24|25|26|27|28|29|30|31|32|33|34|35|36|37|38|39|40|41|42|43|44|45|46|47|48|49|50|51|52|53|54|55|56|57|58|59|60", "1")$font = "Arial"
GUICtrlCreateLabel("Längengrad", 150, 130, 150)
GUICtrlSetFont(-1, 12, 400, 2, $font)GUICtrlCreateLabel("Ost-West", 190, 175, 70)
GUICtrlCreateCombo("O", 250, 170)
GUICtrlSetData(-1, "W", "O")GUICtrlCreateLabel("Grad", 10, 170, 70)
GUICtrlCreateCombo("1", 85, 170)
GUICtrlSetData(-1, "2|3|4|5|6|7|8|9|10|11|12|13|14|15|16|17|18|19|20|21|22|23|24|25|26|27|28|29|30|31|32|33|34|35|36|37|38|39|40|41|42|43|44|45|46|47|48|49|50|51|52|53|54|55|56|57|58|59|60|61|62|63|64|65|66|67|68|69|70|71|72|73|74|75|76|77|78|79|80|81|82|83|84|85", "10")GUICtrlCreateLabel("Minuten", 10, 200, 70)
GUICtrlCreateCombo("1", 85, 200)
GUICtrlSetData(-1, "2|3|4|5|6|7|8|9|10|11|12|13|14|15|16|17|18|19|20|21|22|23|24|25|26|27|28|29|30|31|32|33|34|35|36|37|38|39|40|41|42|43|44|45|46|47|48|49|50|51|52|53|54|55|56|57|58|59|60|61|62|63|64|65|66|67|68|69|70|71|72|73|74|75|76|77|78|79|80|81|82|83|84|85", "6")GUICtrlCreateLabel("Sekunden", 10, 230, 70)
GUICtrlCreateCombo("1", 85, 230)
GUICtrlSetData(-1, "2|3|4|5|6|7|8|9|10|11|12|13|14|15|16|17|18|19|20|21|22|23|24|25|26|27|28|29|30|31|32|33|34|35|36|37|38|39|40|41|42|43|44|45|46|47|48|49|50|51|52|53|54|55|56|57|58|59|60", "1")$font = "Arial"
GUICtrlCreateButton ("UMRECHNUNG!", 200, 220, 130)
GUICtrlSetFont(-1, 10, 400, 2, $font)
GUICtrlSetBkColor(-1,0x00ff00)GUICtrlCreateLabel("Geo-Daten für die Control-Software", 120, 280, 300)
GUICtrlCreateInput("", 50,300,300)GUISetState (@SW_SHOW) ; will display an empty dialog box
; Run the GUI until the dialog is closed
While 1
$msg = GUIGetMsg()If $msg = $GUI_EVENT_CLOSE Then ExitLoop
Wend--------------------------------------------------------------------------------------------------------------------------------------
Wie gesagt: Das Fomat von Grad und Minuten ändert sich ja nicht ... es wird lediglich zusammengesetzt und dann der Wert der Sekunden geteilt durch 60 mit rangesetzt. Eigentlich ganz einfach
Durch den Druck auf den UMRECHNUNG-Button soll dann der gesamte String im unteren Feld erscheinen und dann per Cut&Paste in die eigentliche Software eingesetzt werden.
Danke schon mal für Eure Mühe!!!!!!!!!!!!!
defcon999 -
Bitte nutze das nächste mal die Forumsformatierungen für den Quellcode.
Ist echt unübersichtlich sonst.So ungefähr?:
Spoiler anzeigen
[autoit]#include <GUIConstantsEx.au3>
[/autoit] [autoit][/autoit] [autoit]Global $sGrad = ""
[/autoit] [autoit][/autoit] [autoit]
Global $sSek = ""For $i = 2 To 58
[/autoit] [autoit][/autoit] [autoit]
$sSek &= $i & '|'
Next
For $i = 2 To 84
$sGrad &= $i & '|'
Next
$sSek &= 59
$sGrad &= 85GUICreate("GeoCreator")
[/autoit] [autoit][/autoit] [autoit]$font = "Arial"
[/autoit] [autoit][/autoit] [autoit]
GUICtrlCreateLabel("Breitengrad", 150, 5, 150)
GUICtrlSetFont(-1, 12, 400, 2, $font)GUICtrlCreateLabel("Nord-Süd", 190, 50, 70)
[/autoit] [autoit][/autoit] [autoit]
GUICtrlCreateCombo("N", 250, 45)
GUICtrlSetData(-1, "S", "N")GUICtrlCreateLabel("Grad", 10, 40, 70)
[/autoit] [autoit][/autoit] [autoit]
$hNordGrad = GUICtrlCreateCombo("1", 85, 45)
GUICtrlSetData(-1, $sGrad, "53")GUICtrlCreateLabel("Minuten", 10, 70, 70)
[/autoit] [autoit][/autoit] [autoit]
$hNordMin = GUICtrlCreateCombo("1", 85, 70)
GUICtrlSetData(-1, $sGrad, "30")GUICtrlCreateLabel("Sekunden", 10, 100, 70)
[/autoit] [autoit][/autoit] [autoit]
$hNordSek = GUICtrlCreateCombo("1", 85, 100)
GUICtrlSetData(-1, $sSek, "1")$font = "Arial"
[/autoit] [autoit][/autoit] [autoit]
GUICtrlCreateLabel("Längengrad", 150, 130, 150)
GUICtrlSetFont(-1, 12, 400, 2, $font)GUICtrlCreateLabel("Ost-West", 190, 175, 70)
[/autoit] [autoit][/autoit] [autoit]
GUICtrlCreateCombo("O", 250, 170)
GUICtrlSetData(-1, "W", "O")GUICtrlCreateLabel("Grad", 10, 170, 70)
[/autoit] [autoit][/autoit] [autoit]
$hOstGrad = GUICtrlCreateCombo("1", 85, 170)
GUICtrlSetData(-1, $sGrad, "10")GUICtrlCreateLabel("Minuten", 10, 200, 70)
[/autoit] [autoit][/autoit] [autoit]
$hOstMin = GUICtrlCreateCombo("1", 85, 200)
GUICtrlSetData(-1, $sGrad, "6")GUICtrlCreateLabel("Sekunden", 10, 230, 70)
[/autoit] [autoit][/autoit] [autoit]
$hOstSek = GUICtrlCreateCombo("1", 85, 230)
GUICtrlSetData(-1, $sSek, "1")$font = "Arial"
[/autoit] [autoit][/autoit] [autoit]
$hButton = GUICtrlCreateButton("UMRECHNUNG!", 200, 220, 130)
GUICtrlSetFont(-1, 10, 400, 2, $font)
GUICtrlSetBkColor(-1, 0x00ff00)GUICtrlCreateLabel("Geo-Daten für die Control-Software", 120, 280, 300)
[/autoit] [autoit][/autoit] [autoit]
$hLabelOutput = GUICtrlCreateInput("", 50, 300, 300)GUISetState(@SW_SHOW)
[/autoit] [autoit][/autoit] [autoit]While 1
[/autoit]
Switch GUIGetMsg()
Case $GUI_EVENT_CLOSE
ExitLoop
Case $hButton
GUICtrlSetData($hLabelOutput, StringFormat("%02d%02d.%04d,N,%02d%02d.%04d,E", _
GUICtrlRead($hNordGrad), _
GUICtrlRead($hNordMin), _
GUICtrlRead($hNordSek)*500/3, _
GUICtrlRead($hOstGrad), _
GUICtrlRead($hOstMin), _
GUICtrlRead($hOstSek)*500/3))
EndSwitch
WEndHier nun ohne vorangestellte Null.
Btw.: um welche GPS-Software handelt es sich?
-
Spoiler anzeigen
[autoit]#include <GUIConstants.au3>
[/autoit] [autoit][/autoit] [autoit]GUICreate("GeoCreator")
[/autoit] [autoit][/autoit] [autoit]$font = "Arial"
[/autoit] [autoit][/autoit] [autoit]
GUICtrlCreateLabel("Breitengrad", 150, 5, 150)
GUICtrlSetFont(-1, 12, 400, 2, $font)GUICtrlCreateLabel("Nord-Süd", 190, 50, 70)
[/autoit] [autoit][/autoit] [autoit]
$ns_combo = GUICtrlCreateCombo("N", 250, 45)
GUICtrlSetData(-1, "S", "N")GUICtrlCreateLabel("Grad", 10, 40, 70)
[/autoit] [autoit][/autoit] [autoit]
$ns_gg_combo = GUICtrlCreateCombo("1", 85, 45)
GUICtrlSetData(-1, "2|3|4|5|6|7|8|9|10|11|12|13|14|15|16|17|18|19|20|21|22|23|24|25|26|27|28|29|30|31|32|33|34|35|36|37|38|39|40|41|42|43|44|45|46|47|48|49|50|51|52|53|54|55|56|57|58|59|60|61|62|63|64|65|66|67|68|69|70|71|72|73|74|75|76|77|78|79|80|81|82|83|84|85", "53")GUICtrlCreateLabel("Minuten", 10, 70, 70)
[/autoit] [autoit][/autoit] [autoit]
$ns_mm_combo = GUICtrlCreateCombo("1", 85, 70)
GUICtrlSetData(-1, "2|3|4|5|6|7|8|9|10|11|12|13|14|15|16|17|18|19|20|21|22|23|24|25|26|27|28|29|30|31|32|33|34|35|36|37|38|39|40|41|42|43|44|45|46|47|48|49|50|51|52|53|54|55|56|57|58|59|60|61|62|63|64|65|66|67|68|69|70|71|72|73|74|75|76|77|78|79|80|81|82|83|84|85", "30")GUICtrlCreateLabel("Sekunden", 10, 100, 70)
[/autoit] [autoit][/autoit] [autoit]
$ns_ss_combo = GUICtrlCreateCombo("1", 85, 100)
GUICtrlSetData(-1, "2|3|4|5|6|7|8|9|10|11|12|13|14|15|16|17|18|19|20|21|22|23|24|25|26|27|28|29|30|31|32|33|34|35|36|37|38|39|40|41|42|43|44|45|46|47|48|49|50|51|52|53|54|55|56|57|58|59|60", "1")$font = "Arial"
[/autoit] [autoit][/autoit] [autoit]
GUICtrlCreateLabel("Längengrad", 150, 130, 150)
GUICtrlSetFont(-1, 12, 400, 2, $font)GUICtrlCreateLabel("Ost-West", 190, 175, 70)
[/autoit] [autoit][/autoit] [autoit]
$ew_combo = GUICtrlCreateCombo("O", 250, 170)
GUICtrlSetData(-1, "W", "O")GUICtrlCreateLabel("Grad", 10, 170, 70)
[/autoit] [autoit][/autoit] [autoit]
$ew_gg_combo = GUICtrlCreateCombo("1", 85, 170)
GUICtrlSetData(-1, "2|3|4|5|6|7|8|9|10|11|12|13|14|15|16|17|18|19|20|21|22|23|24|25|26|27|28|29|30|31|32|33|34|35|36|37|38|39|40|41|42|43|44|45|46|47|48|49|50|51|52|53|54|55|56|57|58|59|60|61|62|63|64|65|66|67|68|69|70|71|72|73|74|75|76|77|78|79|80|81|82|83|84|85", "10")GUICtrlCreateLabel("Minuten", 10, 200, 70)
[/autoit] [autoit][/autoit] [autoit]
$ew_mm_combo = GUICtrlCreateCombo("1", 85, 200)
GUICtrlSetData(-1, "2|3|4|5|6|7|8|9|10|11|12|13|14|15|16|17|18|19|20|21|22|23|24|25|26|27|28|29|30|31|32|33|34|35|36|37|38|39|40|41|42|43|44|45|46|47|48|49|50|51|52|53|54|55|56|57|58|59|60|61|62|63|64|65|66|67|68|69|70|71|72|73|74|75|76|77|78|79|80|81|82|83|84|85", "6")GUICtrlCreateLabel("Sekunden", 10, 230, 70)
[/autoit] [autoit][/autoit] [autoit]
$ew_ss_combo = GUICtrlCreateCombo("1", 85, 230)
GUICtrlSetData(-1, "2|3|4|5|6|7|8|9|10|11|12|13|14|15|16|17|18|19|20|21|22|23|24|25|26|27|28|29|30|31|32|33|34|35|36|37|38|39|40|41|42|43|44|45|46|47|48|49|50|51|52|53|54|55|56|57|58|59|60", "1")$font = "Arial"
[/autoit] [autoit][/autoit] [autoit]
$umrechnen_button = GUICtrlCreateButton ("UMRECHNUNG!", 200, 220, 130)
GUICtrlSetFont(-1, 10, 400, 2, $font)
GUICtrlSetBkColor(-1,0x00ff00)GUICtrlCreateLabel("Geo-Daten für die Control-Software", 120, 280, 300)
[/autoit] [autoit][/autoit] [autoit]
$output_input = GUICtrlCreateInput("", 50,300,300)GUISetState (@SW_SHOW) ; will display an empty dialog box
[/autoit] [autoit][/autoit] [autoit]; Run the GUI until the dialog is closed
[/autoit] [autoit][/autoit] [autoit]
While 1
$msg = GUIGetMsg()If $msg = $umrechnen_button Then
[/autoit] [autoit][/autoit] [autoit]
;Ost-West Koordinaten
$ew_gg = GUICtrlRead($ew_gg_combo)
$ew_mm = GUICtrlRead($ew_mm_combo)
$ew_ss = GUICtrlRead($ew_ss_combo)
$ew = GUICtrlRead($ew_combo)
If $ew = "O" Then
$ew = "E"
EndIf;Nord-Süd Koordinaten
[/autoit] [autoit][/autoit] [autoit]
$ns_gg = GUICtrlRead($ns_gg_combo)
$ns_mm = GUICtrlRead($ns_mm_combo)
$ns_ss = GUICtrlRead($ns_ss_combo)
$ns = GUICtrlRead($ns_combo)$output = StringFormat("%03d%02d.%04d,%s,%02d%02d.%04d,%s", $ns_gg, $ns_mm, $ns_ss/6*1000, $ns, $ew_gg, $ew_mm, $ew_ss/6*1000, $ew)
[/autoit] [autoit][/autoit] [autoit]
GUICtrlSetData($output_input, $output)
EndIfIf $msg = $GUI_EVENT_CLOSE Then ExitLoop
[/autoit]
Wendbittetön
an sich recht einfach die daten der combo boxen mit GUICtrlRead auszulesen, in variablen abzuspeichern und dank der Hilfe von AspirinJunkie in den String zu konvertieren und diesen dann in der if funktion unten mit GUICtrlSetData in deinen input einzufügen
natürlich mussten ein paar variablen gesetzt werden^^
Noch eine If-Abfrage wenn $ew = "O" dann soll $ew = "E" gesetzt werden
getestet auf mögliche Fehler... solten trotzdem welche auftreten mir bitte in den Hintern treten xD//EDIT
Da war wohl einer schneller...
verdammte DC's die ich in letzter Zeit immer hab xD//EDIT2
ZitatBitte nutze das nächste mal die Forumsformatierungen für den Quellcode.
Ist echt unübersichtlich sonst.
Dem kann ich nur zustimmen... und nen Spoiler hilft auch bei der Übersichtlichkeit des Threads allgemein... -
VIELEN DANK!!!!!!! @alle ... aber insbesondere an den AspirinJunkie Werde Dich in mein Abendgebet einschließen!
Das ist ja wirklich eine tolle und schnelle Hilfe hier. Und die Forums-Formatierung kriege ich auch noch hin ... Versprochen!! Jetzt werde ich mich mal daran machen mir Deinen Quelltext anzusehen um nachzuvollziehen, was Du da eigentlich alles gemacht hast
Es handelt sich um eine selbstentwickelte GPS-Hardware, die ein Bekannter fürs Geo-Caching nutzen will. Leider versteht die Hardware nur dieses komische Format, das sonst kein Mensch benutzt
Viele Grüsse und Danke noch mal!
defcon999 -
Das mit dem Gebet muss bitte nicht unbedingt sein...
Schau dir bitte aber auch Karill Endusas Variante genau an weil er die Sache mit den Ost und West-Koordinaten noch mitbeachtet hat was bei meiner Variante noch nicht drin ist.
-
Hatte ich schon bemerkt und auch schon entsprechend angepasst! Noch funktioniert es perfekt!
Inzwischen habe ich das "Prinzip" dahinter auch kapiert
Vielen Dank noch mal Euch Beiden!!!!!
defcon999