# Calculate a Destination Coordinate based on Distance and Bearing in PHP

Today I had to calculate a bunch of geo coordinates. All I had was a starting point and distance and direction of the destination. I googled a bit and soon found a nice description along with some JavaScript code.

Should be easy to port to PHP. Or so I thought. For some reason it simply didn't work. I got no errors but the resulting points were way off. A bit more googling found me a similar solution in python. But again my port didn't work.

When I started to carefully compare all internal variable values in each step between my port and the Python script, I finally found the problem. PHP's standard modulo operator `%` does only return integer remainders! Replacing the `%` with a call to fmod fixed everything. Learned a new thing today .

Here's the final code:

```/**
* Calculate a new coordinate based on start, distance and bearing
*
* @param \$start array - start coordinate as decimal lat/lon pair
* @param \$dist  float - distance in kilometers
* @param \$brng  float - bearing in degrees (compass direction)
*/
function geo_destination(\$start,\$dist,\$brng){
\$dist = \$dist/6371.01; //Earth's radius in km

\$lat2 = asin( sin(\$lat1)*cos(\$dist) +
cos(\$lat1)*sin(\$dist)*cos(\$brng) );
\$lon2 = \$lon1 + atan2(sin(\$brng)*sin(\$dist)*cos(\$lat1),
cos(\$dist)-sin(\$lat1)*sin(\$lat2));
\$lon2 = fmod((\$lon2+3*pi()),(2*pi())) - pi();

return array(toDeg(\$lat2),toDeg(\$lon2));
}