La fonction toute prête afin de pouvoir la retrouver facilement, pas plus d’explications, c’est des maths, ça pique la tête !
class Misc {
/**
* Retourne la distance en metre ou kilometre (si $unit = 'k') entre deux latitude et longitude fournit
*/
public static function distance($lat1, $lng1, $lat2, $lng2, $unit = 'k') {
$earth_radius = 6378137; // Terre = sphère de 6378km de rayon
$rlo1 = deg2rad($lng1);
$rla1 = deg2rad($lat1);
$rlo2 = deg2rad($lng2);
$rla2 = deg2rad($lat2);
$dlo = ($rlo2 - $rlo1) / 2;
$dla = ($rla2 - $rla1) / 2;
$a = (sin($dla) * sin($dla)) + cos($rla1) * cos($rla2) * (sin($dlo) * sin($dlo));
$d = 2 * atan2(sqrt($a), sqrt(1 - $a));
//
$meter = ($earth_radius * $d);
if ($unit == 'k') {
return $meter / 1000;
}
return $meter;
}
}
/**
* Retourne la distance en metre ou kilometre (si $unit = 'k') entre deux latitude et longitude fournit
*/
public static function distance($lat1, $lng1, $lat2, $lng2, $unit = 'k') {
$earth_radius = 6378137; // Terre = sphère de 6378km de rayon
$rlo1 = deg2rad($lng1);
$rla1 = deg2rad($lat1);
$rlo2 = deg2rad($lng2);
$rla2 = deg2rad($lat2);
$dlo = ($rlo2 - $rlo1) / 2;
$dla = ($rla2 - $rla1) / 2;
$a = (sin($dla) * sin($dla)) + cos($rla1) * cos($rla2) * (sin($dlo) * sin($dlo));
$d = 2 * atan2(sqrt($a), sqrt(1 - $a));
//
$meter = ($earth_radius * $d);
if ($unit == 'k') {
return $meter / 1000;
}
return $meter;
}
}
Exemple d’utilisation :
echo round(Misc::distance(48.86417880,2.34250440,43.6008177,3.8873392), 3);//affiche 597.833 (pour 597,833 km entre les deux coordonnées fournit)
Il s’agit bien entendu de distance à vol d’oiseau.
L’article suivant explique comment obtenir les coordonnées latitude et longitude correspondant à une adresse grâce à l’API Google Map.
Rendez vous ici pour faire le calcul directement en MySql et dans Doctrine
Ping : PHP & Google Map API : Récupérer les détails d'une adresse (latitude, longitude, département, région...) - Pense bête d'un développeur web
Merci ! Pile ce qu’il me fallait !
Merci 🙂 la tête ne me pique plus. ^^
merci beaucoup