一百行代码写一个WP8路线跟踪应用(3)

来源:开源中国社区 作者:oschina
  08 public MainPage()

09 {

10 InitializeComponent();

11  

12 //初始化一个line类用来记录路径

13 _line = new MapPolyline();

14 _line.StrokeColor = Colors.Red;

15 _line.StrokeThickness = 5;

16 Map.MapElements.Add(_line);

17  

18 _watcher.PositionChanged += Watcher_PositionChanged;

19  

20 //..计时器代码在此处省略..

21 }

22  

23 //.. 计时器代码此处被省略<span></span> ...

24  

25 private void StartButton_Click(object sender, RoutedEventArgs e)

26 {

27 if (_timer.IsEnabled)

28 {

29 _watcher.Stop();

30 _timer.Stop();

31 StartButton.Content = "Start";

32 }

33 else

34 {

35 _watcher.Start();

36 _timer.Start();

37 _startTime = System.Environment.TickCount;

38 StartButton.Content = "Stop";

39 }

40 }

41  

42  

43 private void Watcher_PositionChanged(object sender,

GeoPositionChangedEventArgs<GeoCoordinate> e)

44 {

45 var coord = new GeoCoordinate(e.Position.Location.Latitude,

e.Position.Location.Longitude);

46  

47 Map.Center = coord;

48 _line.Path.Add(coord);

49 }

50 }

上面的代码可以就可以实现把用户的路径层加到地图上,如下图所示。
 

PositionChanged 事件可以进一步的扩展成计算总运行距离,卡路里消耗和速度.使用GeoCoordinate.GetDistanceTo可以用来计算两个地点之间的距离:
01 private double _kilometres;

02 private long _previousPositionChangeTick;

03  

04 private void Watcher_PositionChanged(object sender,

GeoPositionChangedEventArgs<GeoCoordinate> e)

05 {

06 var coord = new GeoCoordinate(e.Position.Location.Latitude,

e.Position.Location.Longitude);

07  

08 if (_line.Path.Count > 0)

09 {

10 // find the previos point and measure the distance travelled

11 var previousPoint = _line.Path.Last();

12 var distance = coord.GetDistanceTo(previousPoint);

13  

14 // compute pace

15 var millisPerKilometer = (1000.0 / distance) * (System.Environment.TickCount -

_previousPositionChangeTick);

16  

17 // compute total distance travelled

18 _kilometres += distance / 1000.0;

19  

20 paceLabel.Text = TimeSpan.FromMilliseconds(millisPerKilometer).ToString(@"mm\:ss");

21 distanceLabel.Text = string.Format("{0:f2} km", _kilometres);

22 caloriesLabel.Text = string.Format("{0:f0}", _kilometres * 65);

23 }


时间:2013-01-22 08:27 来源:开源中国社区 作者:oschina 原文链接

好文,顶一下
(2)
100%
文章真差,踩一下
(0)
0%
------分隔线----------------------------


把开源带在你的身边-精美linux小纪念品
无觅相关文章插件,快速提升流量