如何在 Windows Phone 8 中的地图中显示路线和方向

本文详细介绍了如何在Windows Phone 8应用中获取设备当前位置,并使用地图API实现从当前位置到目标地点的路线显示及方向指引。

如何在 Windows Phone 8 中的地图中显示路线和方向

此主题尚未评级 评价此主题

2012/11/14

适用于:仅限于 Windows Phone 8。

本主题介绍如何能够显示从手机的当前位置到 Windows Phone 8 地图中的指定位置的线路和方向。

获取手机的当前位置

  1. 在 Visual Studio 2012 Express for Windows Phone 中创建新的 Windows Phone 8 项目。

  2. 在 MainPage.xaml.cs 的 MainPage 类中添加以下代码以获取手机的当前位置。此代码将手机当前的位置坐标添加到 MyCoordinates

    C#
    public partial class MainPage : PhoneApplicationPage
    {
       List<GeoCoordinate> MyCoordinates = new List<GeoCoordinate>();
       
       // Constructor
       public MainPage()
       {
          InitializeComponent();
          this.GetCoordinates();
       }
    
       private async void GetCoordinates()
       {
          //Getting Phone's current location
          Geolocator MyGeolocator = new Geolocator();
          MyGeolocator.DesiredAccuracyInMeters = 5;
          Geoposition MyGeoPosition = null;
          try
          {
             MyGeoPosition = await MyGeolocator.GetGeopositionAsync(TimeSpan.FromMinutes(1), TimeSpan.FromSeconds(10));
          }
          catch (UnauthorizedAccessException)
          {
             MessageBox.Show("Location is disabled in phone settings");
          }
          catch (Exception ex)
          {
             // something else happened acquring the location
             // ex.HResult can be read to know the specific error code but it is not recommended
          }
          MyCoordinates.Add(new GeoCoordinate(MyGeoPosition.Coordinate.Latitude, MyGeoPosition.Coordinate.Longitude));
    
       }     
         }
    

显示从手机的当前位置到地图中某一位置的路线。

  1. 在 MainPage.xaml 中,在名为 LayoutRoot 的网格下添加一个 Map 控件,如以下代码所示。有关添加Map 控件的更多信息,请参见如何将地图控件添加到 Windows Phone 8 中的页面中

    <maps:Map x:Name="MyMap" Grid.Row="1" Center="47.603848, -122.029953" ZoomLevel="11"/>
    
  2. 在 MainPage.xaml.cs 的 MainPage 类中创建以下成员变量。此代码将用户输入的目标地址设置为SearchTerm 属性,然后将该地址转换为地理坐标。随后,地理坐标被设置为 GeocodeQuery.GeoCoordinate属性。

    C#
    RouteQuery MyQuery = null;
    GeocodeQuery Mygeocodequery = null;
    
  3. 在 GetCoordinates() 方法中,添加以下代码。

    C#
    Mygeocodequery = new GeocodeQuery();
    Mygeocodequery.SearchTerm = "Seattle WA";
    Mygeocodequery.GeoCoordinate = new GeoCoordinate(MyGeoPosition.Coordinate.Latitude, MyGeoPosition.Coordinate.Longitude);
    
  4. 将名为 Mygeocodequery_QueryCompleted 的事件处理程序添加到 QueryCompleted 事件,并调用QueryAsync 方法。此代码创建一个新的 RouteQuery 对象,并将当前指定目标的坐标存储在其 Waypoints 属性中。它还将名为 MyQuery_QueryCompleted 事件处理程序添加到 QueryCompleted 事件。

    C#
    Mygeocodequery.QueryCompleted += Mygeocodequery_QueryCompleted;
    Mygeocodequery.QueryAsync();
    
  5. 在 Mygeocodequery_QueryCompleted 事件处理程序中,添加以下代码。

    C#
    void Mygeocodequery_QueryCompleted(object sender, QueryCompletedEventArgs<IList<MapLocation>> e)
    {
       if (e.Error == null)
       {
          MyQuery = new RouteQuery();
          MyCoordinates.Add(e.Result[0].GeoCoordinate);
          MyQuery.Waypoints = MyCoordinates;
          MyQuery.QueryCompleted += MyQuery_QueryCompleted;
          MyQuery.QueryAsync();
          Mygeocodequery.Dispose();
       }
    }
    
  6. 在 MyQuery_QueryCompleted 事件处理程序中,添加以下代码。它将在地图上 MyCoordinates 中的两个地理坐标之间添加线路。

    void MyQuery_QueryCompleted(object sender, QueryCompletedEventArgs<Route> e)
    {
       if (e.Error == null)
       {
          Route MyRoute = e.Result;
          MapRoute MyMapRoute = new MapRoute(MyRoute);
          MyMap.AddRoute(MyMapRoute);
          MyQuery.Dispose();
       }
    }
    

