# 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 Nov 2, 2019 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 Nov 2, 2019 at 20:39
• Awesome. I shall have a look. I wish turfjs could be a py implementation. Nov 2, 2019 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. Nov 3, 2019 at 2:37
• Thanks @Vince the Forward (or Direct) Problem of Geodesy is new term. Thanks for sharing. Nov 3, 2019 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
``````