I would like to get an estimated location using lat/long coordinates and bearings at each of those coordinates using R.

In this case I would be approximating the location of a turkey nest that I have marked using radio telemetry by taking 5-8 bearings around the nesting hen so that the nest can be found after the hen has completed the incubation period and left.

Here is an example of what this might look like when plotted in google earth (northern most point not visible): enter image description here

Full list of coordinates and bearings for the above example:


1....473789, 4485636.......26

2....473755, 4485659.......50

3....473728, 4485717.......80

4....473730, 4485788.......134

5....473848, 4485866.......196

6....473926, 4485796.......236

7....473925, 4485702.......291

8....473850, 4485660.......326

  • 2
    Those coordinates are not lat/long but projected, metrical UTM coordinates. This means that you could use any common mathematical triangulation methods you find without caring for geodetic specialities. But since you have more than 3 measurements, you will need to fit them, maybe via Least Squares Regression. Nov 1, 2016 at 21:36
  • 1
    You may want to have a look at the sigloc package.
    – MickyT
    Nov 1, 2016 at 22:02

1 Answer 1


Here's one (probably very naive) way of doing it using the sigloc package.

Once the sigloc package is installed the following should work


df <- data.frame(
    Date = '1/11/2016',
    Observers = 'MickyT',
    GID = 1,
    Time = c(1,2,3,4,5,6,7,8),
    Easting = c(473789,473755,473728,473730,473848,473926,473925,473850),
    Northing = c(4485636,4485659,4485717,4485788,4485866,4485796,4485702,4485660),
    Azimuth = c(26,50,80,124,196,236,291,326)

receivers <- as.receiver(df)
turkey_nest <- locate(receivers)

turkeynest <-findintersects(receivers)
plot(receivers, bearings=TRUE, xlab="Easting",ylab="Northing", asp=1)
plot(turkey_nest, add=TRUE, errors=TRUE, badcolor=TRUE, xlab="Easting",ylab="Northing", asp=1)

When this is run the following plot is produced enter image description here and turkey_nest has the following data in it

         X       Y BadPoint Var_X Var_Y Cov_XY AngleDiff Date Time
1 473839.7 4485733        1     0     0      0         0    1    4

There is also a warning message produced for a bad point being detected.

  • This is great and just what I was looking for. The only thing I might add is a line with nest_location <- data.frame(x=mean(turkeynest$X),y=mean(turkeynest$Y)) since the coordinates themselves is also part of what I was going for.
    – Southard
    Nov 3, 2016 at 3:33
  • @Southard I've made a small change to the answer to use locate, rather than findintersects. This requires more information to be entered for the receivers data frame, but calculates the coordinates that you want.
    – MickyT
    Nov 3, 2016 at 21:17

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.