Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/grails/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用经纬度计算两个地方之间的距离java中的错误距离_Java - Fatal编程技术网

用经纬度计算两个地方之间的距离java中的错误距离

用经纬度计算两个地方之间的距离java中的错误距离,java,Java,我用哈弗森公式计算距离,但我得到了错误的距离,实际上谷歌地图的距离是8.1公里,但哈弗森公式显示的是4.06公里 private static final int EARTH_RADIUS = 6371; // Approx Earth radius in KM public static double distance(double startLat, double startLong, double endLat, double endLong) { double dLat =

我用哈弗森公式计算距离,但我得到了错误的距离,实际上谷歌地图的距离是8.1公里,但哈弗森公式显示的是4.06公里

private static final int EARTH_RADIUS = 6371; // Approx Earth radius in KM

public static double distance(double startLat, double startLong, double endLat, double endLong) {

    double dLat = Math.toRadians((endLat - startLat));
    double dLong = Math.toRadians((endLong - startLong));

    startLat = Math.toRadians(startLat);
    endLat = Math.toRadians(endLat);

    double a = haversin(dLat) + Math.cos(startLat) * Math.cos(endLat) * haversin(dLong);
    double c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));

    return EARTH_RADIUS * c; // <-- d
}

public static double haversin(double val) {
    return Math.pow(Math.sin(val / 2), 2);
}
private static final int EARTH_RADIUS=6371;//近似地球半径(单位:KM)
公共静态双距离(双斜杠、双斜杠、双斜杠、双斜杠){
双德拉特=数学托拉迪安((endLat-Startat));
double dLong=数学的toRadians((endLong-startong));
startLat=数学托拉迪安(startLat);
endLat=数学托拉迪安(endLat);
双a=haversin(dLat)+数学cos(startat)*数学cos(endLat)*haversin(dLong);
double c=2*Math.atan2(Math.sqrt(a),Math.sqrt(1-a));
return EARTH_RADIUS*c;//你的公式是正确的,这个问题是由于谷歌地图使用不当造成的
正如Tim在评论中所建议的,您需要查看点到点的距离,而不是道路距离

使用两个距离(17.451955、78.478187、17.442504、78.441323)得出4.06km:


8.1km可能是公路距离,而不是点到点的距离。你的公式可能不适用,但首先,谷歌地图的距离是点到点的距离,还是通过街道/道路行驶的距离?请注意,两者可能并不总是相同的。你能给出输入、预期输出和实际输出吗?另外,你不应该这样做地球半径不是以米为单位而不是以公里为单位吗?@sp00m如果需要以公里为单位的答案,你需要以公里为单位的地球半径。如果需要以米为单位的答案,你需要以米为单位的地球半径。可能是以公里为单位的重复,但也不起作用。你不是说你使用公式?事实上,我需要根据当前lat和long数据库中的保存餐馆的lat和long来接近餐馆。如果我使用谷歌api进行一次休息lat和lon,这很好,但是如果我需要比较50家餐馆,当我使用上面的代码时,我得到的是不同的距离,而不是相同的距离谷歌地图测试它,java代码给我4.04925264532218。它们的距离并不完全相同,但谷歌地图和你的代码都给我们4.05公里,这不是你想要的吗?嗨,Kepotx,实际上距离是8公里,但显示的是4.04公里