Zamieszczając w ramach aplikacji jakieś mechanizmy wykorzystujące mapę i geolokalizację, może zajść konieczność zaimplementowania funkcjonalności obliczającej odległość pomiędzy dwoma punktami, na podstawie ich współrzędnych geograficznych.
Niniejsza funkcja (formuła Haversine) oblicza na podstawie koordynatów dwóch punktów odległość między nimi i zwraca ją w metrach.
/**
* Funkcja zwraca wartość odległości
* pomiędzy punktami w metrach
*
* @param array $aPoint
* @param array $bPoint
*
* @return number
*/
public function getDistanceInMeters(array $aPoint, array $bPoint)
{
$earthRadius = 6371000;// promień Ziemi w metrach
$diffLat = $aPoint['latitude'] - $bPoint['latitude'];
$diffLng = $aPoint['longitude'] - $bPoint['longitude'];
$a = sin($diffLat / 2) * sin($diffLat / 2) + cos($bPoint['latitude']) * cos($aPoint['latitude']) * sin($diffLng / 2) * sin($diffLng / 2);
$b = 2 * asin(sqrt($a));
// $b = 2 * atan2( sqrt($a), sqrt(1-$a) );
$distance = round(($earthRadius * $b), 2);
return $distance;
}//end getDistanceInMeters
Powyższa funkcję można oczywiście rozszerzyć o zwracanie wyniku w milach lub kilometrach. Wykorzystanie zależy od funkcjonalności. Najczęściej chyba znajduje zastosowanie w momencie obliczania odległości do jakiegoś punktu na mapie, jako punkt startu przyjmując naszą bieżącą lokalizację. Krótka funkcja, algorytm znany, a jakże przydatna w wielu aplikacjach. Warto jednak pamiętać, że podana odległość jest odległością bezwzględną pomiędzy punktami. Nie zwraca odległości pomiędzy punktami, gdy poruszamy się np. po jakiejś trasie (ulice)
