Ankündigung

Einklappen
Keine Ankündigung bisher.

GPS Daten umrechnen

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • GPS Daten umrechnen

    Hallo,

    ich habe ein kleines (nicht ganz PHP-Thema).
    Und zwar bekomme ich aus einem System Positionsdaten in der Form:
    51°38'52,0" N 9°59'15,0" O
    Benötige diese aber im Format:
    51.33686989052731,9.119942426681519
    (beide Daten sind beispiele und nicht die entsprechende Umrechnung).
    Kennt jemand von euch den Weg wie man die obere Form un die unter umwandeln kann?

    Gruß
    Thomas

  • #2
    Wie nennen sich denn diese beiden Formate?
    Vielleicht hilft das: http://www.geoclub.de/viewtopic.php?t=7021
    "Wenn du nicht weißt, was du tust: Machs mit Eleganz!"

    (Murphy's Gesetze)

    Kommentar


    • #3
      Hoi, das obere Format ist ist ja Grad, also Grad° Minuten', Sekunden''.
      Und gesucht ist das Dezimalgrad.
      Das Grad lässt sich genau wie Zeit umrechnen:

      51 ° + 38' * 1/60 + 52,0'' * 1/3600 = 51.3368...

      PHP-Code:
      <?php
      function grad2dezgrad($grad$min$sek) {
          return 
      $grad + ($min 60) + ($sek 3600);
      }

      Kommentar


      • #4
        Cool, aber wie kann ich einen String (51°38'52,0" N) in $grad, $min und $sek unterteilen? Gibt es eine Funktion mit der ich anhand von Trennzeichen die Zeichen auslesen kann???

        Kommentar


        • #5
          mit strpos() und substr() denke ich
          "Wenn du nicht weißt, was du tust: Machs mit Eleganz!"

          (Murphy's Gesetze)

          Kommentar


          • #6
            Ich würd explode nehmen.

            Kommentar


            • #7
              Ich bin mal so frei meine Lösung der Nachwelt zur Verfügung zu stellen

              PHP-Code:
              function gps_konverter($q) {
                  
              $h strpos($q'°');
                  
              $m strpos($q"'");
                  
              $s strpos($q'"');

                  
              $str_h substr($q0$h);
                  
              $str_m substr($q$h+1, ($m-$h));
                  
              $str_s substr($q$m+1, ($s-$m-$h));
                  
                  return 
              $str_h + ($str_m 60) + ($str_s 3600);

              Getestet & klappt!

              Kommentar


              • #8
                Zitat von jumping-blueberry
                Ich würd explode nehmen.
                Kann man reguläre Ausdrücke in explode geben? sonst preg_split
                "Wenn du nicht weißt, was du tust: Machs mit Eleganz!"

                (Murphy's Gesetze)

                Kommentar


                • #9
                  Zitat von Freeaak
                  Kann man reguläre Ausdrücke in explode geben? sonst preg_split
                  Nee explode() kenn keine regex, deshalb ist preg_split() erste Wahl. Man muss einfach auf die Sonderzeichen achten:
                  PHP-Code:
                  $pos "51°38'52,0\"";
                  $npos preg_split('/[°\'"]/'$pos);
                  var_dump($npos); 
                  Gruss
                  L

                  Kommentar


                  • #10
                    Man braucht keine Regulären Ausdrücke bei explode...
                    Aber die Lösung von Plague ist doch etwas sauberer und kürzer...
                    Explode müsste man 3 mal anwenden und dann jeweils wieder die Arraywerte exploden.

                    Kommentar


                    • #11
                      Zitat von jumping-blueberry
                      Explode müsste man 3 mal anwenden und dann jeweils wieder die Arraywerte exploden.
                      Genau das macht ja preg_split() in einem mal (theoretisch auch split()) in einem mal. Die Funktion könnte dann so aussehen:
                      PHP-Code:
                      <?php
                      function gps_konverter($pos){
                          
                      $npos preg_split('/[\'"°]/Uu'$pos);
                          
                      $dec 0;
                          for(
                      $i 0;$i 3;$i ++){
                              
                      $dec += $i == $npos[$i] : $npos[$i] / pow(60$i);
                          }
                          return 
                      $dec;
                      }
                      ?>
                      Gruss
                      L

                      Kommentar


                      • #12
                        wir einigen uns nun trotzdem drauf, dass meine Lösung schöner ist

                        Kommentar


                        • #13
                          und noch ein Vorschlag:
                          Mit sscanf() einlesen
                          [URL="https://www.quizshow.io/"]Create your own quiz show.[/URL]

                          Kommentar


                          • #14
                            Zitat von Plague
                            Getestet & klappt!
                            Ach wirklich? Nö:

                            PHP-Code:
                            <?
                            function gps_konverter($q) {
                                $h = strpos($q, '°');
                                $m = strpos($q, "'");
                                $s = strpos($q, '"');

                                $str_h = substr($q, 0, $h);
                                $str_m = substr($q, $h+1, ($m-$h));
                                $str_s = substr($q, $m+1, ($s-$m-$h));

                                var_dump ($str_h,$str_m,$str_s);    

                                return $str_h + ($str_m / 60) + ($str_s / 3600);



                            echo gps_konverter('51°23\'52,0"'); // string(2) "51" string(4) "°23'" string(3) "52,"
                            Beide Lösungen verarbeiten keine Leerzeichen und berücksichtigen keine ungültigen Formate. Auch die englische Kommastelle (mit .) nicht. Die ist aber relevant für die Berechnung mit Nachkommastellen != 0

                            Vorschlag (kurz knackig funktional):

                            PHP-Code:
                            function gps_konverter($pos)
                              {
                              
                            preg_match ('#(\d+)\s*°\s*(\d+)\s*\'\s*(\d+)(?:[,.](\d+))?\s*"#U' $pos $items);

                              if (empty (
                            $items)) return false;

                              
                            array_shift ($items);
                              list (
                            $deg $min $sec $trail) = $items;

                              return 
                            $deg  +  $min 60  +  ($sec '.' $trail) / 3600;
                              } 
                            - Leerzeichen vor und nach Einheiten
                            - Nachkommastelle variabel, Zeichen . oder ,
                            - verwirft ungültige Angaben
                            [COLOR="#F5F5FF"]--[/COLOR]
                            [COLOR="Gray"][SIZE="6"][FONT="Georgia"][B]^^ O.O[/B][/FONT] [/SIZE]
                            „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
                            [URL="http://www.php.de/javascript-ajax-und-mehr/107400-draggable-sorttable-setattribute.html#post788799"][B]Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“[/B][/URL][/COLOR]
                            [COLOR="#F5F5FF"]
                            --[/COLOR]

                            Kommentar

                            Lädt...
                            X