Search code examples
phpgpsheading

Determining course from coordinate to coordinate


I have two points (latitude1, longitude1) and (latitude2, longitude2). How do I determine in PHP the course needed to be taken from point 1 to point 2?

Course would be North, South, East, or West which would probably be converted from degrees?

Thanks!


Solution

  • // Function: latlon_bearing_great_circle
    // Desc:  This function calculates the initial bearing you need to travel
    //   from Point A to Point B, along a great arc.  Repeated calls to this
    //   could calculate the bearing at each step of the way.
    function latlon_bearing_great_circle($lat_a, $lon_a, $lat_b, $lon_b) {
    // Convert our degrees to radians:
    list($lat1, $lon1, $lat2, $lon2) =
        _deg2rad_multi($lat_a, $lon_a, $lat_b, $lon_b);
    
    // Run the formula and store the answer (in radians)
    $rads = atan2(
            sin($lon2 - $lon1) * cos($lat2),
            (cos($lat1) * sin($lat2)) -
                  (sin($lat1) * cos($lat2) * cos($lon2 - $lon1)) );
    
    // Convert this back to degrees to use with a compass
    $degrees = rad2deg($rads);
    
    // If negative subtract it from 360 to get the bearing we are used to.
    $degrees = ($degrees < 0) ? 360 + $degrees : $degrees;
    
    return $degrees;
    }
    
    // Function: _deg2rad_multi
    // Desc: A quick helper function.  Many of these functions have to convert
    //   a value from degrees to radians in order to perform math on them.
    function _deg2rad_multi() {
        // Grab all the arguments as an array & apply deg2rad to each element
        $arguments = func_get_args();
        return array_map('deg2rad', $arguments);
    }
    

    http://fil.ya1.ru/PHP_5_in_Practice/index.htm#page=0768667437/ch02lev1sec6.html