meta data for this page
Calculer une distance entre deux coordonnées
Voici une formule afin de calculer la distance en kilomètres entre deux coordonnées à vol d'oiseau.
Elle est donnée sous forme de fonction que l'on peut mettre dans le Model.
use Illuminate\Support\Facades\DB; ... public function scopeDistance($query, $lat, $long) { return $query->havingRaw(DB::raw('distance >= distanceUser')) ->select(DB::raw("*, (6371 * ACOS(COS(RADIANS($lat)) * COS(RADIANS(latitude)) * COS(RADIANS($long) - RADIANS(longitude)) + SIN(RADIANS($lat)) * SIN(RADIANS(latitude)))) AS distanceUser") ) ->orderBy('distanceUser', 'asc') ->get();
Remplacer 6371 par 3959 pour calculer en miles.
On peut l'utiliser dans un contrôleur sous la forme
$users = User::distance($user->latitude, $user->longitude) ->where('distance', '!=', 0);
Il faut bien sûr une table users avec les colonnes latitude
, longitude
et distance