Optimisation de mon code utilisant simple xml
Bonjour,
Dans un de mes scripts, j'utilise simple XML afin de parser un fichier xml qui n'est autre qu'un fichier GPX (fichier d'un gps).
Dans cet xml, plusieurs données sont accessibles comme la longitude, la latitude, l'altitude, la date et l'heure du point gps)
Voilà comment je procède :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50
| // fonction qui convertit un objet php en tableau associatif
function ToArray($data)
{
if (is_object($data)) $data = get_object_vars($data);
return (is_array($data)) ? array_map(__FUNCTION__,$data) : $data;
}
$racine=$_SERVER['DOCUMENT_ROOT'];
$xml = $racine.'/php/gpx/fichiers/'.$nom_gpx;
$i = 0;
// je convertis le GPX, format dérivé du XML, en objet php
$obj = simplexml_load_file($xml);
// je convertis l'objet php en tableau
$array = ToArray($obj);
// je crée un tableau vide qui contiendra tous mes points avec les attributs lat, lon, ele, time
$my_pts = array();;
//je démarre du noeud trkpt
$array_pts = $array['trk']['trkseg']['trkpt'];
//je parcours chaque élément du tableau array_pts
foreach($array_pts as $keys => $values){
/*
$my_pt : tableau associatif provisoire
*/
unset($my_pt);
$my_pt['lon'] = $values['@attributes']['lon'];
$my_pt['lat'] = $values['@attributes']['lat'];
$my_pt['ele'] = $values['ele'];
$my_pt['time'] = $values['time'];
$my_pts[] = $my_pt;
$i++;
}
echo'<pre>';
print_r($my_pts);
echo'</pre>';
foreach($my_pts as $keys => $pt)
{
//retour de la date
$date = strftime("%Y-%m-%d %H:%M:%S",strtotime($pt['time']));
$sql_insertion = $bdd->prepare('INSERT INTO pts_gpx (lon,lat,ele,date,id_balade)VALUES(:lon,:lat,:elevation,:date,:id_balade)');
$sql_insertion->execute(array(
':lon' => $pt['lon'],
':lat' => $pt['lat'],
':elevation' => $pt['ele'],
':date' => $date,
':id_balade' => $id_balade
));
} |
Exemple de fichier gpx :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
| <?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<gpx xmlns="http://www.topografix.com/GPX/1/1" creator="MapSource 6.15.4" version="1.1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.topografix.com/GPX/1/1 http://www.topografix.com/GPX/1/1/gpx.xsd">
<metadata>
<link href="http://www.garmin.com">
<text>Garmin International</text>
</link>
<time>2011-07-26T19:19:10Z</time>
<bounds maxlat="47.0313850" maxlon="6.0319950" minlat="46.9651310" minlon="5.9490590"/>
</metadata>
<trk>
<name>2011-07-24 51000</name>
<extensions>
<gpxx:TrackExtension xmlns:gpxx="http://www.garmin.com/xmlschemas/GpxExtensions/v3">
<gpxx:DisplayColor>White</gpxx:DisplayColor>
</gpxx:TrackExtension>
</extensions>
<trkseg>
<trkpt lat="47.0076490" lon="6.0294400">
<ele>404.3700000</ele>
<time>2011-07-24T08:24:35Z</time>
</trkpt>
<trkpt lat="47.0076670" lon="6.0294410">
<ele>408.2200000</ele>
<time>2011-07-24T08:25:02Z</time>
</trkpt>
<trkpt lat="47.0076640" lon="6.0294410">
<ele>412.5400000</ele>
<time>2011-07-24T08:25:03Z</time>
</trkpt>
<trkpt lat="47.0076630" lon="6.0294410">
<ele>416.3900000</ele>
<time>2011-07-24T08:25:04Z</time>
</trkpt> |
malheureusement ce process fait méchament ramer mon hébergeur et parfois le "parsage" n'est pas bon et ne semble pas récupérer les bonnes valeurs.
par avance merci pour votre aide.:ccool: