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
- <?xml version="1.0" encoding="ISO-8859-1" standalone="yes"?>
- <gpx
- version="1.1"
- creator="Touratech QV 4.0.127 Standard - http://www.ttqv.com"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:topografix="http://www.topografix.com/GPX/Private/TopoGrafix/0/1"
- xmlns="http://www.topografix.com/GPX/1/1"
- xsi:schemaLocation="http://www.topografix.com/GPX/1/1 http://www.topografix.com/GPX/1/1/gpx.xsd">
- <metadata>
- <time>2010-04-16T15:02:11Z</time>
- <bounds minlat="50.778714" minlon="14.805415" maxlat="50.909815" maxlon="14.915388"/>
- </metadata>
- <trk>
- <name>Meine-erste-Tour</name>
- <trkseg>
- <trkpt lat="50.909664" lon="14.809377"><ele>240</ele><time>2010-04-16T08:14:55Z</time></trkpt>
- <trkpt lat="50.909676" lon="14.809383"><ele>243</ele><time>2010-04-16T08:14:58Z</time></trkpt>
- <trkpt lat="50.909674" lon="14.809386"><ele>243</ele><time>2010-04-16T08:14:59Z</time></trkpt>
- </trkseg>
- </trk>
- <extensions>
- </extensions>
- </gpx>
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
- Dateiname dieser PHP Datei - "auslese.php"
- $filename der Dateiname der gpx Datei zB. test.gpx
- <?php
- //Funktion zum Auslesen von lat und lon aus der gpx-Datei
- function getlatlon($quelle, $suche) {
- $suche= " ".$suche."=\"";
- if (strpos($quelle, $suche) == false){
- $suche = str_replace("\"","'",$suche);
- }//end if
- $quelle = substr($quelle, strpos($quelle, $suche)+ strlen($suche));
- return str_replace(",",".",substr($quelle, 0, strpos($quelle, "\"")));
- }//end function
- //Funktion zum Auslesen von ele aus der gpx-Datei
- function getele($quelle) {
- $quelle = substr($quelle, strpos($quelle, "<ele>")+ strlen("<ele>"));
- return str_replace(",",".",substr($quelle, 0, strpos($quelle, "</ele>")));
- }//end function
- ?>
- <?php
- // erstellt die URL des Tracks aus dem Unterordner gpx
- $track = "../110-gpx/".$filename;
- if (file_exists($track)) {//prüfen, ob angegebene Datei vorhanden ist
- //Koordinaten und Höhen in Array schreiben
- $fp = fopen( $track, "r"); // gpx-Datei öffnen
- $n=0;
- $m=0;
- while (! feof( $fp )) {
- $zeile = fgets( $fp , 4096);
- if (strpos($zeile,"<trkpt") !== false) {
- $lat[$n] = getlatlon($zeile, "lat");
- $lon[$n] = getlatlon($zeile, "lon");
- $n++;
- } //end if
- if (strpos($zeile,"<ele>") !== false) {
- $ele[$m] = getele($zeile);
- $m++;
- }//end if
- } //end while
- }//end if
- fclose($fp); //gpx-Datei schließen
- //Berechnung der Tracklänge
- $i = 0;
- $r0 = 6371.0;//Erdradius
- $laenge = 0.0;
- while ($i < ($n-1)) {
- if(($lat[$i] != $lat[$i+1]) && ($lon[$i] != $lon[$i+1])) {
- $a = (90.0 - $lat[$i]) * M_PI / 180.0;
- $b = (90.0 - $lat[$i+1]) * M_PI / 180.0;
- $gamma = (abs($lon[$i+1] - $lon[$i])) * M_PI / 180.0;
- $c = $r0 * acos(cos($a)*cos($b) + sin($a)*sin($b)*cos($gamma));
- $laenge = $laenge + $c;
- }//end if
- $i++;
- }//end while
- $laenge = (round(10 * $laenge) / 10)." km";
- $laenge = str_replace(".",",",$laenge);
- //Höhenmeter addieren
- if ($m > 0) {
- $i=0;
- $up=0.0;
- $down=0.0;
- while ($i < ($m-1)) {
- if ($ele[$i] < $ele[$i+1]) {
- $up = $up + $ele[$i+1] - $ele[$i];
- }//end if
- if ($ele[$i] > $ele[$i+1]) {
- $down = $down + $ele[$i] - $ele[$i+1];
- }//end if
- $i++;
- }//end while
- $up = (round(10 * $up) / 10)." m";
- $up = str_replace(".",",",$up);
- $down = -(round(10 * $down) / 10)." m";
- $down = str_replace(".",",",$down);
- $b_ele = true;
- }//end if
- else {
- $down = "n/a";
- $up = "n/a";
- $b_ele = false;
- }//end else
- ?>
Auf der Ausgabe Seite steht dann das
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.
[SIZE="1"]mehr Infos[/SIZE]
Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von AS-123 ()