Geo-Koordinaten umrechnen

  • 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

    Einmal editiert, zuletzt von defcon999 (27. Dezember 2009 um 14:33)

  • 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
    $ew_gg = 53
    $ew_mm = 17
    $ew_ss = 25
    $ew = "E"

    [/autoit][autoit][/autoit][autoit]

    ;Nord-Süd Koordinaten
    $ns_gg = 010
    $ns_mm = 34
    $ns_ss = 45
    $ns = "N"

    [/autoit]

    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?!

    Zitat

    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!

    Spoiler anzeigen
    [autoit]

    ;Nord-Süd Koordinaten
    $ns_gg = 10
    $ns_mm = 34
    $ns_ss = 46
    $ns = StringFormat("%03d%02d.%4d", $ns_gg, $ns_mm, 500*$ns_ss/3)

    [/autoit] [autoit][/autoit] [autoit]

    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 = ""
    Global $sSek = ""

    [/autoit] [autoit][/autoit] [autoit]

    For $i = 2 To 58
    $sSek &= $i & '|'
    Next
    For $i = 2 To 84
    $sGrad &= $i & '|'
    Next
    $sSek &= 59
    $sGrad &= 85

    [/autoit] [autoit][/autoit] [autoit]

    GUICreate("GeoCreator")

    [/autoit] [autoit][/autoit] [autoit]

    $font = "Arial"
    GUICtrlCreateLabel("Breitengrad", 150, 5, 150)
    GUICtrlSetFont(-1, 12, 400, 2, $font)

    [/autoit] [autoit][/autoit] [autoit]

    GUICtrlCreateLabel("Nord-Süd", 190, 50, 70)
    GUICtrlCreateCombo("N", 250, 45)
    GUICtrlSetData(-1, "S", "N")

    [/autoit] [autoit][/autoit] [autoit]

    GUICtrlCreateLabel("Grad", 10, 40, 70)
    $hNordGrad = GUICtrlCreateCombo("1", 85, 45)
    GUICtrlSetData(-1, $sGrad, "53")

    [/autoit] [autoit][/autoit] [autoit]

    GUICtrlCreateLabel("Minuten", 10, 70, 70)
    $hNordMin = GUICtrlCreateCombo("1", 85, 70)
    GUICtrlSetData(-1, $sGrad, "30")

    [/autoit] [autoit][/autoit] [autoit]

    GUICtrlCreateLabel("Sekunden", 10, 100, 70)
    $hNordSek = GUICtrlCreateCombo("1", 85, 100)
    GUICtrlSetData(-1, $sSek, "1")

    [/autoit] [autoit][/autoit] [autoit]

    $font = "Arial"
    GUICtrlCreateLabel("Längengrad", 150, 130, 150)
    GUICtrlSetFont(-1, 12, 400, 2, $font)

    [/autoit] [autoit][/autoit] [autoit]

    GUICtrlCreateLabel("Ost-West", 190, 175, 70)
    GUICtrlCreateCombo("O", 250, 170)
    GUICtrlSetData(-1, "W", "O")

    [/autoit] [autoit][/autoit] [autoit]

    GUICtrlCreateLabel("Grad", 10, 170, 70)
    $hOstGrad = GUICtrlCreateCombo("1", 85, 170)
    GUICtrlSetData(-1, $sGrad, "10")

    [/autoit] [autoit][/autoit] [autoit]

    GUICtrlCreateLabel("Minuten", 10, 200, 70)
    $hOstMin = GUICtrlCreateCombo("1", 85, 200)
    GUICtrlSetData(-1, $sGrad, "6")

    [/autoit] [autoit][/autoit] [autoit]

    GUICtrlCreateLabel("Sekunden", 10, 230, 70)
    $hOstSek = GUICtrlCreateCombo("1", 85, 230)
    GUICtrlSetData(-1, $sSek, "1")

    [/autoit] [autoit][/autoit] [autoit]

    $font = "Arial"
    $hButton = GUICtrlCreateButton("UMRECHNUNG!", 200, 220, 130)
    GUICtrlSetFont(-1, 10, 400, 2, $font)
    GUICtrlSetBkColor(-1, 0x00ff00)

    [/autoit] [autoit][/autoit] [autoit]

    GUICtrlCreateLabel("Geo-Daten für die Control-Software", 120, 280, 300)
    $hLabelOutput = GUICtrlCreateInput("", 50, 300, 300)

    [/autoit] [autoit][/autoit] [autoit]

    GUISetState(@SW_SHOW)

    [/autoit] [autoit][/autoit] [autoit]

    While 1
    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
    WEnd

    [/autoit]

    Hier nun ohne vorangestellte Null.

    Btw.: um welche GPS-Software handelt es sich?

    Einmal editiert, zuletzt von AspirinJunkie (26. Dezember 2009 um 16:55)

  • Spoiler anzeigen
    [autoit]

    #include <GUIConstants.au3>

    [/autoit] [autoit][/autoit] [autoit]

    GUICreate("GeoCreator")

    [/autoit] [autoit][/autoit] [autoit]

    $font = "Arial"
    GUICtrlCreateLabel("Breitengrad", 150, 5, 150)
    GUICtrlSetFont(-1, 12, 400, 2, $font)

    [/autoit] [autoit][/autoit] [autoit]

    GUICtrlCreateLabel("Nord-Süd", 190, 50, 70)
    $ns_combo = GUICtrlCreateCombo("N", 250, 45)
    GUICtrlSetData(-1, "S", "N")

    [/autoit] [autoit][/autoit] [autoit]

    GUICtrlCreateLabel("Grad", 10, 40, 70)
    $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")

    [/autoit] [autoit][/autoit] [autoit]

    GUICtrlCreateLabel("Minuten", 10, 70, 70)
    $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")

    [/autoit] [autoit][/autoit] [autoit]

    GUICtrlCreateLabel("Sekunden", 10, 100, 70)
    $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")

    [/autoit] [autoit][/autoit] [autoit]

    $font = "Arial"
    GUICtrlCreateLabel("Längengrad", 150, 130, 150)
    GUICtrlSetFont(-1, 12, 400, 2, $font)

    [/autoit] [autoit][/autoit] [autoit]

    GUICtrlCreateLabel("Ost-West", 190, 175, 70)
    $ew_combo = GUICtrlCreateCombo("O", 250, 170)
    GUICtrlSetData(-1, "W", "O")

    [/autoit] [autoit][/autoit] [autoit]

    GUICtrlCreateLabel("Grad", 10, 170, 70)
    $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")

    [/autoit] [autoit][/autoit] [autoit]

    GUICtrlCreateLabel("Minuten", 10, 200, 70)
    $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")

    [/autoit] [autoit][/autoit] [autoit]

    GUICtrlCreateLabel("Sekunden", 10, 230, 70)
    $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")

    [/autoit] [autoit][/autoit] [autoit]

    $font = "Arial"
    $umrechnen_button = GUICtrlCreateButton ("UMRECHNUNG!", 200, 220, 130)
    GUICtrlSetFont(-1, 10, 400, 2, $font)
    GUICtrlSetBkColor(-1,0x00ff00)

    [/autoit] [autoit][/autoit] [autoit]

    GUICtrlCreateLabel("Geo-Daten für die Control-Software", 120, 280, 300)
    $output_input = GUICtrlCreateInput("", 50,300,300)

    [/autoit] [autoit][/autoit] [autoit]

    GUISetState (@SW_SHOW) ; will display an empty dialog box

    [/autoit] [autoit][/autoit] [autoit]

    ; Run the GUI until the dialog is closed
    While 1
    $msg = GUIGetMsg()

    [/autoit] [autoit][/autoit] [autoit]

    If $msg = $umrechnen_button Then
    ;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

    [/autoit] [autoit][/autoit] [autoit]

    ;Nord-Süd Koordinaten
    $ns_gg = GUICtrlRead($ns_gg_combo)
    $ns_mm = GUICtrlRead($ns_mm_combo)
    $ns_ss = GUICtrlRead($ns_ss_combo)
    $ns = GUICtrlRead($ns_combo)

    [/autoit] [autoit][/autoit] [autoit]

    $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)
    GUICtrlSetData($output_input, $output)
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    If $msg = $GUI_EVENT_CLOSE Then ExitLoop
    Wend

    [/autoit]

    bittetö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

    Zitat

    Bitte 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...

    Einmal editiert, zuletzt von Karill Endusa (26. Dezember 2009 um 16:57)

  • 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

  • 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