Java 找到2 lat和lon点之间的距离。我用过这个公式,但答案并不是你们所期望的

Java 找到2 lat和lon点之间的距离。我用过这个公式,但答案并不是你们所期望的,java,Java,这份打印声明给了我4148.871894445495英里,而我通过谷歌地图查到它的距离是193英里。有人能解释为什么会这样吗 谢谢。你忘了转换成弧度: public double distance(double x, double y, double x2, double y2) { // r is earth’s radius (mean radius = 6,371km) double r = 6371e3; double toMile = 0.000621371;

这份打印声明给了我4148.871894445495英里,而我通过谷歌地图查到它的距离是193英里。有人能解释为什么会这样吗


谢谢。

你忘了转换成弧度:

public double distance(double x, double y, double x2, double y2) {
    // r is earth’s radius (mean radius = 6,371km)
    double r = 6371e3; 
    double toMile = 0.000621371;
    double latDiff = x2 - x;
    double lonDiff = y2 - y;

    // a is the square of half the chord length between the points
    double a = (Math.sin(latDiff/2) * Math.sin(latDiff/2)) + (Math.cos(x) * Math.cos(x2) * Math.sin(lonDiff/2) * Math.sin(lonDiff/2));

    // c is the angular distance in radians
    double c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a));

    // d is the distance between to points
    double d = r * c * toMile;

    return d;
}

System.out.println(distance(41.386263640000003, -81.494450689999994, 42.531041999999999, -82.90854831)); 

看看这里:

您是在问我们您是否使用了正确的配方?如果是的话,那么告诉我们你从哪里得到的公式你是在问我们你是否正确实施了这个公式?如果是这样,请向我们展示您实现的公式,以便我们可以将其与代码进行比较。--简言之,向我们展示你的代码所基于的公式。在纸上进行-然后调试并将程序的每个步骤与你在纸上所做的进行比较,找出差异的起点,然后也许你可以问一个更具体的问题。如果你不能在纸上完成,那么问题不在于编程,而在于数学。@Andreas这是我找到公式的地方。编辑问题并添加链接以澄清问题。另外,解释一下为什么你说距离是193英里,而链接上说距离是172.8公里,也就是107.4英里,这也符合173公里的距离,计算时你知道度和弧度之间的差异吗?这可能是其中的一部分。
 public double distance(double x, double y, double x2, double y2) {
        // r is earth’s radius (mean radius = 6,371km)
        double r = 6371e3;
        double toMile = 0.000621371;
        double latDiff = (x2 - x)*(Math.PI)/180;
        double lonDiff = (y2 - y)*(Math.PI)/180;;

        // a is the square of half the chord length between the points
        double a = (Math.sin(latDiff/2) * Math.sin(latDiff/2)) + (Math.cos(x) * Math.cos(x2) * Math.sin(lonDiff/2) * Math.sin(lonDiff/2));

        // c is the angular distance in radians
        double c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a));

        // d is the distance between to points
        double d = r * c * toMile;

        return d;
    }