API ориентации мобильных устройств HTML 5: значение альфа-канала (компаса) не указывает на север

Альфа-значение в следующем фрагменте кода должно варьироваться от 0 до 360 в зависимости от поворота устройства:

window.addEventListener('deviceorientation', function(eventData) {
    var LR = eventData.gamma;
    var FB = eventData.beta;
    var DIR = eventData.alpha;

    deviceOrientationHandler(LR, FB, DIR);
});

Это изменение должно зависеть от направления ветра. Для этого в устройстве используется магнитометр/компас.

Когда я тестировал это на iPad 3, я столкнулся со следующей проблемой:

Он варьируется от 0 до 360, но относительным образом. Страница показывает 0 при загрузке, а затем варьируется от 0 до 360. Но когда устройство поворачивается и страница обновляется, она снова начинается с отображения 0, а затем варьируется между этими значениями.

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

Эти источники указывают, что API должен быть способен на это:

html5rocks

И этот:

W3C

А вот пример, где «направление» должно быть равно 0, если смотреть на север (или, по крайней мере, возвращать согласованное значение):

страница html5rocks содержит пример (ctrl + f и «попробовать»). Невозможно опубликовать более 2 URL-адресов

Это правильный способ указать направление ветра, на которое смотрит устройство? Мне нужно использовать это в сочетании с Google Maps Api.

И, наконец, я знаю, что для Ipad 3 есть приложения с компасом, поэтому устройство должно это делать.

Я сбит с толку :)


person matthiasdv    schedule 23.05.2012    source источник
comment
Документация показывает умный webkitCompassHeading. По сути, это реализация альфа-версии Apple, как описано в этом документе: lists.w3.org/Archives/Public/public-geolocation/2011Jul/. Если я правильно понимаю; альфа указана так, как я ее интерпретировал и как я хочу ее использовать, но ей не хватает реализации? Однако, чтобы исправить это, Apple придумала временное решение, верно?   -  person matthiasdv    schedule 24.05.2012


Ответы (3)


Согласно W3C:

Реализации, которые не могут предоставить абсолютные значения для трех углов, могут вместо этого предоставлять значения относительно некоторой произвольной ориентации, поскольку это все еще может быть полезно. В этом случае для свойства absolute должно быть установлено значение false. В противном случае для свойства absolute должно быть установлено значение true.

person Ali Shakiba    schedule 08.03.2014

Это старый вопрос, но из-за некоторых изменений (обновлений браузера) в последние годы у меня была такая же проблема. Есть два способа решить это:

Абсолютная ориентация устройства

https://developers.google.com/web/updates/2016/03/device-orientation-changes

(работает для Opera, Chrome, Maxthon на Android)

Ориентация устройства с калибровкой

Проверьте компас-север с помощью движения устройства или с движением watchLocation HTML5

person Danu S    schedule 12.12.2016

В Mobile Safari (iOS) альфа-канал основан на том, в каком направлении указывало устройство при первом запросе ориентации устройства. Поэтому, когда вы активируете прослушиватель ориентации устройства, когда ваш iPad показывает Восток, тогда альфа равна 0 на Востоке. Чтобы получить правильное направление по компасу, вам нужно использовать параметр webkitCompassHeading на iOS. Все остальные браузеры принимают альфа-канал в качестве направления компаса. Чтобы поддержать их всех:

var compassdir;
if(eventData.webkitCompassHeading) {
  compassdir = eventData.webkitCompassHeading;
}
else compassdir = eventData.alpha;
person Jonny    schedule 06.12.2014