Windows Phone GeoCoordinateWatcher 上相同物理位置的不同 GPS 位置读数
Posted
技术标签:
【中文标题】Windows Phone GeoCoordinateWatcher 上相同物理位置的不同 GPS 位置读数【英文标题】:Different GPS Location Reading Of Same Physical Location on Windows Phone GeoCoordinateWatcher 【发布时间】:2013-06-07 06:28:37 【问题描述】:我正在像这样使用 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
如果我不改变我的位置,我如何才能在距离方面达到准确度?它不应该给我不同的坐标。
【问题讨论】:
它总是发生,还是只在开始时发生?我认为这可能会发生,因为传感器没有获得非常准确的数据。 @anderZubi:它不时发生。假设我正在寻找位置 10-15 分钟,我得到了很多读数,有些读数返回相同的纬度,但有些读数就像我上面的数据。 有时读数可能不是很准确。发生这种情况的原因是传感器从较少的卫星、附近的建筑物、天气状况... 我在手机上发现了同样的问题。你最后是怎么解决这个问题的? 嗨,我需要提高我的阈值。它取决于@您所在的位置。你正在从哪个 GPS 获取位置。要么你是从手机信号塔得到的,要么你的手机 GPS 有多准确。所以有很多因素 【参考方案1】:这表明 GPS 设备非常糟糕。 你得到 570m 的跳跃,这不应该是 GPS 信号的情况。 确保该位置仅来自 GPS(如果您不在乎,在 android 和 ios 上,位置也可能来自 wifi 定位服务的蜂窝塔)。 还要检查第一个位置的时间戳,并将其与系统时间进行比较,以确保它不是被缓存的旧位置。
当您站立时,GPS 的坐标移动到 30m 是正常的。 因此,一些智能手机制造商启用了“静止”过滤器。 看来您必须编写自己的“静止”过滤器。
最简单的就是读取location.getSpeed():如果超过5km/h就取位置,否则忽略。 (这适用于车辆,但不适用于步行)
同样重要的是,坐在靠近窗户的办公桌上,您的 Gps 信号可能最差。最好出去测试一下。
【讨论】:
【参考方案2】:我认为您的阈值设置是“红鲱鱼”。您的阈值 2 表示“除非我从上一个读数移动超过 2m,否则不要向我报告。”这就是你所看到的。阈值设置不是问题或解决方案。
正如AlexWien 建议的那样,您可能无法仅根据 GPS 获取位置,为确保仅使用 GPS,您需要将 GeoCoordinateWatcher 的 DesiredAccuracy 属性设置为“高”。
如果问题仍然存在(并且希望在较小程度上持续存在),那么我建议它与 GPS 修复的质量有关。也许您应该检查 PostionChanged EventArgs 中 GeoCoordinate 的 HorizontalAccuracy 和 VerticalAccuracy 值。
这些值较高表示 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 噪声的位置更新。
【讨论】:
以上是关于Windows Phone GeoCoordinateWatcher 上相同物理位置的不同 GPS 位置读数的主要内容,如果未能解决你的问题,请参考以下文章
Windows Phone 应用程序仅适用于 Windows Phone 7?
windows phone 8 和 10 的 windows phone 应用程序开发
是否可以将 Windows Phone App 项目转换为 Windows Phone 类库?
Windows Phone 8.0 DLL 是不是与 Windows Phone 8.1 应用程序兼容?
VS2010 Express for Windows Phone 有中文吗?那里有下载?官方的Windows Phone Developer Tools 是英文版