Статьи

31 день Windows 8 для HTML5 | День № 23: Компас

Эта статья является 23-м днем ​​в серии под названием « 31 день Windows 8» . Каждая из статей этой серии будет опубликована как для HTML5 / JS, так и для XAML / C # . Вы можете найти дополнительные ресурсы, загрузки и исходный код на нашем сайте .Компас

Сегодня мы поговорим о компасе. Хотя в прошлом мы говорили об одном датчике ( датчик ориентации ), это первая статья из многих, посвященная только поддерживаемым датчикам. Как веб-разработчик, это действительно что-то совершенно новое для меня, поскольку оно действительно выходит за рамки того, что мы обычно делаем. Сказав, что наш веб-мир меняется очень быстро.

Теперь, если вы когда-либо занимались разработкой телефонов, то это не является чем-то новым, так как наши телефоны (особенно те, которые сейчас на полке) обладают такими возможностями. Если вы ранее занимались разработкой Windows Phone, возможно, вы читали статью Джеффа о компасе Windows Phone , в которой представлены магнитные и истинные северные направления, а также данные вращения X, Y и Z.

В Windows 8 это отличается и предоставляет значительно меньше данных от датчика компаса. Фактически, мы получаем только значения, относящиеся к нашему заголовку, без учета данных вращения. Кроме того, вы обнаружите, что, поскольку мы создаем приложения для Windows 8, у нас будет широкий выбор датчиков. Сказав это, мы можем получить поворот от датчика ориентации, о котором мы уже говорили в день №2 . Я также проверил бы это быстрое начало извлечения матрицы кватернионов и вращения, если вы заинтересованы больше в вращении.

ОК, с шоу.

Написание кода для доступа к компасу

Компас, как и многие датчики, которые мы рассмотрим в течение следующих нескольких дней, на самом деле, компас очень доступен и прост в использовании. С помощью нескольких строк кода и одного обработчика событий мы можем очень быстро собирать богатые данные с устройства нашего пользователя. Вот весь код, необходимый для начала получения данных в реальном времени из моего простого приложения для компаса:

    var _trueNorth, _magNorth, _timestamp;

    function onReadingChanged(e) {
        var newReading = e.reading;
        _timestamp.innerText = newReading.timestamp;
        _magNorth.innerText = newReading.headingMagneticNorth.toFixed(2);
        
        if (newReading.headingTrueNorth != null) {
            _trueNorth.innerText = reading.headingTrueNorth.toFixed(2);
        }
    }

    function startCompass() {
        var compass = Windows.Devices.Sensors.Compass.getDefault();

        if (compass) {
            var minimumReportInterval = compass.minimumReportInterval;
            var reportInterval = minimumReportInterval > 16 ? minimumReportInterval : 16;
            compass.reportInterval = reportInterval;

            compass.addEventListener("readingchanged", onReadingChanged);
        }
    }

    function getDomElements() {
        _trueNorth = document.querySelector("#trueNorth");
        _magNorth = document.querySelector("#magNorth");
        _timestamp = document.querySelector("#timestamp");
    }

    app.onloaded = function () {
        getDomElements();
        startCompass();
    }

Чтобы объяснить приведенный выше код, в моем методе startCompass () я пытаюсь инициализировать мой объект Compass, и если он не равен нулю (имеется в виду, что на машине есть датчик компаса), я создаю обработчик событий для каждого раза, когда чтение компас меняется. (Если пользовательское устройство не стоит на месте, вероятно, вы будете постоянно получать новые показания.) В обработчике события onReadingChanged я затем назначаю наши три значения, HeadingMagneticNorth , HeadingTrueNorth и Timestamp, элементу, который я объявил в нашей разметке.

Вот и все. Однако, как вы, вероятно, видели, большинство датчиков, с которыми вы столкнетесь, не будут обеспечивать (как и мои) тоже значение HeadingTrueNorth , поэтому полагаться на HeadingMagneticNorth будет для вас более надежным значением.

Наконец, оба значения курса измеряются в градусах относительно соответствующего курса. Это означает, что вы увидите диапазон значений от 0 до 360, причем ноль — это значение, направленное прямо на север.

Резюме

Это был быстрый, но исчерпывающий взгляд на Compass в Windows 8. Мы увидели, что вы можете легко получить доступ к данным Compass с помощью обработчика событий, но мы получаем ограниченный объем данных с этого датчика, и ваш пробег будет отличаться от устройства к устройству.

Если вы хотите загрузить образец приложения, описанного в этой статье, щелкните значок ниже:

downloadHTML

Завтра мы рассмотрим датчик освещенности и то, как мы можем манипулировать нашим приложением, чтобы узнать, сидит ли пользователь в светлой или темной комнате.

downloadTheTools