0

我正在开发一个基于位置的社交网络应用程序,并且正在使用高精度的地理坐标观察器和 20m 的移动阈值来获取用户的位置。我的问题是关于位置修复的频率。从文档中,我收集到 20m 的移动阈值仅意味着如果当前位置距离上一个位置更改事件的位置 20m,则不会触发位置更改事件。这表明位置修复仍然会发生,但如果 <20m,它们不会触发事件处理程序。然后设备如何决定多久执行一次位置修复?更改运动阈值是否会以任何方式改变这一点?欢迎任何我可能错过的额外文档!

谢谢!

4

2 回答 2

1

我想你想知道 MovementThreshold 是如何工作的以及如何设置它。

基本上你可以说:

public class MyClass
{
      private IGeoPositionWatcher<GeoCoordinate> _geoCoordinateWatcher;

      /// <summary>
        /// Gets the geo coordinate watcher.
        /// </summary>
        private IGeoPositionWatcher<GeoCoordinate> GeoCoordinateWatcher
        {
            get
            {
                if (_geoCoordinateWatcher == null)
                {
                    _geoCoordinateWatcher = new GeoCoordinateWatcher(GeoPositionAccuracy.High);
                    ((GeoCoordinateWatcher)_geoCoordinateWatcher).MovementThreshold = 3;
                }
                return _geoCoordinateWatcher;
            }
        }
}

你可能有的其他地方

DispatcherTimer currentSpeedTimer = new DispatcherTimer();
            currentSpeedTimer.Interval = new TimeSpan(0, 0, 1);
            currentSpeedTimer.Tick += (sender, e) =>
            {
                if (this.GeoCoordinateWatcher.Position.Location.HorizontalAccuracy < 10)
                {
                    if (DateTime.Now - this.GeoCoordinateWatcher.Position.Timestamp.DateTime > new TimeSpan(0, 0, 2))
                    {
                        CurrentSpeed = 0;
                    }
                    else
                    {
                        CurrentSpeed = double.IsNaN(this.GeoCoordinateWatcher.Position.Location.Speed) ? 0 : this.GeoCoordinateWatcher.Position.Location.Speed;
                    }
                }
            };
            currentSpeedTimer.Start();

还值得指出的是,我发现使用 .NET Reactive Extensions 和 IGeoPositionWatcher 对我来说效果非常好。

http://msdn.microsoft.com/en-us/data/gg577609.aspx

于 2013-01-11T19:48:37.050 回答
0

在我看来,如果当前位置距先前位置 > 20m 会触发事件。

如果有办法改变阈值,那似乎会以不同的方式触发,但最大分辨率可能是 20m,因为这通常是卫星的最大分辨率,如果我没记错的话,不确定。

于 2013-01-11T19:22:50.090 回答