仅获取2个经度或2个纬度的距离(以英里为单位)

vmpqdwk3  于 2021-07-09  发布在  Java
关注(0)|答案(1)|浏览(338)

我试着修改一个公式,得到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);
    }
hxzsmxv2

hxzsmxv21#

我能看到的最好的方法是创建一个函数,调用它三次并返回每个值。

private static double[] getAlldistances(double lat1, double lat2, double long1, double long2, string unit){
    double latDistance = distance(lat1, 0, lat2, 0, unit);
    double longDistance = distance(0, long1, 0, long2, unit);
    double directDistance = distance(lat1, long1, lat2, long2, unit);
    return double int[3] {latDistance, longDistance, directDistance};
}

这应该使用您现有的功能,没有问题。通过将两个点的long或lat设置为0,我们可以计算出lats或long之间的距离。该代码未经测试,应视为伪代码。

相关问题