# 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 '20 at 17:47
• @Pere - I think so - it's a form used in a property description from about the 1960s, perhaps older. Mar 8 '20 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)
 316704
>
> #bearing, latitude and longitude in radians
> (br <- -52/180*pi)
 -0.907571211
> (latr <- 37/180*pi)
 0.6457718232
> (lonr <- -91/180*pi)
 -1.588249619
>
> #1 Distance to North and East in chains
> (east <- sin(br)*2.67)
 -2.103988712
> (north <- cos(br)*2.67)
 1.643816139
>
> #One degree in chains
> (deglat <- r*pi/180)
 5527.527554
> (deglon <- r*pi/180*cos(latr))
 4414.479788
>
> #2 distance in degrees
> (dlat <- north/deglat)
 0.0002973872356
> (dlon <- east/deglon)
 -0.000476610793
>
> #3 arriving point (GPS coordinates)
> (lat <- 37+dlat)
 37.00029739
> (lon <- -91+dlon)
 -91.00047661

• Awesome, thank you! Mar 8 '20 at 22:06