Lat/Lon + Distance + Heading --> Lat/Lon

匿名 (未验证) 提交于 2019-12-03 07:36:14

问题:

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

回答1:

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

    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.



标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!