当前位置:首页 > Windows程序 > 正文

Bing Maps 3D地图开发入门(一)

2021-03-27 Windows程序

本文主要内容是讲述如何创建基于 Windows Universal App 的Windows 10 3D地图应用,涉及的Windows 10新特性包括 Bing Maps 控件、Compiled data bindings (x:Bind),SplitView 和Hamburger。

本文中的示例源代码已在github 上共享( https://github.com/gaoxuesong/navigado )。

获取Bing Maps密钥

Universal Windows App 中使用必应地图需要从 Bing Maps Developer Center 获取地图验证密钥,并将其添加到应用中。

创建新密钥:

将创建的密钥复制到安全位置,在下面的步骤中我们会将其加入到Universal Windows App 中。

创建基于 Universal Windows App的地图应用 在Visual Studio 2015中创建新工程

打开 Visual Studio 2015(目前最新版为 Visual Studio 2015 RC),选择File > New Project。

展开Installed > Templates ,选择 Windows Universal > Blank App ( Windows Universal),如下图所示。

设定工程的名称即在 Name 中输入应用的名称,本例为"navigado"。Navigado是世界语导航的意思。

设定工程保存的目录,即在 Location 中设定工程保存的目录。

点击 OK 即创建新的Windows 10 Universal App。

添加地图控件和绑定密钥

在 XAML 页面或代码中,MapControl 需要 Windows.UI.Xaml.Controls.Maps 命名空间的命名空间声明

本例中是手动将 MapControl 添加到 MainPage.XAML 页面,并在该页面顶部手动添加命名空间声明:

xmlns:Maps="using:Windows.UI.Xaml.Controls.Maps"

若要在你的 Universal Windows App 中使用 MapControl 和地图服务 (Windows.Services.Maps),则需要地图验证密钥。将该密钥添加到地图控件和地图服务对象(如果适用)。

若要验证 MapControl,请使用该密钥来设置 MapServiceToken 属性值。你可以在代码中设置该属性,也可以在 XAML 标记中设置。

在本例中采用 Compiled data bindings (x:Bind) 的方式将必应地图的密钥绑定至 XAML 文件中的 MapControl,代码如下:

File: MainPage.xaml

<Maps:MapControl

x:Name="myMapControl"

MapServiceToken="{x:Bind BingMapsToken, Mode=OneWay}"

Loaded="MapControlLoaded"/>

在 MainPage.xaml.cs中的 MainPage 类中设定 BingMapsToke 的值,BingMapsToken的值即是在第一步骤中获取的 Bing Maps的密钥。代码如下:

File: MainPage.xaml.cs

private String BingMapsToken = "BingMapsToken by Bing Maps dev center ";

显示3D地图和设定地图中心

在MainPage.xmal.cs代码文件的顶部手动添加命名空间声明。

using Windows.UI.Xaml.Controls.Maps;

using Windows.Devices.Geolocation;

在 MapControl 类的 MapControlLoaded方法中添加如下的代码,显示3D地图并设定地图中心:

File: MainPage.xaml.cs

public BasicGeoposition seattleLocation = new BasicGeoposition()

{

//Geopoint for Seattle

Latitude = 47.604,

Longitude = -122.329

};

public BasicGeoposition spaceNeedlePosition = new BasicGeoposition()

{

//Geopoint for Seattle

Latitude = 47.6204,

Longitude = -122.3491

};

private async void MapControlLoaded(object sender, RoutedEventArgs e)

{

myMapControl.Center = new Geopoint(seattleLocation);

myMapControl.ZoomLevel = 12;

if (myMapControl.Is3DSupported)

{

this.myMapControl.Style = MapStyle.Aerial3DWithRoads;

Geopoint spaceNeedlePoint = new Geopoint(seattleLocation);

MapScene spaceNeedleScene = MapScene.CreateFromLocationAndRadius(spaceNeedlePoint,

400, /* show this many meters around */

135, /* looking at it to the south east*/

60 /* degrees pitch */);

await myMapControl.TrySetSceneAsync(spaceNeedleScene);

}

else

{

//string status = "3D views are not supported on this device.";

this.myMapControl.Style = MapStyle.Aerial;

}

}

可使用MapControl 的 Is3DSupported 方法判断设备是否支持3D地图显示,代码

this.myMapControl.Style = MapStyle.Aerial3DWithRoads;

实现了地图的切换至3D模式。调用MapControl.TrySetSceneAsync 方法切换地图场景。

其中 使用BasicGeoposition 类实例化两个演示地点 seattleLocation 和 spaceNeedlePosition。

在地图上显示图钉、图像和地理空间形状

温馨提示: 本文由Jm博客推荐,转载请保留链接: https://www.jmwww.net/file/68620.html