Windows Phone Location API
本文关键字:API Location Phone Windows | 更新日期: 2023-09-27 17:52:51
我正在开发一个基于位置的社交网络应用程序,并使用高精度的geocoordinatewatcher和20m的运动阈值来获取用户的位置。我的问题是关于定位的频率。从文档中,我发现移动阈值为20米意味着如果当前位置距离前一个位置改变事件的位置20米远,则不会触发位置改变事件。这表明位置修复仍然发生,但它们不会触发事件处理程序,如果<20m。那么设备如何决定多久执行一次定位修复?改变移动阈值会改变这一点吗?任何我可能错过的额外文档都是欢迎的!
谢谢!
我想你是想知道如何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响应式扩展和igeopotionwatcher对我来说非常有效。
http://msdn.microsoft.com/en-us/data/gg577609.aspx对我来说,这听起来像是如果当前位置距离前一个位置> 20米就会触发事件。
如果有办法改变阈值,那似乎会触发不同,但最大分辨率可能是20米,因为这通常是卫星的最大分辨率,如果我没记错的话,不确定。