Page 1 sur 1

Récupérer lat / lon premier waypoint fichier GPX

Posté : 28 déc. 2022, 09:44
par chaosad2
Bonjour,
J'utilise du code PHP pour compiler les données d'un fichier GPX (trace GPS) et en extraire la distance, le dénivelé cumulé, les altitudes max et mini.

Code : Tout sélectionner

<?php // return wkt, 'distance', 'd_plus', 'd_moins', 'denivele' function parseGpx($gpxString){ function distance($lat1, $lon1, $lat2, $lon2, $alt1, $alt2) //calcul en km entre 2 points GPS { $r = 6366; $lat1 = deg2rad($lat1); $lat2 = deg2rad($lat2); $lon1 = deg2rad($lon1); $lon2 = deg2rad($lon2); $alt1 = $alt1/1000; $alt2 = $alt2/1000; $dp= 2 * asin(sqrt(pow (sin(($lat1-$lat2)/2) , 2) + cos($lat1)*cos($lat2)* pow( sin(($lon1-$lon2)/2) , 2))); $d = $dp * $r; $h = sqrt(pow($d,2)+pow($alt2-$alt1,2)); return $h; } $gpx = simplexml_load_string($gpxString); $coords_gpx = $gpx->trk->trkseg->trkpt; //=> liste des points du track // $array_pre_wkt = array(); // tableau vide qu'on va remplir avec : lng , lat (format de coordonnée du wkt) $distance = 0; $d_plus = 0; $d_moins = 0; $z_min = null; $z_max = null; for ($i = 0; $i< count($coords_gpx); $i++){ $pt = $coords_gpx[$i]; $alt = (float) $pt->ele; if ($z_max < $alt || is_null($z_max)){ $z_max = $alt; } if ($z_min > $alt || is_null($z_min)){ $z_min = $alt; } if ($i > 0){ $pt_prec = $coords_gpx[$i - 1]; $lat1 = (float) $pt_prec['lat']; $lon1 = (float) $pt_prec['lon']; $alt1 = (float) $pt_prec->ele; $lat2 = (float) $pt['lat']; $lon2 = (float) $pt['lon']; $alt2 = (float) $pt->ele; $distance = $distance + distance($lat1, $lon1, $lat2, $lon2, $alt1, $alt2); //d+ et d- if ($alt1 < $alt2){ $d_plus = $d_plus + ($alt2 - $alt1); } else { $d_moins = $d_moins + ($alt2 - $alt1); } } $lon = (string) $pt['lon']; $lat = (string) $pt['lat']; $ele = (string) $pt->ele; //elevation que nous n'utilisons pas $coords_wkt = $lon . ' ' . $lat; array_push($array_pre_wkt, $coords_wkt); } $denivele = ((float)$coords_gpx[count($coords_gpx)-1]->ele ) - ((float)$coords_gpx[0]->ele ); $wkt_str = 'LINESTRING(' . implode(',',$array_pre_wkt) . ')'; //// le WKT à pousser dans la base $obj = (object) array( //'wkt' => $wkt_str, 'distance' => $distance, 'd_plus' => $d_plus, 'd_moins' => $d_moins, //'denivele'=>$denivele, 'z_min' => $z_min, 'z_max' => $z_max, ); return $obj; } ?>
J'aimerais en complément en extraire les coordonnées du premier waypoint, soit "lat" et "lon" du premier "<trkpt>" (c'est à dire du point de départ).

Un fichier GPX à cette structure :

Code : Tout sélectionner

<?xml version="1.0" encoding="UTF-8"?> <gpx xmlns:xsi=...> <metadata> <name>dinan</name> <author> <name>gpx.studio</name> <link href="https://gpx.studio"></link> </author> </metadata> <trk> <name>Pointe de Dinan</name> <type>Cycling</type> <trkseg> <trkpt lat="48.233537" lon="-4.564412"> <ele>35.3</ele> <time>2017-07-22T08:36:29.000Z</time> </trkpt> <trkpt lat="48.23352" lon="-4.564543"> <ele>35.9</ele> <time>2017-07-22T08:36:38.000Z</time> </trkpt> <trkpt lat="48.233537" lon="-4.564763"> <ele>36.9</ele> <time>2017-07-22T08:36:53.000Z</time> </trkpt> <trkpt lat="48.233527" lon="-4.564909"> <ele>37.7</ele> <time>2017-07-22T08:37:03.000Z</time> </trkpt>
Si quelqu'un peut m'éclairer, merci d'avance !

Re: Récupérer lat / lon premier waypoint fichier GPX

Posté : 28 déc. 2022, 10:10
par or 1
for ($i = 0; $i< count($coords_gpx); $i++){
$pt = $coords_gpx[$i];

pas grand chose à changer pour accéder au premier élément du tableau.

Re: Récupérer lat / lon premier waypoint fichier GPX

Posté : 01 janv. 2023, 03:15
par easyjobber
Essaye ce code-ci

Code : Tout sélectionner

$first_waypoint = $coords_gpx[0]; $lat = (float) $first_waypoint['lat']; $lon = (float) $first_waypoint['lon'];

Re: Récupérer lat / lon premier waypoint fichier GPX

Posté : 01 janv. 2023, 13:50
par chaosad2
Super, merci.
Ca fonctionne parfaitement.
Je vais désormais fouiller du côté de Nominatim pour récupérer le nom du départ.
Bonne journée !