Я хочу создать компас/стрелку точно так же, как тот, который мы видим в AroundMe Mobile App, который точно указывает на вывод сопоставьте с моей мобильной позицией и обновите стрелку, когда я перемещаю телефон.
Я схожу с ума, чтобы понять, как это сделать, и я не могу найти руководство или учебник, которые немного объясняют это.
То, что я нашел в Интернете, является функцией несущей, и я создал директиву вокруг нее:
app.directive('arrow', function () {
function bearing(lat1, lng1, lat2, lng2) {
var dLon = (lng2 - lng1);
var y = Math.sin(dLon) * Math.cos(lat2);
var x = Math.cos(lat1) * Math.sin(lat2) - Math.sin(lat1) * Math.cos(lat2) * Math.cos(dLon);
var rad = Math.atan2(y, x);
var brng = toDeg(rad);
return (brng + 360) % 360;
}
function toRad(deg) {
return deg * Math.PI / 180;
}
function toDeg(rad) {
return rad * 180 / Math.PI;
}
return {
restrict: 'E',
link: function (scope, element, attrs) {
var arrowAngle = bearing(scope.user.position.lat, scope.user.position.lng, attrs.lat, attrs.lng);
element.parent().css('transform', 'rotate(' + arrowAngle + 'deg)');
}
};
});
Кажется, обновляет стрелку в направлении, но, к сожалению, это не правильное направление, потому что оно не вычисляется с использованием также мобильной позиции magneticHeading
.
Итак, я добавил плагин ngCordova
для Ориентация устройства, чтобы получить magneticHeading
, и теперь я точно не знаю, как его использовать и где находится функция bearing
.
$cordovaDeviceOrientation.getCurrentHeading().then(function(result) {
var magneticHeading = result.magneticHeading;
var arrowAngle = bearing(scope.user.position.lat, scope.user.position.lng, attrs.lat, attrs.lng, magneticHeading);
element.parent().css('transform', 'rotate(' + arrowAngle + 'deg)');
});
Я попытался добавить его в оператор return:
return (brng - heading) % 360;
или
return (heading - ((brng + 360) % 360));
Реализация этого кода с помощью наблюдателя Я вижу, что стрелка перемещается, но не в точном положении... Например, из моей позиции и булавки стрелка должна указывать на N и она указывает на E.
Всегда смотреть онлайн Я не могу найти учебник/вопрос, чтобы найти опору между lat/lng point
и magnetingHeading
.
Возможно, я близок к решению, но не могу идти дальше.
Я также пытался найти математические формулы, но даже есть огромная боль, чтобы понять и реализовать его.
Надеюсь, вы сможете помочь.