信息
您所需的主题如下所示。但此主题未包含在此库中。

如何在 Windows Phone 8 中的地图上显示您的当前位置

2014/6/18

仅适用于:Windows Phone 8 和 Windows Phone Silverlight 8.1

本主题介绍如何创建可以在地图控件上显示您的当前位置并以小圆圈标记该位置的应用。

提示提示:

本主题介绍了如何在您的应用内部编写用于显示地图并在该地图上标记位置的代码。如果只想显示地图和标记位置,您也可以使用地图任务,该任务可启动内置“地图”应用。有关详细信息,请参见如何使用 Windows Phone 8 的地图任务

在您的应用使用位置服务之前,请确保用户同意使用手机的位置。有关更多信息和示例代码,请参见如何在 Windows Phone 8 中获取手机的当前位置

Icon to indicate an SDK sample

要获取演示本主题中描述的某些任务的示例,请下载简单地图控件示例

本主题包括以下部分。

创建项目的步骤

  1. 在 Visual Studio 中,创建新的 Windows Phone 应用项目。将新项目命名为 ShowMyLocationOnMap

  2. 可以选择更改应用的标题。

    1. 在 MainPage.xaml 中,在设计器内,选择包含应用标题 MY APPLICATION 的第一个文本块。

    2. 将文本更改为 SHOW MY LOCATION ON MAP

  3. 可以选择更改页面的标题。

    1. 在设计器中,选择包含页面标题 page name 的第二个文本块。

    2. 将文本更改为 my location

  4. 在应用清单文件中选择 ID_CAP_LOCATION 和 ID_CAP_MAP 功能。

    1. “解决方案资源管理器”中,展开 C# 项目中的“Properties”文件夹或 Visual Basic 项目中的“My Project”文件夹。在 Visual Basic 项目中,在展开“My Project”文件夹之前,可能需要单击“显示所有文件”

    2. 在展开的文件夹中,查找并打开应用清单文件 WMAppManifest.xml。

    3. “清单设计器”“功能”页面上,检查 ID_CAP_LOCATION 和 ID_CAP_MAP 功能。

    4. 保存您的更改并关闭“清单设计器”

有关详细信息,请参见如何将地图控件添加到 Windows Phone 8 中的页面

添加地图控件的步骤

  1. 在工具箱中,选择地图控件并将其拖放至设计器。

    如果您通过编写 XAML 添加控件,您还需要将以下 xmlns 声明添加到 phone:PhoneApplicationPage 元素。如果您从工具箱拖放地图控件,将自动添加此声明。

    xmlns:maps="clr-namespace:Microsoft.Phone.Maps.Controls;assembly=Microsoft.Phone.Maps"
    
    
  2. 在“属性”窗口中,将地图控件命名为 mapWithMyLocation

  3. 在 MainPage.xaml 中的 XAML 代码窗口中,移除地图元素除名称特性之外的所有特性。这让地图控件可以填充页面上的可用空间。现在地图控件的 XAML 包含以下代码。

    <maps:Map x:Name="mapWithMyLocation"/>
    

当您获取您的当前位置时,代码将返回 Windows.Devices.Geolocation.Geocoordinate。此帮助器类中的代码可将此 Windows.Devices.Geolocation.Geocoordinate 转换为地图控件预期的 System.Device.Location.GeoCoordinate

若要获取扩展方法来执行此转换,同时对地图 API 采用其他有用的扩展,请下载 Windows Phone 工具包

添加帮助器类以转换地理坐标的步骤

  1. 在解决方案资源管理器中,右击项目,然后选择“添加类”。将新的帮助器类命名为 CoordinateConverter。单击“确定”。

  2. 使用以下代码替换新的类文件中的代码。

    using System;
    using System.Device.Location; // Provides the GeoCoordinate class.
    using Windows.Devices.Geolocation; //Provides the Geocoordinate class.
    
    namespace ShowMyLocationOnMap
    {
        public static class CoordinateConverter
        {
            public static GeoCoordinate ConvertGeocoordinate(Geocoordinate geocoordinate)
            {
                return new GeoCoordinate
                    (
                    geocoordinate.Latitude,
                    geocoordinate.Longitude,
                    geocoordinate.Altitude ?? Double.NaN,
                    geocoordinate.Accuracy,
                    geocoordinate.AltitudeAccuracy ?? Double.NaN,
                    geocoordinate.Speed ?? Double.NaN,
                    geocoordinate.Heading ?? Double.NaN
                    );
            }
        }
    }
    

