1

我有下面的代码,它每 0.5 米触发 GeoCoordinateWatcher PositionChanged 事件。它可能会更少。但这就是我的要求。

问题是当我带着电话走路时,代码不会在每 0.5 米处触发事件,而是在 0.5 米后随机触发事件。有时当我快速移动时,它会立即一个接一个地触发几个事件。

任何人都可以帮助我如何确保它每 0.5 米准确地触发 positionchanged 事件。

            watcher = new GeoCoordinateWatcher(GeoPositionAccuracy.Default);
            if (watcher.Permission == GeoPositionPermission.Granted)
            {
                watcher.MovementThreshold = 0.5;//in meters
            }

            watcher.PositionChanged += new EventHandler<GeoPositionChangedEventArgs<GeoCoordinate>>(watcher_PositionChanged);    //   PositionChanged events occur whenever your position changes     
            watcher.StatusChanged += new EventHandler<GeoPositionStatusChangedEventArgs>(watcher_OnStatusChanged);
            watcher.Start();
4

3 回答 3

1

GeoPositionAccuracy 绝对应该设置为高。我相信 Default 将使用蜂窝/wifi 来确定位置,而 High 将使用手机上的 GPS。当您只是在寻找一般位置时,主要使用默认值。

于 2012-11-13T15:09:45.000 回答
0

我不完全确定,但我不知道您为什么使用以下代码:

if (watcher.Permission == GeoPositionPermission.Granted) {
watcher.MovementThreshold = 0.5;//以米为单位 }

为什么需要检查观察者的权限?为什么不继续并立即定义运动阈值?这可能有助于提高数据的速度。此外,您将 GeoPositionAccuracy 设置为默认值。如果您希望它更准确地触发,请使用GeoPositionAccuracy.High

于 2012-11-11T05:18:07.150 回答
0

此外,我很确定您还可以执行以下操作来获取水平和垂直精度数据的详细信息:

 e.Position.Location.HorizontalAccuracy.ToString();
 e.Position.Location.VerticalAccuracy.ToString();
于 2012-11-14T01:17:38.393 回答