GPX Datei auslesen nach Name und Zeit

  • geschlossen

  • AS-123
  • 2382 Aufrufe 4 Antworten

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • GPX Datei auslesen nach Name und Zeit

    Hallo,
    also ich möchte gern mit PHP eine gpx Datei auslesen um Name und Zeit auf einer Webseite ausgeben zu können, hab aber keinen Schimmer wie ich das hin bekommen kann.
    Code GPX

    XML-Quellcode

    1. <?xml version="1.0" encoding="ISO-8859-1" standalone="yes"?>
    2. <gpx
    3. version="1.1"
    4. creator="Touratech QV 4.0.127 Standard - http://www.ttqv.com"
    5. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:topografix="http://www.topografix.com/GPX/Private/TopoGrafix/0/1"
    6. xmlns="http://www.topografix.com/GPX/1/1"
    7. xsi:schemaLocation="http://www.topografix.com/GPX/1/1 http://www.topografix.com/GPX/1/1/gpx.xsd">
    8. <metadata>
    9. <time>2010-04-16T15:02:11Z</time>
    10. <bounds minlat="50.778714" minlon="14.805415" maxlat="50.909815" maxlon="14.915388"/>
    11. </metadata>
    12. <trk>
    13. <name>Meine-erste-Tour</name>
    14. <trkseg>
    15. <trkpt lat="50.909664" lon="14.809377"><ele>240</ele><time>2010-04-16T08:14:55Z</time></trkpt>
    16. <trkpt lat="50.909676" lon="14.809383"><ele>243</ele><time>2010-04-16T08:14:58Z</time></trkpt>
    17. <trkpt lat="50.909674" lon="14.809386"><ele>243</ele><time>2010-04-16T08:14:59Z</time></trkpt>
    18. </trkseg>
    19. </trk>
    20. <extensions>
    21. </extensions>
    22. </gpx>
    Alles anzeigen

    So was ich benötige wäre nach <metadata> die Angaben zur Zeit und dann noch den Namen der zwischen <name>*</name> steht.
    Alle anderen Daten hab ich schon mit einem anderen Script auslesen können.
    Wobei $filename der Dateiname der gpx Datei ist.

    PHP-Quellcode

    1. Dateiname dieser PHP Datei - "auslese.php"
    2. $filename der Dateiname der gpx Datei zB. test.gpx
    3. <?php
    4. //Funktion zum Auslesen von lat und lon aus der gpx-Datei
    5. function getlatlon($quelle, $suche) {
    6. $suche= " ".$suche."=\"";
    7. if (strpos($quelle, $suche) == false){
    8. $suche = str_replace("\"","'",$suche);
    9. }//end if
    10. $quelle = substr($quelle, strpos($quelle, $suche)+ strlen($suche));
    11. return str_replace(",",".",substr($quelle, 0, strpos($quelle, "\"")));
    12. }//end function
    13. //Funktion zum Auslesen von ele aus der gpx-Datei
    14. function getele($quelle) {
    15. $quelle = substr($quelle, strpos($quelle, "<ele>")+ strlen("<ele>"));
    16. return str_replace(",",".",substr($quelle, 0, strpos($quelle, "</ele>")));
    17. }//end function
    18. ?>
    19. <?php
    20. // erstellt die URL des Tracks aus dem Unterordner gpx
    21. $track = "../110-gpx/".$filename;
    22. if (file_exists($track)) {//prüfen, ob angegebene Datei vorhanden ist
    23. //Koordinaten und Höhen in Array schreiben
    24. $fp = fopen( $track, "r"); // gpx-Datei öffnen
    25. $n=0;
    26. $m=0;
    27. while (! feof( $fp )) {
    28. $zeile = fgets( $fp , 4096);
    29. if (strpos($zeile,"<trkpt") !== false) {
    30. $lat[$n] = getlatlon($zeile, "lat");
    31. $lon[$n] = getlatlon($zeile, "lon");
    32. $n++;
    33. } //end if
    34. if (strpos($zeile,"<ele>") !== false) {
    35. $ele[$m] = getele($zeile);
    36. $m++;
    37. }//end if
    38. } //end while
    39. }//end if
    40. fclose($fp); //gpx-Datei schließen
    41. //Berechnung der Tracklänge
    42. $i = 0;
    43. $r0 = 6371.0;//Erdradius
    44. $laenge = 0.0;
    45. while ($i < ($n-1)) {
    46. if(($lat[$i] != $lat[$i+1]) && ($lon[$i] != $lon[$i+1])) {
    47. $a = (90.0 - $lat[$i]) * M_PI / 180.0;
    48. $b = (90.0 - $lat[$i+1]) * M_PI / 180.0;
    49. $gamma = (abs($lon[$i+1] - $lon[$i])) * M_PI / 180.0;
    50. $c = $r0 * acos(cos($a)*cos($b) + sin($a)*sin($b)*cos($gamma));
    51. $laenge = $laenge + $c;
    52. }//end if
    53. $i++;
    54. }//end while
    55. $laenge = (round(10 * $laenge) / 10)." km";
    56. $laenge = str_replace(".",",",$laenge);
    57. //Höhenmeter addieren
    58. if ($m > 0) {
    59. $i=0;
    60. $up=0.0;
    61. $down=0.0;
    62. while ($i < ($m-1)) {
    63. if ($ele[$i] < $ele[$i+1]) {
    64. $up = $up + $ele[$i+1] - $ele[$i];
    65. }//end if
    66. if ($ele[$i] > $ele[$i+1]) {
    67. $down = $down + $ele[$i] - $ele[$i+1];
    68. }//end if
    69. $i++;
    70. }//end while
    71. $up = (round(10 * $up) / 10)." m";
    72. $up = str_replace(".",",",$up);
    73. $down = -(round(10 * $down) / 10)." m";
    74. $down = str_replace(".",",",$down);
    75. $b_ele = true;
    76. }//end if
    77. else {
    78. $down = "n/a";
    79. $up = "n/a";
    80. $b_ele = false;
    81. }//end else
    82. ?>
    Alles anzeigen

    Auf der Ausgabe Seite steht dann das

    PHP-Quellcode

    1. /* So jetzt die Daten aus der gpx auslesen */
    2. include("auslese.php");
    3. echo 'Trackname: &nbsp;' .$filename.'<br />';
    4. echo 'Tracklänge: &nbsp;' .$laenge.'<br />';
    5. echo 'Anstieg: &nbsp;'.$up.'<br />';
    6. echo 'Abstieg: &nbsp;'.$down.'<br />';

    Kann mir hier jemand weiterhelfen um das letzte kleine übel noch hinzu bekommen. Ach so jetzt nicht wundern das obere Script ist nicht von mir sondern aus einem OSM Forum wo es nur um die Koordinaten und Höhen ging, hab es nur ein wenig angepasst. Meine PHP Kenntnisse sind nicht ganz so toll.
    Gruß und schon mal Danke. :danke:
    [SIZE="1"]mehr Infos[/SIZE]

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von AS-123 ()

  • Hi,
    da es eine XML-Datei ist, einfach SimpleXML (oder eine andere XML-Lese Klasse: PHP: XML Manipulation - Manual ) benutzen ;)
    PHP: SimpleXML - Manual

    Quellcode

    1. $file = simplexml_load_file('./as-123.xml');
    2. echo 'Time: '.$file->metadata[0]->time.'; Name: '.$file->trk[0]->name;

    Info: Für das Arbeiten mit Variablen von $file, strval() benutzen, da außer bei automatischen String-Umwandlungen (Bsp. '.$file->bla.') sonst nur die XML-Resource zurückgegeben wird!

    Gruß
    Broken Sword
    Auf dem Abstellgleis sah man ihn liegen,
    Auf dem Abstellgleis zwischen Schwelle und Gestein,
    Auf dem Abstellgleis im strömenden Regen,
    Auf dem Abstellgleis allein.

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von Broken Sword ()

  • Hallo Broken Sword,
    wieder mal einen großen Dank an Dich für die schnelle Hilfe.
    Genau diesen Code hab ich gesucht und es funzt wunderbar.
    Die Links werde ich mir zu Gemüt führen und durchlesen.
    Den Code von Dir werde ich erst mal so einbauen damit ich weiterkomme und meine Datenbank füllen kann.
    Also nochmals Danke und schönes WE noch Gruß AS-123

    edit:
    ich noch mal. Ist ein sortieren der Zeit aus der Datenbank heraus möglich.
    Blöde Frage na klar kann man nach Zeit sortieren und ausgeben lassen, aber aus der obigen Abfrage bekomme ich ja nun dieses Zeitformat
    2010-03-06T15:42:14Z
    kann ich das so in die Datenbank schreiben und zum sortieren nutzen oder muss ich das erst noch bearbeiten?
    Gruß AS-123
    [SIZE="1"]mehr Infos[/SIZE]

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Broken Sword () aus folgendem Grund: Doppelpost =&gt; Regeln lesen!

  • Hi,
    wenn es "JAHR-MONAT-TAGTSTUNDE:MINUTE:SEKUNDEZ" ist, kannst du es mittels ORDER BY sortieren.
    Sonst einfach mittels PHP: strtotime - Manual in UNIX-Timestamp überführen und abspeichern.

    Gruß
    Broken Sword
    Auf dem Abstellgleis sah man ihn liegen,
    Auf dem Abstellgleis zwischen Schwelle und Gestein,
    Auf dem Abstellgleis im strömenden Regen,
    Auf dem Abstellgleis allein.