Windows Phone GeoCoordinateWatcher上相同物理位置的不同GPS位置读取

时间:2013-06-07 06:28:38

标签: c# windows-phone-7 geolocation gps geocoding

我正在使用Windows Phone GeoWatcher这样的坐标

     private GeoCoordinateWatcher _watcher = new GeoCoordinateWatcher(GeoPositionAccuracy.High);
     _watcher.MovementThreshold = 2; // Threshold Value
    _watcher.PositionChanged += Watcher_PositionChanged; //Registering Watcher Position Change Event
     _watcher.Start(); // Starting Watcher

//Watcher position Change Event
    private void Watcher_PositionChanged(object sender, GeoPositionChangedEventArgs<GeoCoordinate> e)
    {
      var coord = new GeoCoordinate(Convert.ToDouble(e.Position.Location.Latitude.ToString("0.00000").Replace(",", ".")), Convert.ToDouble(e.Position.Location.Longitude.ToString("0.00000").Replace(",", ".")));
}

但是我在同一个地方得到不同的经度和纬度值,即使我没有移动,我也设置了阈值。如果我没有错,那么阈值就意味着如果你至少覆盖那么多距离,它就会给你新的坐标。 由于当我静止不动时同一个地方的坐标值不同,我的应用程序在距离检查上失败了。因为它为两个坐标返回一个非零距离,并且在realality中我没有移动。

以下是我在同一地点拍摄的一些读​​数。为了更好的分析,我删除了一些0距离条目。

Previous POint 31.49858, 74.36393 New Points 31.49858, 74.36393 distance 0
Previous POint 31.49858, 74.36393 New Points 31.49345, 74.36399 distance 570.95
Previous POint 31.49345, 74.36399 New Points 31.4935, 74.36195  distance 193.671
Previous POint 31.4935, 74.36195  New Points 31.4933, 74.36207 distance 25.002
Previous POint 31.4933, 74.36207  New Points 31.49324, 74.36264 distance 54.502
Previous POint 31.49324, 74.36264 New Points 31.49345, 74.36399 distance 130.226
Previous POint 31.49345, 74.36399 New Points 31.49355, 74.36227 distance 163.603
Previous POint 31.49352, 74.36229 New Points 31.49349, 74.36231 distance 3.840
Previous POint 31.49345, 74.36235 New Points 31.49343, 74.36238 distance 3.613

如果我不改变位置,我如何才能获得距离的准确性?它不应该给我不同的坐标。

2 个答案:

答案 0 :(得分:1)

这显示了一个非常糟糕的GPS设备。 你得到570米的跳跃,这绝对不是GPS信号的情况。 确保该位置仅来自GPS(在Android和ios上,如果你不在乎,位置也可能来自wifi位置服务的单元塔)。 还要检查第一个位置的时间戳,并将其与系统时间进行比较,以确保它不是缓存的旧位置。

当您站立时坐标移动到30米是正常的GPS。 因此,一些智能手机制造商可以使用“静止”过滤器。 看来你必须编写自己的“静止”过滤器。

最简单的是读取location.getSpeed():如果它超过5km / h取位置,否则忽略它。 (这适用于车辆但不适合行走)

同样重要的是,在靠近窗户的桌子上坐着,你有最糟糕的Gps信号。最好出去测试。

答案 1 :(得分:0)

我认为您的阈值设置是“红鲱鱼”。您的2的阈值意味着“除非我从之前的读数移动超过2米,否则不要向我报告。”这就是你所看到的。阈值设置不是问题或解决方案。

由于AlexWien表示您可能无法仅根据GPS获取位置,因此只需确保GPS,您需要将DesiredAccuracyGeoCoordinateWatcher属性设置为高。

如果问题仍然存在(并且希望会在较小程度上存在),那么我会建议它是关于<强健> GPS定位的质量。也许您应该检查PostionChanged EventArgs中GeoCoordinate的HorizontalAccuracyVerticalAccuracy值。

这些值的较高值表示“差”GPS定位(例如 10表示坐标距离给定值 +/- 10米)。也许手机只能看到3颗卫星,或者它看到的卫星都在类似的天空中。所有这些都会降低修复精度。如果您想要高精度地跟踪,您应该考虑以满足您的需求的精确度来拒绝值。

我刚从我的一款支持GPS的WP8应用程序中捕获了日志(在光荣的Hull中),并获得了原始数据:

time 05/02/2014 18:38:05 +00:00 spd 0.75 coords 53.7589650973678, -0.365797486156225 [err 21, 48]
time 05/02/2014 18:38:07 +00:00 spd 0.25 coords 53.7589640915394, -0.36607475951314 [err 10, 24]
time 05/02/2014 18:38:08 +00:00 spd 0 coords 53.7589303962886, -0.366103509441018 [err 10, 24]
time 05/02/2014 18:38:09 +00:00 spd 0 coords 53.7589660193771, -0.365918939933181 [err 11, 24]
time 05/02/2014 18:38:10 +00:00 spd 0 coords 53.7590100243688, -0.365963699296117 [err 16, 32]

正如您在静止时所看到的那样,我可以在10-30米范围内获得准确度,并且速度在0-0.75mps范围内。使用它来过滤掉仅仅是GPS噪音的位置更新。