在地图上显示您的位置的步骤

  1. 在 MainPage.xaml.cs 或 MainPage.xaml.vb 代码文件中,导入以下命名空间。

    using Microsoft.Phone.Maps.Controls;
    using System.Device.Location; // Provides the GeoCoordinate class.
    using Windows.Devices.Geolocation; //Provides the Geocoordinate class.
    using System.Windows.Media;
    using System.Windows.Shapes;
    
    Imports Microsoft.Phone.Maps.Controls
    Imports System.Device.Location
    ' Provides the GeoCoordinate class.
    Imports Windows.Devices.Geolocation
    'Provides the Geocoordinate class.
    Imports System.Windows.Media
    Imports System.Windows.Shapes
    
    
    
  2. 在 MainPage.xaml.cs 或 MainPage.xaml.vb 代码文件的 MainPage 类中,创建以下新方法。

            private async void ShowMyLocationOnTheMap()
            {
            }
    
        Private Async Sub ShowMyLocationOnTheMap()
        End Sub
    
    
    
  3. 在 MainPage 类的构造函数中,添加突出显示的代码以在运行应用时调用新方法。

            // Constructor
            public MainPage()
            {
                InitializeComponent();
                ShowMyLocationOnTheMap();
            }
    
  4. ShowMyLocationOnTheMap 方法中,添加以下代码以获取您的当前位置。该代码使用您在上一步中添加至项目的 CoordinateConverter 类。

                // Get my current location.
                Geolocator myGeolocator = new Geolocator();
                Geoposition myGeoposition = await myGeolocator.GetGeopositionAsync();
                Geocoordinate myGeocoordinate = myGeoposition.Coordinate;
                GeoCoordinate myGeoCoordinate = 
                    CoordinateConverter.ConvertGeocoordinate(myGeocoordinate);
    
  5. ShowMyLocationOnTheMap 方法中,添加以下代码以使您的当前位置位于地图的中心。

                // Make my current location the center of the Map.
                this.mapWithMyLocation.Center = myGeoCoordinate;
                this.mapWithMyLocation.ZoomLevel = 13;
    

此示例使用一个圆圈在地图上标记您的位置。有关相关任务的详细信息,请参见如何将 UIElement 添加到 Windows Phone 8 中的地图控件

在地图上标记您的位置的步骤

  1. ShowMyLocationOnTheMap 方法中,添加以下代码以创建蓝色的小圆圈,它的直径为 20 像素且 50% 不透明。

                // Create a small circle to mark the current location.
                Ellipse myCircle = new Ellipse();
                myCircle.Fill = new SolidColorBrush(Colors.Blue);
                myCircle.Height = 20;
                myCircle.Width = 20;
                myCircle.Opacity = 50;
    
  2. ShowMyLocationOnTheMap 方法中,添加以下代码创建 MapOverlay,以将圆圈包含在其中。通过使用 PositionOriginGeoCoordinate 属性,该代码使圆圈以您的当前位置为中心。

                // Create a MapOverlay to contain the circle.
                MapOverlay myLocationOverlay = new MapOverlay();
                myLocationOverlay.Content = myCircle;
                myLocationOverlay.PositionOrigin = new Point(0.5, 0.5);
                myLocationOverlay.GeoCoordinate = myGeoCoordinate;
    
  3. ShowMyLocationOnTheMap 方法中,添加以下代码创建 MapLayer,以将 MapOverlay 包含在其中。

                // Create a MapLayer to contain the MapOverlay.
                MapLayer myLocationLayer = new MapLayer();
                myLocationLayer.Add(myLocationOverlay);
    
  4. ShowMyLocationOnTheMap 方法中,添加以下代码以将 MapLayer 添加到地图。

                // Add the MapLayer to the Map.
                mapWithMyLocation.Layers.Add(myLocationLayer);
    

当您运行项目时,您将看到填充了应用 UI 中的全部可用空间的地图。地图以您的当前位置为中心,该位置有蓝色的小圆圈做标记。

Map control with current location

显示: