Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Get lat/long given current point, distance and bearing

Given an existing point in lat/long, distance in (in KM) and bearing (in degrees converted to radians), I would like to calculate the new lat/long. This site crops up over and over again, but I just can't get the formula to work for me.

The formulas as taken the above link are:

lat2 = asin(sin(lat1)*cos(d/R) + cos(lat1)*sin(d/R)*cos(θ))  lon2 = lon1 + atan2(sin(θ)*sin(d/R)*cos(lat1), cos(d/R)−sin(lat1)*sin(lat2)) 

The above formula is for MSExcel where-

asin          = arc sin()    d             = distance (in any unit)    R             = Radius of the earth (in the same unit as above)   and hence d/r = is the angular distance (in radians)   atan2(a,b)    = arc tan(b/a)   θ is the bearing (in radians, clockwise from north);   

Here's the code I've got in Python.

import math  R = 6378.1 #Radius of the Earth brng = 1.57 #Bearing is 90 degrees converted to radians. d = 15 #Distance in km  #lat2  52.20444 - the lat result I'm hoping for #lon2  0.36056 - the long result I'm hoping for.  lat1 = 52.20472 * (math.pi * 180) #Current lat point converted to radians lon1 = 0.14056 * (math.pi * 180) #Current long point converted to radians  lat2 = math.asin( math.sin(lat1)*math.cos(d/R) +              math.cos(lat1)*math.sin(d/R)*math.cos(brng))  lon2 = lon1 + math.atan2(math.sin(brng)*math.sin(d/R)*math.cos(lat1),                      math.cos(d/R)-math.sin(lat1)*math.sin(lat2))  print(lat2) print(lon2) 

I get

lat2 = 0.472492248844  lon2 = 79.4821662373 
like image 437
David M Avatar asked Aug 28 '11 16:08

David M


People also ask

How do you find lat long from distance and bearing?

Here is the formula to find the second point, when first point, bearing and distance is known: latitude of second point = la2 = asin(sin la1 * cos Ad + cos la1 * sin Ad * cos θ), and. longitude of second point = lo2 = lo1 + atan2(sin θ * sin Ad * cos la1 , cos Ad – sin la1 * sin la2)

How do you calculate lat long distance?

For this divide the values of longitude and latitude of both the points by 180/pi. The value of pi is 22/7. The value of 180/pi is approximately 57.29577951. If we want to calculate the distance between two places in miles, use the value 3, 963, which is the radius of Earth.


1 Answers

Needed to convert answers from radians back to degrees. Working code below:

import math  R = 6378.1 #Radius of the Earth brng = 1.57 #Bearing is 90 degrees converted to radians. d = 15 #Distance in km  #lat2  52.20444 - the lat result I'm hoping for #lon2  0.36056 - the long result I'm hoping for.  lat1 = math.radians(52.20472) #Current lat point converted to radians lon1 = math.radians(0.14056) #Current long point converted to radians  lat2 = math.asin( math.sin(lat1)*math.cos(d/R) +      math.cos(lat1)*math.sin(d/R)*math.cos(brng))  lon2 = lon1 + math.atan2(math.sin(brng)*math.sin(d/R)*math.cos(lat1),              math.cos(d/R)-math.sin(lat1)*math.sin(lat2))  lat2 = math.degrees(lat2) lon2 = math.degrees(lon2)  print(lat2) print(lon2) 
like image 82
David M Avatar answered Oct 21 '22 05:10

David M