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)