我正在为 WinPhone 8 编写 POC(我有一个运行 8.1 版本的诺基亚 928)。
我正在使用的功能之一是 GeoLocator,我注意到一些奇怪的行为。我的应用程序获取您当前的位置,然后跟踪您的移动并计算两点之间的距离。奇怪的行为是我坐着不动,而 PositionChanged 事件正在触发!是什么赋予了?我还没有移动,我的应用程序已经说离原点的距离和我当前的位置是 ~9 米。
这是 GPS 的正常行为吗?如果是这样,推荐的处理方法是什么?
以下是我的 GeoLocator 的设置方式:
_Geolocator = new Geolocator();
_Geolocator.DesiredAccuracy = PositionAccuracy.High;
_Geolocator.MovementThreshold = 5;
_Geolocator.ReportInterval = 1000;
我有一个按钮,可以获取当前位置并启动位置更改事件(为简洁起见截取代码):
Geoposition position = await _Geolocator.GetGeopositionAsync();
_trackLocation = true;
_currentLocation = position;
OrigLongitude = _currentLocation.Coordinate.Longitude;
OrigLatitude = _currentLocation.Coordinate.Latitude;
_Geolocator.PositionChanged += _Geolocator_PositionChanged;
Message = "tracking location";
和 PositionChanged 事件:
_currentLocation = args.Position;
//calculate the distance
double d = _pointTracker.DistanceTo(_currentLocation.Coordinate.Latitude, _currentLocation.Coordinate.Longitude);
double accuracy = _currentLocation.Coordinate.Accuracy;
if (true == show.Contains("tracking X"))
{
show = "tracking Y " + accuracy.ToString();
}
else
{
show = "tracking X " + accuracy.ToString();
}
DispatcherHelper.CheckBeginInvokeOnUI(() => { Distance = d; });
DispatcherHelper.CheckBeginInvokeOnUI(() => { Message = show; });
DispatcherHelper.CheckBeginInvokeOnUI(() => { Longitude = _currentLocation.Coordinate.Longitude; });
DispatcherHelper.CheckBeginInvokeOnUI(() => { Latitude = _currentLocation.Coordinate.Latitude; });
显示垃圾只是让我看到一条消息,表明事件正在触发。唯一感兴趣的是我返回的 GPS 精度(通常约为 3 米,在门内为 9 米)。
任何方向或帮助将不胜感激。TIA