我试着修改一个公式,得到2 lat或2 lon之间的距离,这将转换成x,y坐标。
下面的代码/公式(哈弗森)给出了斜边(两个有Angular 的点之间的直接距离)
但是我想得到x,y坐标,也只使用纬度和经度。因为这些是直线,所以Angular 应该无关紧要。
一种方法是将两个纬度都设置为零-这将给出经度距离(反之亦然)-但是它需要我调用相同的函数3次:
1表示直接距离,1表示x距离,1表示y距离
有没有什么方法可以让我修改下面的代码,一次有效地计算所有3个,并将其作为数组返回[x\u dis,y\u dis,direct\u dist]
private static double distance(double lat1, double lon1, double lat2, double lon2, String unit) {
double theta = lon1 - lon2;
double dist = Math.sin(deg2rad(lat1)) * Math.sin(deg2rad(lat2)) + Math.cos(deg2rad(lat1)) * Math.cos(deg2rad(lat2)) * Math.cos(deg2rad(theta));
dist = Math.acos(dist);
dist = rad2deg(dist);
dist = dist * 60 * 1.1515;
if (unit == "K") {
dist = dist * 1.609344;
} else if (unit == "N") {
dist = dist * 0.8684;
}
return (dist);
}
private static double deg2rad(double deg) {
return (deg * Math.PI / 180.0);
}
private static double rad2deg(double rad) {
return (rad * 180 / Math.PI);
}
1条答案
按热度按时间hxzsmxv21#
我能看到的最好的方法是创建一个函数,调用它三次并返回每个值。
这应该使用您现有的功能,没有问题。通过将两个点的long或lat设置为0,我们可以计算出lats或long之间的距离。该代码未经测试,应视为伪代码。