# Formula to calculate the next coordinate given a coordinate, distance,direction and probably speed

I have this coordinates 52.3545362,4.7638767 which I got from a Google Maps search of Amsterdam.

URL

https://www.google.com/maps/place/Amsterdam,+Netherlands/@52.3545362,4.7638767,11z/data=!3m1!4b1!4m5!3m4!1s0x47c63fb5949a7755:0x6600fd4cb7c0af8d!8m2!3d52.3666969!4d4.8945398

Is there a formula I can use to get the coordinates if I were to move one meter from my current coordinates in any direction for instance,

What would be the new coordinates if I moved 1 meter westwards from the coordinate 52.3545362,4.7638767

If there is a way I can do this along known routes, it would be an added bonus.

• That's more of a cartesian plane if i am not wrong. Does what she is showing apply in a radar if i wanted to calculate probable next point – Gandalf Nov 2 '19 at 20:14
• There are many ways, for example: Turf.js library turfjs.org, online sites like geo.javawa.nl/coordcalc/index_en.html, doing your own calculation with formulas geomidpoint.com/destination/calculation.html – TomazicM Nov 2 '19 at 20:39
• Awesome. I shall have a look. I wish turfjs could be a py implementation. – Gandalf Nov 2 '19 at 20:48
• One meter is a tiny distance, only 0.9e-05 degrees to the north or south, and probably not more than 2.5e-05 east/west. The formal name to your task is the Forward (or Direct) Problem of Geodesy. Velocity is not part of the problem, only lat, lon, bearing, and distance. – Vince Nov 3 '19 at 2:37
• Thanks @Vince the Forward (or Direct) Problem of Geodesy is new term. Thanks for sharing. – Gandalf Nov 3 '19 at 15:36

## 1 Answer

I found a Python library that does what I want

def destination(point, distance, bearing):


https://pypi.org/project/geo-py/

but as for now it doesnt have asynio support.

For a plain Python function adapted from here http://www.movable-type.co.uk/scripts/latlong.html

R = ... Radius of earth ...
def great_circle_destination(lon1, lat1, bearing, dist):
lat2 = math.asin( math.sin(lat1)*math.cos(dist/R) +
math.cos(lat1)*math.sin(dist/R)*math.cos(bearing) )
lon2 = lon1 + math.atan2(math.sin(bearing)*math.sin(dist/R)*math.cos(lat1),
math.cos(dist/R)-math.sin(lat1)*math.sin(lat2)
return lon2, lat2