Какая точная разница между азимутом (между 2 точками) и курсом / направлением и как их вычислить? - PullRequest
0 голосов
/ 23 января 2020

Я видел много ответов по расчету подшипника. Тем не менее, каков наилучший способ расчета пеленга между 2 точками с учетом широт, долгот и углов. Я получаю широты, долготы и углы от нашего бэкэнда.

Я пробовал это, используя LatLn:

private float bearing(com.google.android.gms.maps.model.LatLng latLng1,
                                      com.google.android.gms.maps.model.LatLng latLng2) {

    double PI = 3.14159;
    double lat1 = latLng1.latitude * PI / 180;
    double long1 = latLng1.longitude * PI / 180;
    double lat2 = latLng2.latitude * PI / 180;
    double long2 = latLng2.longitude * PI / 180;

    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);
    float bearng = (float) Math.atan2(y, x);
    bearng = (float) Math.toDegrees(bearng);
    bearng = (bearng + 360) % 360;

    if (bearng < 0) {
      bearng = bearng + 360;
    }

    return bearng;
}

Используя углы:

private float bearing(float fromAngle, float toAngle) {
    float diffInAngle = toAngle - fromAngle;
    if (diffInAngle < -180) {
        diffInAngle += 360;
    }
    if (diffInAngle > 180) {
        diffInAngle -= 360;
    }
    return diffInAngle + fromAngle;
}

Какой из них является правильный путь, если есть? Кроме того, как подшипник отличается от курса или направления?

Кажется, что есть небольшая разница, хотя согласно этому посту https://www.mathsteacher.com.au/year7/ch08_angles/07_bear/bearing.htm

...