0

我已将代码从如何:从 Windows Phone 的指南针传感器获取数据安装到我的开发人员解锁的运行 Mango 的 HTC Trophy 7 手机上。

返回的磁北航向似乎是正确的。我将它与传统的指南针和 iPhone 指南针应用程序进行了比较,并且标题或多或少是相同的授予或获得学位。

CompassReading 返回的值。然而, TrueHeading似乎大大偏离了。

对于我的位置,我将磁偏角查找为:

纬度:41° 22' 36.5" S 经度:173° 16' 34.9" E 磁偏角:22° 2' 东偏角为正 倾角:-66° 49' 磁场强度:56492.9 nT

手机显示的磁偏角约为东 130°。

我不相信这是我对演示代码的实现导致了问题,因为我从市场上获得了许多其他应用程序的相同错误值。

手机/框架如何设置 TrueHeading 的值?

我是否需要对定位服务做一些事情才能确定正确的值?

我曾尝试向 HTC 寻求支持,但他们表示这可能是操作系统问题。

我还在Microsoft Answers 上问过类似的问题 - HTC Trophy 7 can't determine true north when using the compass

4

3 回答 3

2

我打赌你住在南半球。

据我所知,Mango 存在返回正确磁偏角的软件问题,该问题仅发生在南半球

已经有一段时间了,但不幸的是没有补丁或错误修复......

由于它在北半球有效,生活在北半球的人们声称它在许多论坛上都可以正常工作。

于 2012-12-06T18:56:24.870 回答
2

我们花了很长时间研究不同的读数以及它们的含义。我建议将您从您的应用程序中获得的结果与市场上为您提供北方方向的其他应用程序之一进行比较。例如 HeadsUpCompass(我们的)、Compass VO、Compass 7 是我检查过的那些。

我的经验是,当手机不平整时,CompassReading 就会消失。因此,我们使用 Motion API 来计算手机竖直时的手机航向,以及手机平放时的 Compass API。我检查了 HUC 的代码,我们使用的是 compassSensor.CurrentValue.TrueHeading 有标题。这在 HTC HD7、Mazza 和 Trophy(我们当时拥有的)上进行了测试。

希望这可以帮助

于 2012-02-23T21:56:22.403 回答
0

我已经开始通过将 Microsoft.Devices.Sensors.dll 从以下位置加载到 ILSpy 来跟踪正在发生的事情:

%Program Files%\Reference Assemblies\Microsoft\Framework\Silverlight\v4.0\Profile\WindowsPhone71\Microsoft.Devices.Sensors.dll

CompassReading 上有一个内部构造函数,它从 CompassNativeSample 的实例中获取 TrueHeading 值。

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;
}

然后从 TrueHeading (wBearing) 和 dwDeclAngle? 确定 MagneticHeading?这让我有点困惑,因为 MagneticHeading 似乎是正确的。

尽我所能告诉 CompassNativeSample 是通过 SensorsNative.ddl 的 COM 互操作来实现的。下面是一个黑盒子。

于 2012-02-23T20:16:39.073 回答