| XML Hier passt alles rein, was das Thema XML (XSLT, etc...) betrifft, auch in Verbindung mit PHP |
 |
|

16-08-2007, 15:55
|
|
maffy
Registrierter Benutzer
|
|
Registriert seit: Oct 2002
Ort: Steinach - Bad Bocklet
Beiträge: 286
|
|
GPX File lesen und daten mit php weiterverarbeiten
Ich habe folgendes Script erstellt das GPX Daten liest und ausgibt.
Das Porblem ist, das ich nur bestimmte Atribute auslesen möchte.
Das Script gibt aber alle an. Wo liegt hier der Fehler.
Ich benötige nur die Daten für das Datum, LON und LAT um damit Bilder Geotaggen zu können und dann eine Google Map erstellen zu lassen.
PHP-Code:
#############################################################
# GPX Parser um GPX Files zu Parsen
# GPX File erstellt mit gpsbable | [url]http://www.gpsbabel.org[/url]
#############################################################
#<trkpt lat="50.284741667" lon="10.098406667">
#<ele>237.200000</ele>
#<time>2007-08-12T09:15:07Z</time>
#<course>90.900002</course>
#<speed>6.194445</speed>
#<fix>3d</fix>
#<sat>4</sat>
#<hdop>5.700000</hdop>
#<vdop>4.400000</vdop>
#<pdop>7.200000</pdop>
#</trkpt>
function startElement($parser, $element_name, $element_attribute) {
global $ausgabe;
$attr_array[] = array();
$attr_lat = $element_attribute['LAT']; // Latitude
$attr_lon = $element_attribute['LON']; // Longtidude
$attr_ele = $element_attribute['ELE']; // HÖHE
$attr_time = $element_attribute['TIME']; // Datum und Zeit
$attr_course = $element_attribute['COURSE']; //
$attr_speed = $element_attribute['SPEED']; //
$attr_fix = $element_attribute['FIX']; //
$attr_sat = $element_attribute['SAT']; //
$attr_hdop = $element_attribute['HDOP']; //
$attr_vdop = $element_attribute['VDOP']; //
$attr_pdop = $element_attribute['PDOP']; //
$result_array[] = '{$attr_lat}, {$attr_lon} ,{$attr_time} <br> ';
//Umwandeln in Kleinbuchstaben
$element_name = strtolower($element_name);
//Überprüfung des Elementnames <trkpt lat="50.284741667" lon="10.098406667">
if ($element_name=="trkpt") {
$ausgabe .= "<h3>Track Inhalt</h3> LON: {$attr_lon}, LAT: {$attr_lat}, ";
}
// Höhenmeter <ele>237.200000</ele>
if($element_name=="ele"){
$ausgabe .= "Höhe: {$attr_ele}";
}
// GPS Time <time>2007-08-12T09:15:07Z</time>
if($element_name=="time"){
$ausgabe .= "GPS Time: {$attr_ele}";
}
// GPS course <course>90.900002</course>
if($element_name=="course"){
#$ausgabe .= "GPS Course: {$attr_course}";
}
// GPS Geschwindeigkeit <speed>6.194445</speed>
if($element_name=="speed"){
#$ausgabe .= "GPS Speed: {$attr_speed}";
}
// GPS Geschwindeigkeit <fix>3d</fix>
if($element_name=="fix"){
#$ausgabe .= "GPS Fix: {$attr_fix}";
}
// GPS Satelitenempfang <sat>4</sat>
if($element_name=="sat"){
#$ausgabe .= "GPS Sat (Anzahl): {$attr_sat}";
}
// GPS Satelitenempfang <sat>4</sat>
if($element_name=="hdop"){
#$ausgabe .= "GPS hdop: {$attr_hdop}";
}
// GPS Satelitenempfang <sat>4</sat>
if($element_name=="vdop"){
#$ausgabe .= "GPS vdop: {$attr_vdop}";
}
// GPS Satelitenempfang <sat>4</sat>
if($element_name=="pdop"){
#$ausgabe .= "GPS pdop: {$attr_pdop}";
}
}
function endElement($parser, $element_name) {
global $ausgabe;
// in Kleinbuchstaben umwandeln
$element_name = strtolower($element_name);
// Überprüfung des Names eines Elementes
if ($element_name=="trkpt") {
$ausgabe .= " </p> <hr>";
}
if($element_name=="ele"){
$ausgabe .= "-";
}
// Höhenmeter
if($element_name=="time"){
$ausgabe .= "<br> ";
}
// Kurs
if($element_name=="course"){
#$ausgabe .= " | ";
}
// GPS Geschwindeigkeit
if($element_name=="speed"){
#$ausgabe .= " | ";
}
// GPS Geschwindeigkeit
if($element_name=="fix"){
#$ausgabe .= " | ";
}
// GPS Geschwindeigkeit
if($element_name=="sat"){
#$ausgabe .= " <br /> ";
}
// GPS Satelitenempfang <sat>4</sat>
if($element_name=="hdop"){
#$ausgabe .= " | ";
}
// GPS Satelitenempfang <sat>4</sat>
if($element_name=="vdop"){
#$ausgabe .= " | ";
}
// GPS Satelitenempfang <sat>4</sat>
if($element_name=="pdop"){
#$ausgabe .= "";
}
}
function cdata($parser, $element_inhalt) {
global $ausgabe;
// Der normale Text wird an $ausgabe angehängt
$ausgabe .= $element_inhalt;
}
$xmlFile = file("test.gpx");
$parser = xml_parser_create();
xml_set_element_handler($parser, "startElement", "endElement");
xml_set_character_data_handler($parser, "cdata");
foreach($xmlFile as $elem)
{
xml_parse($parser, $elem);
}
xml_parser_free($parser);
print $ausgabe;
Mfg Maffy
__________________
in der ruhe liegt die kraft
|

