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

来源:开源中国社区 作者:oschina
  48 Grid.Row="2" Grid.ColumnSpan="4"

49 Click="StartButton_Click"

50 x:Name="StartButton"/>

51 </Grid>

52 </Grid>

53 </Grid>

54 </Grid>
 

GridUtilsis 是我几年前写的一个工具类,可方便定义网格(Grid)的行列属性(该类适用于 WPF,Silverlight 以及Windows Phone)。如果你依序从头编写这个应用,为了能使用地图,就得加入下面的命名空间定义:
 
1 xmlns:maps="clr-namespace:Microsoft.Phone.Maps.Controls;assembly=Microsoft.Phone.Maps"

在构建与运行程序之前,你得先开启地图功能。打开 '''WPAppManifest.xml''',找到Capabilities 标签然后选中 ID_CAP_MAP,这时ID_CAP_LOCATION也(自动)被选中:

Capabilites 用于决定你的应用中打算加入的手机功能,从而方便用户了解这个应用能做些什么。
选中以上功能后,构建运行程序你就可以看到如上所述的界面。

地图控件的其中一项改进即它是完全基于矢量的(Windows Phone 7中的地图是基于位图),这便使得地图在缩放时的过渡更加平滑,而且还可以进行3D变换(稍后将会看到)。对我们的路线跟踪应用而言,地图控件还有其他一些有用的功能,如步行与路标。 可以通过如下的代码设置:
1 <!-- the map -->

2 <maps:Map x:Name="Map"

3 PedestrianFeaturesEnabled="True"

4 LandmarksEnabled="True"

5 ZoomLevel="16"/>

经过以上设置,地图将会显示一些有用的东西,比如街道、路标等信息:

(顺便插一句,我可没想把这50行XAML算到我的代码总行数里哈 :-P)
Windows Phone 8中的地图还有很多新特性我没在这个程序里用到。比如你可以用下新的ColorMode属性,它能让你渲染一幅‘暗色模式’的地图以便在低光环境下查看,甚至可以让这个路线跟踪应用根据当天的时间自动选择ColorMode!

定时执行
当"Start"按钮按下后程序就开始的GPS接收器就开始追踪用户的位置来标注用户的行动轨迹,如果有兴趣的话还可以计算已经跑步的时间和统计各种数据,我们先从两项功能中简单的一项开始,定时执行.当我们点击开始按钮后 DispatcherTimer就开始执行了并且记录下按钮按下的时间,另一个timer定时器来更新显示已经执行了多长时间.
01 public partial class MainPage : PhoneApplicationPage

02 {

03 private DispatcherTimer _timer = new DispatcherTimer();

04 private long _startTime;

05  

06 public MainPage()

07 {

08 InitializeComponent();

09  

10 _timer.Interval = TimeSpan.FromSeconds(1);

11 _timer.Tick += Timer_Tick;

12 }

13  

14 private void Timer_Tick(object sender, EventArgs e)

15 {

16 TimeSpan runTime = TimeSpan.FromMilliseconds(System.Environment.TickCount -

_startTime);

17 timeLabel.Text = runTime.ToString(@"hh\:mm\:ss");

18 }

19  

20 private void StartButton_Click(object sender, RoutedEventArgs e)

21 {

22 if (_timer.IsEnabled)

23 {

24 _timer.Stop();

25 StartButton.Content = "Start";

26 }

27 else

28 {

29 _timer.Start();

30 _startTime = System.Environment.TickCount;

31 StartButton.Content = "Stop";

32 }

33 }

34 }

以上代码完成后,点击"start"按钮后定时器就开始执行了
 

位置追踪
下一步需要做的就是在计时器运行的同时来记录位置信息。Window Phone的API 库有GeoCoordinateWatcherclass 类, 其中的一个方法 PositionChangedevent 可以用来记录用户的位置和路径。 而后用MapPolyLine方法可以很简单地在地图上用地理坐标来渲染出用户的路径。每一次这个事件被激活,就会在地图上增加一个点,具体代码如下:
01 public partial class MainPage : PhoneApplicationPage

02 {

03 private GeoCoordinateWatcher _watcher = new GeoCoordinateWatcher

(GeoPositionAccuracy.High);

04 private MapPolyline _line;

05 private DispatcherTimer _timer = new DispatcherTimer();

06 private long _startTime;

07  


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

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


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