Google Maps Javascript - вычисление направления и направление компаса для расчета направления лица

Используя функцию calculateHeading() для моей текущей позиции и точки назначения, я могу получить возвращаемый угол (в настоящее время он находится в диапазоне от -180 до +180).

heading = google.maps.geometry.spherical.computeHeading(
    currentLocation,
    destinationLocation
);

Я могу получить направление компаса также с помощью функции возврата альфы, которая дает мне угол поворота с севера.

alpha = null;
//Check for iOS property
if (event.webkitCompassHeading) {
    //window.confirm("iOS device - using webKit instead"); // report back that we are indeed on iOS
    alpha = event.webkitCompassHeading;
}
//non iOS
else {
    alpha = event.alpha;
}

var locationIcon = myLocationMarker.get('icon');
locationIcon.rotation = 360 - alpha;
myLocationMarker.set('icon', locationIcon);

Это дает мне угол, а затем помогает мне повернуть значок, чтобы я мог видеть, правильно ли я указываю.

Может ли кто-нибудь сказать мне код math/js, чтобы затем получить способ, которым я столкнулся с пунктом назначения, чтобы дать мне возвращаемый результат. Мне нужно знать, стою ли я перед пунктом назначения, а затем я могу видеть, смотрю ли я не в ту сторону и т. д.

Я попытаюсь использовать панорамирование веб-аудио, чтобы помочь людям указать правильный путь.

Спасибо

редактировать: вот изображение, которое может помочь прояснить. Я уверен, что это простой расчет, но я не могу понять введите здесь описание изображения


person Ashley James Brown    schedule 22.06.2015    source источник


Ответы (2)


Вычислить угол между двумя точками широты/долготы

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 = (brng + 360) % 360;
    brng = 360 - brng; // count degrees counter-clockwise - remove to make clockwise

    return brng;
}

=====================================================================

Использование API GoogleMap:

<script src="https://maps.googleapis.com/maps/api/js?v=3&sensor=false&libraries=geometry"></script>

var point1 = new google.maps.LatLng(lat1, lng1);
var point2 = new google.maps.LatLng(lat2, lng2);
var heading = google.maps.geometry.spherical.computeHeading(point1,point2);
person Biranchi    schedule 22.06.2017

Я думаю, что это просто математика, так как ..

diff(Lat)/diff(lng) = tan(alpha)

тогда я думаю, вы можете выяснить остальное?

обратите внимание, что курс может радикально измениться из-за проблемы с точностью GPS. Рассмотрите возможность использования как данных компаса, так и некоторых алгоритмов для облегчения аутлайнеры.

person kaho    schedule 22.06.2015
comment
Честно говоря, мозг мертв и, похоже, не может понять, как рассчитать углы в точках N и M. Я думаю, это потому, что возвращаемый курс составляет от -180 до 180, а компас возвращает от 0 до 360. - person Ashley James Brown; 24.06.2015
comment
@AshleyJamesBrown, вы когда-нибудь решали это? У меня также есть азимут и альфа-значение, но я не знаю, как их объединить, чтобы повернуть значок навигации в правильном направлении. - person jasan; 28.10.2016