Loading…

IT ZGODNIE Z WYMAGANIAMI

dokumentacje funkcjonalne, analiza biznesowa oprogramowania, definiowanie wymagań

Odległość między dwoma punktami na podstawie współrzędnych – obliczanie w PHP

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)