地图控件的基础知识
文章信息
这篇文章展示了如何利用GeoCoordinateWatcher来创建一个 Map控件。
Contents |
简介
我们将要谈论定位服务,以及我们如何获得有关设备的信息。Windows Phone有一个嵌入式的GPS。我们可以在Windows Phone上使用System.Device.Location命名空间来访问位置信息。在这里我们将使用GeoCoordinateWatcher类来获得基于经纬度坐标轴的位置数据。
基本理念
我们将要在应用程序界面上创建一个Map,当用户点击My Location菜单时,它从设备上获得当前位置并将当前位置的经纬度映射在缩放视图上。
实现
首先让我们利用Windows Phone Application模板来创建一个项目。当项目创建后,在Visual Studio 2010的Toolbox中拖一个新的Map 控件。这将会在XAML文件中形成Map控制代码。
MainPage.xaml
<my:Map Height="408" HorizontalAlignment="Left" Margin="6,20,0,0" Name="map1" VerticalAlignment="Top" Width="444" Mode="AerialWithLabels" CredentialsProvider="{StaticResource BingMapsAPIKey}" >
</my:Map>
这行 Mode="AerialWithLabels" CredentialsProvider="{StaticResource BingMapsAPIKey}并不是自动生成的,这些代码定义了显示方式并设置了一个Bing Map API Key。从这里创建你的Key。当你得到你的Key时,你需要将你的key添加到应用程序中。我们可以像下面那样将key添加到目前的Map控件中。
MainPage.xaml
CredentialsProvider="Anqep9VR0k6VxcmRp4qJ_AYWglilkC3B4c2QgZAgZTBS-bCr2GOI7iOopDGd-PXa"
如果我们准备在其他的地方重用key,我们需要将key保存在App.xaml文件中。
App.xaml
<Application.Resources>
<my:ApplicationIdCredentialsProvider ApplicationId="Anqep9VR0k6VxcmRp4qJ_AYWglilkC3B4c2QgZAgZTBS-bCr2GOI7iOopDGd-PXa" x:Key="BingMapsAPIKey"></my:ApplicationIdCredentialsProvider>
</Application.Resources>
当这些完成后,我们准备创建自己的应用程序并看看我们的地图是怎样的。现在我们添加菜单并将它命名为My Location。当用户点击菜单时,调用ApplicationBarMenuItem_Click()。
private void ApplicationBarMenuItem_Click(object sender, EventArgs e)
{
GeoCoordinateWatcher gcw;
gcw = new GeoCoordinateWatcher(GeoPositionAccuracy.High);
gcw.MovementThreshold = 20;
gcw.StatusChanged += new EventHandler<GeoPositionStatusChangedEventArgs>(gcw_StatusChanged);
gcw.PositionChanged += new EventHandler<GeoPositionChangedEventArgs<GeoCoordinate>>(gcw_PositionChanged);
gcw.Start();
map1.Center = new GeoCoordinate(gcw.Position.Location.Latitude, gcw.Position.Location.Longitude);
if (gcw != null) gcw.Stop();
map1.ZoomLevel = 17;
// map1.Mode = new RoadMode();
map1.ZoomBarVisibility = Visibility.Visible;
map1.ScaleVisibility = Visibility.Visible;
}
我们创建了一个GeoCoordinateWatcher实例并设置了精度高,阈值20,这里是约20公尺左右。事件GeoPositionStatusChangedEventArgs获得更新状态,事件GeoPositionChangedEventArgs获得了位置数据以及与事件有关的数据,就像经纬度。Start()方法启用PositionChanged事件权利并允许它访问Position属性。一旦我们获得了这些数据我们将它们的值映射到地图上并在地图的中心位置显示。最后我们停止提供位置数据给GeoCoordinateWatcher并调用Stop()方法。同时我们还要设置正确的地图缩放级别。
这里有几篇文章谈论有关如何在模拟器上测试地图。
*Windows Phone GPS Emulator * Please see this.
源代码
完整的源代码可在如下网站获得:File:MapControls.zip


(no comments yet)