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

我正在使用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 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 

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

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

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

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

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

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

由于AlexWien建议您可能无法仅使用GPS获取位置,因此只需确保GPS,您需要将GeoCoordinateWatcher的DesiredAccuracy属性设置为高。

如果问题仍然存在(并且希望在较小程度上,但希望在较小程度上),那么我建议它是关于GPS修复质量 。 也许您应该检查PostionChanged EventArgs中GeoCoordinate的Horizo​​ntalAccuracy和VerticalAccuracy值。

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

我只是从我的一个GPS感知WP8应用程序(在辉煌的赫尔 )中捕获了日志并得到了这些原始数据:

 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.75毫秒范围内。 使用它来过滤掉仅仅是GPS噪音的位置更新。