我正在开发位置跟踪应用。应用程序在开头显示当前位置,之后显示的值不正确,代码如下所示。它在地图上绘制一条线(动画线),跟踪我们的位置,并显示错误的路径。虽然设备处于不变的位置,但它显示的是错误的值。我错过了什么吗?
//code
public partial class Walk : PhoneApplicationPage
{
private GeoCoordinateWatcher _watcher = new GeoCoordinateWatcher(GeoPositionAccuracy.High);
private MapPolyline _line;
private DispatcherTimer _timer = new DispatcherTimer();
private long _startTime;
public Walk()
{
InitializeComponent();
_line = new MapPolyline();
_line.StrokeColor = Colors.Red;
_line.StrokeThickness = 5;
Map.MapElements.Add(_line);
_watcher.Start();
_timer.Start();
_startTime = System.Environment.TickCount;
_watcher.PositionChanged += Watcher_PositionChanged;
_timer.Interval = TimeSpan.FromSeconds(1);
_timer.Tick += Timer_Tick;
}
private void Timer_Tick(object sender, EventArgs e)
{
TimeSpan runTime = TimeSpan.FromMilliseconds(System.Environment.TickCount - _startTime);
timeLabel.Text = runTime.ToString(@"hh\:mm\:ss");
}
private double _kilometres;
private long _previousPositionChangeTick;
private void Watcher_PositionChanged(object sender, GeoPositionChangedEventArgs<GeoCoordinate> e)
{
var coord = new GeoCoordinate(e.Position.Location.Latitude, e.Position.Location.Longitude);
if (_line.Path.Count > 0)
{
var previousPoint = _line.Path.Last();
var distance = coord.GetDistanceTo(previousPoint);
var millisPerKilometer = (1000.0 / distance) * (System.Environment.TickCount - _previousPositionChangeTick);
_kilometres += distance / 1000.0;
paceLabel.Text = TimeSpan.FromMilliseconds(millisPerKilometer).ToString(@"mm\:ss");
distanceLabel.Text = string.Format("{0:f2} km", _kilometres);
caloriesLabel.Text = string.Format("{0:f0}", _kilometres * 65);
PositionHandler handler = new PositionHandler();
var heading = handler.CalculateBearing(new Position(previousPoint), new Position(coord));
Map.SetView(coord, Map.ZoomLevel, heading, MapAnimationKind.Parabolic);
}
else
{
Map.Center = coord;
}
_line.Path.Add(coord);
_previousPositionChangeTick = System.Environment.TickCount;
}
} }
}
答案 0 :(得分:2)
原始位置几十米内的“错误值”是不是?如果是这样,你可能会看到的只是GPS的不准确性。
GPS不是100%准确。即使您的设备没有移动,设备的GPS 认为的位置也可能会发生变化。实际上,您计算的位置可能根本不是基于真正的GPS,而是基于Wi-Fi或附近的手机信号塔(A-GPS),两者都不太准确。
有关详细信息,请参阅this StackOverflow thread。出于调试目的,我建议在用户界面的某处显示HorizontalAccuracy以查看GPS漂移是否符合预期。