【问题标题】:How to get angle from point1 to point2 in earth如何在地球上从point1到point2获得角度
【发布时间】:2015-03-24 06:41:30
【问题描述】:

我花了很多时间上网寻找一种方法来做到这一点。通过我在下面的代码中编写的现有文档,但它没有显示正确的角度。 什么问题?

private double angleFromCoordinate(double lat1, double long1, double lat2,
            double long2) {

        double dLon = (long2 - long1);

        double y = Math.sin(dLon) * Math.cos(lat2);
        double x = Math.cos(lat1) * Math.sin(lat2) - Math.sin(lat1)
                * Math.cos(lat2) * Math.cos(dLon);

        double brng = Math.atan2(y, x);

        brng = Math.toDegrees(brng);

        brng %= 360;
        // brng = 360 - brng;

        return brng;
    }

更新 以下代码的结果:

int angle = (int) angleFromCoordinate(36.288024, 59.615656
                    , 39.033659, 48.662504);
angle is '58'

【问题讨论】:

  • 您能否举例说明您传递给此方法的一对纬度和经度,以及您期望的输出以及您真正得到的输出?
  • 我已经更新了问题
  • angleFromCoordinate的输入是纬度和经度而不是度数,我应该转换成半径吗?
  • 这些数字 - 36.288024、59.615656 等等 - 是度数。是的,您应该将它们转换为弧度,如我的回答中所述。

标签: java geography


【解决方案1】:

Math.cosMath.sin 方法采用多个弧度作为参数。您正在将学位传递给此方法。您需要在方法开始时将度数转换为弧度。

private double angleFromCoordinate(double lat1, double long1, double lat2,
        double long2) {
    double lat1Rad = Math.toRadians(lat1);
    double long1Rad = Math.toRadians(long1);
    double lat2Rad = Math.toRadians(lat2);
    double long2Rad = Math.toRadians(long2);

然后使用新变量lat1Rad 等等来完成剩下的数学运算。

【讨论】:

  • 有点小费但很有用,谢谢
猜你喜欢
  • 1970-01-01
  • 2014-06-24
  • 1970-01-01
  • 1970-01-01
  • 2014-09-11
  • 2019-05-18
  • 2011-07-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多