1

我正在像这样使用 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(",", ".")));
}

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

这是我在同一地点捕获的一些读数。为了更好地分析,我删除了一些 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

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

4

2 回答 2

1

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

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

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

同样重要的是,坐在靠近窗户的办公桌上,您的 Gps 信号可能最差。最好出去测试。

于 2013-06-07T14:47:32.627 回答
0

我认为您的阈值设置是“红鲱鱼”。您的阈值 2 表示“除非我从上一个读数移动超过 2m,否则不要向我报告。” 这就是你所看到的。阈值设置不是问题或解决方案。

正如AlexWien建议的那样,您可能无法仅根据 GPS 获取位置,要确保仅 GPS,您需要将GeoCoordinateWatcher的DesiredAccuracy属性设置为 High。

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

这些值较高表示 GPS 定位“差”(例如 10 表示坐标与给定值相差 +/-10m)。也许手机只能看到 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-30m 范围内,速度在 0-0.75mps 范围内。使用它来过滤掉只是 GPS 噪声的位置更新。

于 2014-02-05T16:03:19.180 回答