Distances
phil/geoLa distance orthodromique
Coordinates::distanceTo() est la distance haversine sur une sphère du rayon moyen de la Terre, 6 371 008.8 m. Elle se
situe à moins d'un demi pour cent de la distance sur l'ellipsoïde : assez pour trier des lieux et afficher « 2.7 km »,
pas pour de l'arpentage.
$distance = $montreal->distanceTo($quebec);
$distance->meters; // 233029.3
$distance->inKilometers(); // 233.03
$distance->inMiles(); // 144.8
Distance vaut zéro mètre ou plus, et est finie ; kilometers() et miles() en construisent une, isShorterThan() et
compare() les ordonnent.
Trouver des lieux près d'un point
Une base de données trouve des lieux près d'un point en deux étapes : la zone englobante restreint la recherche sur un index, puis la distance exacte garde ceux qui sont vraiment à portée.
$box = BoundingBox::around($here, Distance::kilometers(10));
// WHERE latitude BETWEEN :south AND :north AND longitude BETWEEN :west AND :east
$near = array_filter($candidates, static fn (Store $store): bool => $store->position->distanceTo($here)->meters <= 10_000);
Près d'un pôle, ou quand la zone traverserait l'antiméridien, elle prend toutes les longitudes : la requête lit une bande plus large, et la distance exacte décide quand même.