16-08-2007, 16:10
|
TobiaZ
 Moderator
|
|
Registriert seit: Jan 2001
Ort: MUC und MGL, Germany
Beiträge: 34.077
|
|
Zitat:
|
Wo liegt hier der Fehler.
|
Wo liegt dein Ansatz?
|

16-08-2007, 16:25
|
|
penizillin
PHP Guru
|
|
Registriert seit: Feb 2004
Beiträge: 10.166
|
|
Zitat:
Das Porblem ist, das ich nur bestimmte Atribute auslesen möchte.
Das Script gibt aber alle an.
|
verdeutliche das mal an testausgaben.
|

16-08-2007, 16:40
|
|
maffy
Registrierter Benutzer
|
|
Registriert seit: Oct 2002
Ort: Steinach - Bad Bocklet
Beiträge: 286
|
|
Ich benötige diese Infos in einem Array damit ich die Daten weiter Verarbeiten kann.
$attr_lat = $element_attribute['LAT']; // Latitude
$attr_lon = $element_attribute['LON']; // Longtidude
$attr_ele = $element_attribute['ELE']; // HÖHE
$attr_time = $element_attribute['TIME']; // Datum und Zeit
Ausgebe der GPX Datei
Mfg Maffy
__________________
in der ruhe liegt die kraft
|

16-08-2007, 16:50
|
TobiaZ
 Moderator
|
|
Registriert seit: Jan 2001
Ort: MUC und MGL, Germany
Beiträge: 34.077
|
|
PHP-Code:
$array_zur_weiterverarbeitung = array(
'attr_lat' => $element_attribute['LAT'],
'attr_lon' => $element_attribute['LON'],
'attr_ele' => $element_attribute['ELE'],
'attr_time' => $element_attribute['TIME']);
Falls ich dich falsch verstanden habe, behaupte ich, dass du dich falsch ausgedrückt hast!
|

16-08-2007, 16:52
|
jahlives
Master  
|
|
Registriert seit: Jun 2004
Ort: Hooker in Kernel
Beiträge: 8.283
|
|
Zitat:
|
Ich benötige nur die Daten für das Datum, LON und LAT
|
Wenns mit dem Parser nicht klappt, warum verwendest du nicht einfach einen RegExp ?
PHP-Code:
preg_match('/<trkpt\\s+lat="([^"]*)"\\s+lon="([^"]*)">.*?<time>([^<]*)/is',$deinString,$treffer);
|

17-08-2007, 10:39
|
|
maffy
Registrierter Benutzer
|
|
Registriert seit: Oct 2002
Ort: Steinach - Bad Bocklet
Beiträge: 286
|
|
Egal wie ich $ausgabe Formatiere, er gibt immer alle Werte aus die er findet.
Mit den RegExp habe ich so meine Probleme diese zu erstellen.
Aber ich werd das mal porbieren.
Mfg Maffy
__________________
in der ruhe liegt die kraft
|

17-08-2007, 12:14
|
TobiaZ
 Moderator
