# How to calculate gps location based on direction and distance?

I need to calculate the gps coordinates of a point "North 52° West 2.67 chains" from a known location. What's the process to make this calculation? If possible, start with 37N-91W.

There's an answer to this on Mathematics on a plane. That answer, plus knowing degrees/meter around my location will provide a sufficiently accurate answer for the short distances in my case. Given that, this question is probably a good candidate to be closed.

• I would like to make an example with your data, but I can't make sense of "North 52° West 2.67 chains". Does it mean a bearing of 52º measured counter-clockwise from North? – Pere Mar 8 at 17:47
• @Pere - I think so - it's a form used in a property description from about the 1960s, perhaps older. – Don Branson Mar 8 at 17:52

The answer in a plane you linked works rather well in a sphere provided that the distance you want to measure is tiny compared with both the radius of Earth and the distance to the nearest pole - and 2.67 chains is that tiny.

For the remaining of the answer I'll be assuming that the Earth is an sphere, which quite accurate unless you need great accuracy - that is, enough accurate for nearly anything except for surveying.

The first step is to convert your distance and direction to easting and northing distances - as the linked answer tells.

The second step is to convert those two distances to degrees latitude and longitude, and you only need to know that one degree latitude measures $$R_{Earth}\cdot\frac{\pi}{180}$$ and a degree longitude measures $$R_{Earth}\cdot\frac{\pi}{180}\cdot cos(latitude)$$.

As a final step, you just need to sum those angles to the latitude and longitude of your position.

> # Earth radius in chains
> (r <- 3958.8*80)
[1] 316704
>
> #bearing, latitude and longitude in radians
> (br <- -52/180*pi)
[1] -0.907571211
> (latr <- 37/180*pi)
[1] 0.6457718232
> (lonr <- -91/180*pi)
[1] -1.588249619
>
> #1 Distance to North and East in chains
> (east <- sin(br)*2.67)
[1] -2.103988712
> (north <- cos(br)*2.67)
[1] 1.643816139
>
> #One degree in chains
> (deglat <- r*pi/180)
[1] 5527.527554
> (deglon <- r*pi/180*cos(latr))
[1] 4414.479788
>
> #2 distance in degrees
> (dlat <- north/deglat)
[1] 0.0002973872356
> (dlon <- east/deglon)
[1] -0.000476610793
>
> #3 arriving point (GPS coordinates)
> (lat <- 37+dlat)
[1] 37.00029739
> (lon <- -91+dlon)
[1] -91.00047661

• Awesome, thank you! – Don Branson Mar 8 at 22:06