Как WP7 CompassReading определяет TrueHeading из MagneticHeading? - PullRequest
0 голосов
/ 23 февраля 2012

Я установил код из Как: получить данные с датчика Compass для Windows Phone на разблокированный для меня телефон HTC Trophy 7 под управлением Mango.

Возвращаемое магнитное направление на север кажется правильным. Я сравнил его с традиционным компасом и приложением для компаса на iPhone, и его заголовок более или менее одинаков - «дай или получи».

Значение, возвращаемое из CompassReading. TrueHeading , однако, похоже, значительно отключено.

Для моего местоположения я посмотрел магнитное склонение как:

Широта: 41 ° 22 '36,5 "ю.ш. Долгота: 173 ° 16 '34,9 "в.д. Магнитное склонение: 22 ° 2 'ВОСТОК Склонение положительно Наклон: -66 ° 49 ' Напряженность магнитного поля: 56492,9 нТ

Где, когда телефон показывает магнитное склонение около 130 ° восточной долготы.

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

Как значение TrueHeading устанавливается телефоном / фреймворком?

Нужно ли что-то делать со службами locaiton, чтобы можно было определить правильное значение?

Я пытался попросить HTC о поддержке , но они указали, что это, вероятно, проблема с ОС.

Я также задавал аналогичный вопрос на Microsoft Ответы - HTC Trophy 7 не может правильно определить истинный север при использовании компаса

Ответы [ 3 ]

2 голосов
/ 24 февраля 2012

Мы потратили много времени на изучение различных значений и их значения.Я бы посоветовал сравнить результаты, которые вы получаете от своего приложения, с другими приложениями на рынке, которые показывают направление на север.например, HeadsUpCompass (наш), Compass VO, Compass 7 были те, которые я проверил aganst.

Мой опыт показал, что CompassReading было далеко, когда телефон не был плоским.Таким образом, мы использовали API Motion для определения направления работы телефона, когда телефон в вертикальном положении, и API Compass, когда телефон ровный.Я проверил код HUC, и мы используем compassSensor.CurrentValue.TrueHeading имеет заголовок.Это было проверено на HTC HD7, Mazza и Trophy (что у нас было в то время).

Надеюсь, это поможет

2 голосов
/ 06 декабря 2012

Могу поспорить, ты живешь в Южном полушарии.

Насколько я знаю, у Mango есть проблема с программным обеспечением возврата правильного склонения, что происходит только в южном полушарии .

Это было какое-то время, но, к сожалению, патча или исправления нет ...

Поскольку он работает в Северном полушарии, люди, живущие в Северном полушарии, утверждают, что он отлично работает на многих форумах.

0 голосов
/ 24 февраля 2012

Я начал с отслеживания происходящего, загрузив Microsoft.Devices.Sensors.dll в ILSpy из:

% Программные файлы% \ Справочные сборки \ Microsoft \ Framework \ Silverlight \ v4.0 \ Profile \ WindowsPhone71 \ Microsoft.Devices.Sensors.dll

В CompassReading есть внутренний конструктор, который получает значение TrueHeading из экземпляра CompassNativeSample.

internal CompassReading(CompassNativeSample nativeSample)
{
    this = default(CompassReading);
    this.Timestamp = nativeSample.header.TimeStamp;
    this.HeadingAccuracy = (double)nativeSample.wErrorMargin;
    this.TrueHeading = (double)nativeSample.wBearing;
    this.MagnetometerReading = new Vector3(nativeSample.vecMagCalibrated.X, nativeSample.vecMagCalibrated.Y, nativeSample.vecMagCalibrated.Z);
    this.MagneticHeading = (uint)nativeSample.wBearing - nativeSample.dwDeclAngle;
}

Затем определяется MagneticHeading из TrueHeading (wBearing) и dwDeclAngle? Это немного смущает меня, так как MagneticHeading - тот, который кажется правильным.

Насколько я могу судить, CompassNativeSample проходит через COM-взаимодействие из SensorsNative.ddl. Там внизу все что-то вроде черного ящика.

...