Selon http://en.wikipedia.org/wiki/Geotagging, ( [0] => 46/1 [1] => 5403/100 [2] => 0/1 )
devrait signifier 46/1 degré, 5403/100 minutes, 0/1 secondes, c'est-à-dire 46°54.03′0″N. En normalisant les secondes, cela donne 46°54′1.8″N.
Le code ci-dessous devrait fonctionner, tant que vous n'obtenez pas de coordonnées négatives (étant donné que vous obtenez N/S et E/O comme une coordonnée séparée, vous ne devriez jamais avoir de coordonnées négatives). Faites-moi savoir s'il y a un bug (Je n'ai pas actuellement d'environnement PHP à portée de main).
//Passer en paramètre GPS.GPSLatitude ou GPS.GPSLongitude ou quelque chose dans ce format
function getGps($exifCoord)
{
$degrees = count($exifCoord) > 0 ? gps2Num($exifCoord[0]) : 0;
$minutes = count($exifCoord) > 1 ? gps2Num($exifCoord[1]) : 0;
$seconds = count($exifCoord) > 2 ? gps2Num($exifCoord[2]) : 0;
//normalisation
$minutes += 60 * ($degrees - floor($degrees));
$degrees = floor($degrees);
$seconds += 60 * ($minutes - floor($minutes));
$minutes = floor($minutes);
//normalisation supplémentaire, probablement pas nécessaire sauf si vous obtenez des données étranges
if($seconds >= 60)
{
$minutes += floor($seconds/60.0);
$seconds -= 60*floor($seconds/60.0);
}
if($minutes >= 60)
{
$degrees += floor($minutes/60.0);
$minutes -= 60*floor($minutes/60.0);
}
return array('degrés' => $degrees, 'minutes' => $minutes, 'secondes' => $seconds);
}
function gps2Num($coordPart)
{
$parts = explode('/', $coordPart);
if(count($parts) <= 0)// au cas où
return 0;
if(count($parts) == 1)
return $parts[0];
return floatval($parts[0]) / floatval($parts[1]);
}
1 votes
@Kami: J'ai mis à jour ma réponse avec un peu de code