calculating Lat and Long from Bearing and Distance
Asked Answered
B

2

23

I'm having a hard time wrapping my head around some Trigonometry. I am trying to deduce a destination latitude and longitude from a start lat and log and distance and bearing.

Fortunately, I found an amazing site which describes exactly the function I need: http://www.movable-type.co.uk/scripts/latlong.html " Destination point given distance and bearing from start point " I tried it in my java program but it is not working for me. I deployed it as the website said. Here is my code:

double dist = 150/6371;
double brng = Math.toRadians(90);
double lat1 = Math.toRadians(26.88288045572338);
double lon1 = Math.toRadians(75.78369140625);

double lat2 = Math.asin( Math.sin(lat1)*Math.cos(dist) + Math.cos(lat1)*Math.sin(dist)*Math.cos(brng) );
double a = Math.atan2(Math.sin(brng)*Math.sin(dist)*Math.cos(lat1), Math.cos(dist)-Math.sin(lat1)*Math.sin(lat2));
System.out.println("a = " +  a);
double lon2 = lon1 + a;

lon2 = (lon2+ 3*Math.PI) % (2*Math.PI) - Math.PI;

System.out.println("Latitude = "+Math.toDegrees(lat2)+"\nLongitude = "+Math.toDegrees(lon2));

But it shows the output is:

a = 0.0
Latitude = 26.882880455723377
Longitude = 75.78369140625

I am not getting where i am doing the mistake. Please anybody can help me to find out the problem.

Thanx in Advance. :-)

Bibliotaph answered 12/4, 2012 at 7:45 Comment(0)
S
19

Your problem is on your first line.

Try

double dist = 150.0 / 6371.0;

The reason is that 150/6371 gets calculated as 0, because it performs integer division (rather than floating point division). This is true even though the result is being stored in a double. You can force floating point division by making one of the two numbers a floating point literal.

Stop answered 12/4, 2012 at 7:50 Comment(4)
Can someone tell me whats that 150 is, is it miles? i am looking at implementing this same scenarioUnclasp
I think it's kilometers, given the earth radius.Huggins
I have used this to convert latitude and longitude :22.369131978392012,114.11357168108225 to startpoint latitude , longitude :0.39041812966877465,1.991668182365113 with moved distance (in KM) as 0.06574748992919921 Could you please tell me the way to calculate the distance between ?Durstin
150 is in kilometers definitely. See my answer below.Spitzer
S
14

if anyone needs a function that calculates point coordinates from other point moved by some distance, below is the working code. For me, it's just moving a point by some distance.

import static java.lang.Math.*;

void movePoint(double latitude, double longitude, double distanceInMetres, double bearing) {
    double brngRad = toRadians(bearing);
    double latRad = toRadians(latitude);
    double lonRad = toRadians(longitude);
    int earthRadiusInMetres = 6371000;
    double distFrac = distanceInMetres / earthRadiusInMetres;

    double latitudeResult = asin(sin(latRad) * cos(distFrac) + cos(latRad) * sin(distFrac) * cos(brngRad));
    double a = atan2(sin(brngRad) * sin(distFrac) * cos(latRad), cos(distFrac) - sin(latRad) * sin(latitudeResult));
    double longitudeResult = (lonRad + a + 3 * PI) % (2 * PI) - PI;

    System.out.println("latitude: " + toDegrees(latitudeResult) + ", longitude: " + toDegrees(longitudeResult));
}
  • latitude, longitude - entry point coordinates
  • distanceInMetres - distance that you want to move the point by
  • bearing - an angle, direction towards which you want to move the point. 0 is towards the North, 90 - East, 180 - South, 270 - West. And all between, i.e. 45 is North East.
  • earthRadiusInMetres - Earth radius in metres.

You can change the radius to 6371 if you want to have the input in kilometres or to miles if you want to have input in miles.

Spitzer answered 5/4, 2017 at 8:0 Comment(2)
I am having only x and y coordinates, How can I get lat and longLewie
Thanks a lot. Was stuck on this for quite a while.Triley

© 2022 - 2024 — McMap. All rights reserved.