java - 更正我计算两点之间大圆距离的算法

标签 java algorithm

我使用以下算法计算两点之间的距离,但它产生了不合理的结果。我哪里错了?

private static double distFrom(double latA, double lngA, double latB, double lngB) {
    double pk = 180/3.14169;

    double a1 = latA / pk;
    double a2 = lngA / pk;
    double b1 = latB / pk;
    double b2 = lngB / pk;

    double t1 = Math.cos(a1)*Math.cos(a2)*Math.cos(b1)*Math.cos(b2);
    double t2 = Math.cos(a1)*Math.sin(a2)*Math.cos(b1)*Math.sin(b2);
    double t3 = Math.sin(a1)*Math.sin(b1);
    double tt = Math.acos(t1 + t2 + t3);

    return 3959*tt;
}

最佳答案

用 Math.PI 替换 3.14169 会有所改善,因为 PI 的第一位数字是 3.14159

此外,还有很多算法。尝试 http://www.geodatasource.com/developers/java这将为您提供英里、公里和海里的答案。

关于java - 更正我计算两点之间大圆距离的算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29775093/

相关文章:

java - 在 Java 中复制复杂的对象层次结构

java - 如何设置 JTable 列和行的颜色?

algorithm - 将 2D 平面转换为 3D 模型

python - Python如何处理检查 'if object in list'

arrays - 给定一个数字数组,形成一个子集,使其可以表示(允许添加数字)给定数组中的任何数字

algorithm - 算法和伪代码的核心区别是什么?

java - 是否可以将事件溯源与 StAX XML 事件序列一起使用

java - Cassandra 异常

java - JFreeChart 中的 LogAxis 上未显示小刻度

algorithm - 扫雷板 "opening up"