|
|
Registriert seit: Jan 2001
Ort: MUC und MGL, Germany
Beiträge: 34.077
|
|
Zitat:
|
Egal wie ich $ausgabe Formatiere, er gibt immer alle Werte aus die er findet.
|
Quellcode? Mit vernünftiger Problembeschreibung hast du es nicht so? Es ist DEIN Problem! Also streng dich an, damit man dir helfen kann!
|

18-08-2007, 16:46
|
|
maffy
Registrierter Benutzer
|
|
Registriert seit: Oct 2002
Ort: Steinach - Bad Bocklet
Beiträge: 286
|
|
Ich habe jetzt einen GPXParser gefunden den ich entsprechend anpassen kann.
Mfg Maffy
__________________
in der ruhe liegt die kraft
|

19-08-2007, 15:14
|
|
maffy
Registrierter Benutzer
|
|
Registriert seit: Oct 2002
Ort: Steinach - Bad Bocklet
Beiträge: 286
|
|
Ich habe es jetzt soweit hinbekommen das er mir die Daten in der Google Map anzeigt.
Jetzt benötige ich noch den kleinsten Wert aus $LAT und größten Wert aus $LON der in dem Array steht um die Karte optimal auszurichten und anzzuzeigen.
Wie kann ich den kleinsten Wert aus LAT bzw den größten Wert aus $LON auslesen?
PHP-Code:
for ($counter=0; $counter<$maxwpt; $counter++) {
$LAT = "".$gpxdata["wpt".$counter]["LAT"];
$LON = "".$gpxdata["wpt".$counter]["LON"];
$points .="points.push(new GPoint($LON,$LAT));\n";
}
MFG Maffy
__________________
in der ruhe liegt die kraft
|

19-08-2007, 15:48
|
 |
onemorenerd
 Moderator
|
|
Registriert seit: Mar 2005
Ort: Berlin
Beiträge: 9.481
|
|
Wozu verkettest du die Werte mit leeren Strings?
Um das Min-/Maximum zu bestimmen kannst du die $LON und $LAT in eigenen Arrays sammeln und nach der Schleife max() bzw. min() auf diese anwenden.
|

19-08-2007, 16:23
|
|
maffy
Registrierter Benutzer
|
|
Registriert seit: Oct 2002
Ort: Steinach - Bad Bocklet
Beiträge: 286
|
|
PHP-Code:
####################################################
# GPX Datei Parsen und Wegpunkte anzeigen
####################################################
require_once('gpxParser.php');
$gpxfile = new gpxParser();
$gpxfile->parse($filename);
$gpxdata = $gpxfile->output;
$maxwpt = $gpxdata["wpt_count"];
$counter = 0;
###################################################
# Wegpunkte
###################################################
for ($counter=0; $counter<$maxwpt; $counter++) {
$LAT = "".$gpxdata["wpt".$counter]["LAT"];
$LON = "".$gpxdata["wpt".$counter]["LON"];
$points .="points.push(new GPoint($LON,$LAT));\n";
}
Mfg Maffy
__________________
in der ruhe liegt die kraft
Geändert von maffy (19-08-2007 um 17:11 Uhr)
|

19-08-2007, 16:50
|
 |
onemorenerd
 Moderator
|
|
Registriert seit: Mar 2005
Ort: Berlin
Beiträge: 9.481
|
|
Hier ist noch der Link zu Bratwurst with Sauerkraut:
Lecker!
(Entschuldige bitte, dass ich nicht auf deinen Beitrag eingehe. Das beruht auf Gegenseitigkeit. *sic*)
|

19-08-2007, 17:10
|
|
maffy
Registrierter Benutzer
|
|
Registriert seit: Oct 2002
Ort: Steinach - Bad Bocklet
Beiträge: 286
|
|
also, langsam mag ich hier im forum wirklich keine fragen mehr stellen.
man kriegt nur noch dumme antworten zurück.
__________________
in der ruhe liegt die kraft
|

19-08-2007, 17:13
|
 |
onemorenerd
 Moderator
|
|
Registriert seit: Mar 2005
Ort: Berlin
Beiträge: 9.481
|
|
Und ich mag langsam nicht mehr auf Fragen antworten und Tipps geben.
Man wird nur noch ignoriert und misverstanden.
|
|
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
|
|
|
| Themen-Optionen |
|
|
| Thema bewerten |
|
|
Forumregeln
|
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.
HTML-Code ist aus.
|
|
|
|
PHP News
|