【发布时间】:2013-01-11 19:06:07
【问题描述】:
我正在开发一个基于位置的社交网络应用程序,并且正在使用高精度的地理坐标观察器和 20m 的移动阈值来获取用户的位置。我的问题是关于位置修复的频率。从文档中,我收集到 20m 的移动阈值仅意味着如果当前位置距离上一个位置更改事件的位置 20m,则不会触发位置更改事件。这表明位置修复仍然会发生,但如果
谢谢!
【问题讨论】:
标签: c# windows-phone-7 geolocation
我正在开发一个基于位置的社交网络应用程序,并且正在使用高精度的地理坐标观察器和 20m 的移动阈值来获取用户的位置。我的问题是关于位置修复的频率。从文档中,我收集到 20m 的移动阈值仅意味着如果当前位置距离上一个位置更改事件的位置 20m,则不会触发位置更改事件。这表明位置修复仍然会发生,但如果
谢谢!
【问题讨论】:
标签: c# windows-phone-7 geolocation
我想您想了解 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 对我来说非常有效。
【讨论】:
在我看来,如果当前位置距离先前位置 > 20m 会触发事件......
如果有办法改变阈值,那似乎会以不同的方式触发,但最大分辨率可能是 20m,因为这通常是卫星的最大分辨率,如果我没记错的话,不确定。
【讨论】: