views:

2349

answers:

1

Hello...

So: I have the following function, adapted from a formula found online, which takes two lat/lon coordinates and finds the distance between them in miles (along a spherical Earth):

public static double distance (double lat1, double lon1, double lat2, double lon2) {
     double theta = toRadians(lon1-lon2);
     lat1 = toRadians(lat1);
     lon1 = toRadians(lon1);
     lat2 = toRadians(lat2);
     lon2 = toRadians(lon2);

     double dist = sin(lat1)*sin(lat2) + cos(lat1)*cos(lat2)*cos(theta);
     dist = toDegrees(acos(dist)) * 60 * 1.1515 * 1.609344 * 1000;

     return dist;
    }

As far as I can tell this works just fine.

What I need is a second function which, using the exact same model of the Earth's geometry, takes a single lat/lon pair [A], a heading, and a distance, and outputs a new lat/lon pair [B] such that if you started at point [A], and traveled the given distance at the given heading, you'd wind up at point [B].

This is where the fact that my geometry skills have left me entirely comes into play :)

Any help would be much appreciated!

Thanks, -Dan

+6  A: 

I get most of those types of formulas from The Aviation Formulary

The formula he gives is:

Lat/lon given radial and distance A point {lat,lon} is a distance d out on the tc radial from point 1 if:

 lat=asin(sin(lat1)*cos(d)+cos(lat1)*sin(d)*cos(tc))
 IF (cos(lat)=0)
    lon=lon1      // endpoint a pole
 ELSE
    lon=mod(lon1-asin(sin(tc)*sin(d)/cos(lat))+pi,2*pi)-pi
 ENDIF

This algorithm is limited to distances such that dlon < pi/2, i.e those that extend around less than one quarter of the circumference of the earth in longitude. A completely general, but more complicated algorithm is necessary if greater distances are allowed:

    lat =asin(sin(lat1)*cos(d)+cos(lat1)*sin(d)*cos(tc))
     dlon=atan2(sin(tc)*sin(d)*cos(lat1),cos(d)-sin(lat1)*sin(lat))
     lon=mod( lon1-dlon +pi,2*pi )-pi

Note that he's using "tc" to stand for true course (in radians clockwise from North) and the distances he gives are in radians of arc along the surface of the earth. This is explained (along with formulas to convert back and forth from nautical miles) in the first section of the Formulary. Also, check out the "Implementation Notes" and "Worked Examples" on that page.

Paul Tomblin
[preparing to lay bare my ignorance of all things geospatial]What exactly does "out on the tc radial" mean? If I went "out on the 90 degree radial", does that mean that I travel East?
DanM
Yes. Sorry, much of the terminology on the page is aviation related. You should read the first part of the page where he explains that the angles and distances are in radians, too.
Paul Tomblin
"tc" stands for "true course". Also check out that page's "worked examples" and "implementation notes".
Paul Tomblin
Thanks! Much appreciated.
DanM
Dan, did you get a function for the second thing? I am in desperate need for one!
Lee Armstrong