显示从手机的当前位置到地图中某一位置的方向。

  1. 在 MainPage.xaml 中,添加以下代码以在现有地图控件下创建 LongListSelector 控件。这将用于显示两个位置之间的方向。

    <phone:PhoneApplicationPage.Resources>
       <DataTemplate x:Key="RouteListTemplate">
          <TextBlock Text="{Binding}" FontSize="{StaticResource PhoneFontSizeMedium}" Margin="5,5,0,0"/>
       </DataTemplate>
    </phone:PhoneApplicationPage.Resources>
        
    <!--LayoutRoot is the root grid where all page content is placed-->
    <Grid x:Name="LayoutRoot" Background="Transparent">
       <Grid.RowDefinitions>
          <RowDefinition Height="auto"/>
          <RowDefinition Height="*"/>
          <RowDefinition Height="auto"/>
          <RowDefinition Height="*"/>
       </Grid.RowDefinitions>
       <TextBlock Text="Map Route" Grid.Row="0" FontSize="{StaticResource PhoneFontSizeLarge}" Margin="0,0,0,20"/>
       <maps:Map x:Name="MyMap" Grid.Row="1" Center="47.603848, -122.029953" ZoomLevel="11"/>
       <TextBlock Text="Route Directions" Grid.Row="2" FontSize="{StaticResource PhoneFontSizeLarge}" Margin="0,10,0,20"/>
       <phone:LongListSelector x:Name="RouteLLS" Grid.Row="3" Background="Transparent" ItemTemplate="{StaticResource RouteListTemplate}" LayoutMode="List" 
          IsGroupingEnabled="False"/>
    </Grid>
    
  2. 在 MainPage.cs 中,将以下代码添加到 MyQuery_QueryCompleted 事件处理程序以显示两个位置之间的线路。

    void MyQuery_QueryCompleted(object sender, QueryCompletedEventArgs<Route> e)
    {
       if (e.Error == null)
       {
          Route MyRoute = e.Result;
          MapRoute MyMapRoute = new MapRoute(MyRoute);
          MyMap.AddRoute(MyMapRoute);
          List<string> RouteList = new List<string>();
          foreach (RouteLeg leg in MyRoute.Legs)
          {
             foreach (RouteManeuver maneuver in leg.Maneuvers)
             {
                RouteList.Add(maneuver.InstructionText);
             }
          }
    
          RouteLLS.ItemsSource = RouteList;
          MyQuery.Dispose();
       }
    }
    

    以下屏幕快照显示了本主题中所用示例的结果。

    Route and Directions in a Map control
六自由度机械臂ANN人工神经网络设计:正向逆向运动学求解、正向动力学控制、拉格朗日-欧拉法推导逆向动力学方程(Matlab代码实现)内容概要:本文档围绕六自由度机械臂的ANN人工神经网络设计展开,详细介绍了正向与逆向运动学求解、正向动力学控制以及基于拉格朗日-欧拉法推导逆向动力学方程的理论与Matlab代码实现过程。文档还涵盖了PINN物理信息神经网络在微分方程求解、主动噪声控制、天线分析、电动汽车调度、储能优化等多个工程与科研领域的应用案例,并提供了丰富的Matlab/Simulink仿真资源技术支持方向,体现了其在多学科交叉仿真与优化中的综合性价值。; 适合人群:具备一定Matlab编程基础,从事机器人控制、自动化、智能制造、电力系统或相关工程领域研究的科研人员、研究生及工程师。; 使用场景及目标:①掌握六自由度机械臂的运动学与动力学建模方法;②学习人工神经网络在复杂非线性系统控制中的应用;③借助Matlab实现动力学方程推导与仿真验证;④拓展至路径规划、优化调度、信号处理等相关课题的研究与复现。; 阅读建议:建议按目录顺序系统学习,重点关注机械臂建模与神经网络控制部分的代码实现,结合提供的网盘资源进行实践操作,并参考文中列举的优化算法与仿真方法拓展自身研究思路。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值