GPX Datei auslesen nach Name und Zeit geschlossen 

Status
Für weitere Antworten geschlossen.

AS-123

Registered +
Registriert
Juni 2008
Beiträge
60
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
Code:
 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">

2010-04-16T15:02:11Z



Meine-erste-Tour

2402010-04-16T08:14:55Z
2432010-04-16T08:14:58Z
2432010-04-16T08:14:59Z
So was ich benötige wäre nach die Angaben zur Zeit und dann noch den Namen der zwischen * steht.
Alle anderen Daten hab ich schon mit einem anderen Script auslesen können.
Wobei $filename der Dateiname der gpx Datei ist.
PHP:
Dateiname dieser PHP Datei - "auslese.php"
$filename der Dateiname der gpx Datei zB. test.gpx
//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, "")+ strlen(""));
return str_replace(",",".",substr($quelle, 0, strpos($quelle, "")));
}//end function
?>

// 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," $lat[$n] = getlatlon($zeile, "lat");
$lon[$n] = getlatlon($zeile, "lon");
$n++;
} //end if
if (strpos($zeile,"") !== 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
PHP:
/* So jetzt die Daten aus der gpx auslesen */
include("auslese.php"); 
echo 'Trackname:  ' .$filename.'
';
echo 'Tracklänge:  ' .$laenge.'
';
echo 'Anstieg:  '.$up.'
';
echo 'Abstieg:  '.$down.'
';
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. :thx:
 
Zuletzt bearbeitet von einem Moderator:
Hi,
da es eine XML-Datei ist, einfach SimpleXML (oder eine andere XML-Lese Klasse: PHP: XML Manipulation - Manual ) benutzen ;)
PHP: SimpleXML - Manual

Code:
$file = simplexml_load_file('./as-123.xml');
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
 
Zuletzt bearbeitet von einem Moderator:
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
 
Zuletzt bearbeitet von einem Moderator:
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
 
Hallo,
Danke noch mal.
Werde zuerst das sortieren versuchen sonst das umwandeln.
Gruß AS-123
 
Status
Für weitere Antworten geschlossen.

Ähnliche Themen

Antworten
13
Aufrufe
5K
C
Antworten
12
Aufrufe
2K
T
Antworten
8
Aufrufe
2K
T
K
Antworten
2
Aufrufe
2K
HobbY-FreaK
H
Zurück
Oben Unten