android - как я могу получить степень азимута между двумя местоположениями?

Как сказано в заголовке, у меня есть текущее местоположение, и я хочу знать пеленг в градусах от моего текущего местоположения до другого местоположения. Я прочитал это post, является ли значение, возвращаемое location.getBearing() моим ответом?

Скажем проще: по картинке я ожидаю значение 45 градусов. foo


person user3143433    schedule 11.01.2014    source источник
comment
Что говорит вам документация по этому методу? На этот вопрос невозможно ответить, так как вы не сказали, почему вы считаете этот getBearing() не правильным методом.   -  person Simon    schedule 11.01.2014
comment
Использовать поплавковый подшипник = myLocation.bearingTo(otherLocation);   -  person NickT    schedule 11.01.2014


Ответы (3)


Location имеет метод подшипникTo: поплавковый подшипникTo(Расположение назначения)

Location from = new Location(LocationManager.GPS_PROVIDER);
Location to = new Location(LocationManager.GPS_PROVIDER);
from.setLatitude(0);
from.setLongitude(0);
to.setLongitude(10);
to.setLatitude(10);

float bearingTo = from.bearingTo(to);
person Vladimir    schedule 19.01.2015
comment
Этот метод дает мне смещение на 90 градусов в том же месте и месте с азимутом 180 градусов. - person ateebahmed; 28.10.2018

У меня возникли проблемы с этим, и мне удалось понять, как преобразовать C? подход к определению степени осанки.

Я вычислил это, используя 4 точки координат

Старт Локатор

Начальная долгота

Конечная широта

Конечная долгота

Вот код:

    protected double bearing(double startLat, double startLng, double endLat, double endLng){
    double latitude1 = Math.toRadians(startLat);
    double latitude2 = Math.toRadians(endLat);
    double longDiff= Math.toRadians(endLng - startLng);
    double y= Math.sin(longDiff)*Math.cos(latitude2);
    double x=Math.cos(latitude1)*Math.sin(latitude2)-Math.sin(latitude1)*Math.cos(latitude2)*Math.cos(longDiff);

    return (Math.toDegrees(Math.atan2(y, x))+360)%360;
}

Просто изменить имена переменных было необходимо.

Вывод пеленга в TextView

Надеюсь, это помогло!

person Bob21    schedule 06.03.2014
comment
Я пробовал то же самое, но получаю смещение на 90 градусов, я указал одинаковое местоположение для начала и конца, что должно дать мне 0 градусов, я также пробовал местоположение на 180 градусов, но результат тот же. - person ateebahmed; 28.10.2018

Вот код для расчета угла азимута между двумя точками (startPoint, endPoint):

public float CalculateBearingAngle(double startLatitude,double startLongitude, double endLatitude, double endLongitude){
    double Phi1 = Math.toRadians(startLatitude);
    double Phi2 = Math.toRadians(endLatitude);
    double DeltaLambda = Math.toRadians(endLongitude - startLongitude);

    double Theta = atan2((sin(DeltaLambda)*cos(Phi2)) , (cos(Phi1)*sin(Phi2) - sin(Phi1)*cos(Phi2)*cos(DeltaLambda)));
    return (float)Math.toDegrees(Theta);
}

Вызов функции:

float angle = CalculateBearingAngle(startLatitude, startLongitude, endLatitude, endLongitude);
person APP    schedule 16.05.2018