原文 WP8中的地图和导航

代码示例


测试基于

SDK: Windows Phone SDK 8.0

兼容于

平台: Windows Phone 8 and later
Windows Phone 8

文章

由 Xinx Gong 在 30 Nov 2012 创建
最后由 hamishwillee 在 26 Jun 2013 编辑

Contents

地图控件

WP8中,可以使用新的Map APIs来开发基于地图的应用,并可以包含位置以及搜索功能。WP8中使用的是诺基亚地图,WP7.1中的Bing地图仍然支持,但是不推荐使用,它仅仅是为了兼容使用了已经Bing地图的WP7.1应用。

显示地图

WP8中使用Map控件来显示地图,使用之前你需要关注下面几件事:

1.Map控件和服务使用的namespace

Microsoft.Phone.Map

2.XAML文件中使用Map控件需要的xmlns声明

xmlns:maps="clr-namespace:Microsoft.Phone.Maps.Controls;assembly=Microsoft.Phone.Maps"

3.WMAppManifest.xml中需要添加ID_CAP_MAP功能

指定地图的中心点和缩放比

在初始化Map控件时,CenterChanged和ZoomLevelChanged事件会被触发一次,所以要确定你的代码在初始化Map控件初始化触发这两个事件时能正确的处理好。 注意不要用Latitude和Longitude属性来设置Center,需要创建GeoCoordinate对象来设置。

用Map.SetView动态的调整地图

如果直接通过设置Map的属性来调整地图,地图的变化非常生硬,而采用SetView来调整地图的话,会有一个很流畅的动画效果来展示地图的变化。

通过SetView方法可以调整以下属性:

GeoCoordinate center:地图显示的中心点
double zoomLevel:地图显示的缩放级别
double heading:地图旋转的角度,值在0-360之间。

double pitch:地图倾斜的角度,值在0-180之间。

LocationRectangle boundingRectangle:地图上由两个经纬度坐标标识的一个矩形区域。
MapAnimationKind animationKind:地图发生变化时的过度动画效果。

地图制图模式

MapCartographicMode.Road: 显示普通的2D地图(默认显示)。
MapCartographicMode.Aerial: 显示航空摄影的地图。
MapCartographicMode.Hybrid: 显示带有道路和标签的鸟瞰地图。
MapCartographicMode.Terrain: 显示物理3D地图,带有海拔和水的特性,比如山脉和河流。

地图颜色模式

MapColorMode.Light:白天模式
MapColorMode.Dark:夜间模式

显示地标和行人特性

地标:设置Map控件的LandmarksEnabled属性为true。
只有在Map控件的ZoomLevel大于7时才能显示。
行人特性:设置Map控件的PedestrianFeaturesEnabled属性为true。
只有在Map控件的ZoomLevel大于16时才能显示。

地图服务

通过经纬度查找地址信息

ReverseGeocodeQuery

ReverseGeocodeQuery reverseGeocodeQuery = null;
if (reverseGeocodeQuery == null || !reverseGeocodeQuery.IsBusy)
{
reverseGeocodeQuery = new ReverseGeocodeQuery();
reverseGeocodeQuery.GeoCoordinate = new GeoCoordinate(39.92, 116.46);
reverseGeocodeQuery.QueryCompleted += reverseGeocodeQuery_QueryCompleted;
reverseGeocodeQuery.QueryAsync();
}
 
private void reverseGeocodeQuery_QueryCompleted(object sender,
QueryCompletedEventArgs<IList<MapLocation>> e)
{
if (e.Error == null)
{
...
}
}

查找某一地点的经纬度

GeocodeQuery

GeocodeQuery geocodeQuery = new GeocodeQuery();
geocodeQuery.SearchTerm = searchTerm;
// Can search with a nearby coordinate, or ignore the parameter.
geocodeQuery.GeoCoordinate = nearbyCoordinate == null ? new GeoCoordinate(0, 0) : nearbyCoordinate;
geocodeQuery.QueryCompleted += geocodeQuery_QueryCompleted;
geocodeQuery.QueryAsync();
 
private void geocodeQuery_QueryCompleted(object sender,
QueryCompletedEventArgs<IList<MapLocation>> e)
{
if (e.Error == null)
{
...
}
}

路线规划

RouteQuery

RouteQuery routeQuery = new RouteQuery();
// TravelMode: Driving or Walking.
routeQuery.TravelMode = TravelMode.Driving;
// List<GeoCoordinate>: List of geocoordinates representing the route.
routeQuery.Waypoints = route;
routeQuery.QueryCompleted += routeQuery_QueryCompleted;
routeQuery.QueryAsync();
 
private void routeQuery_QueryCompleted(object sender,
QueryCompletedEventArgs<Route> e)
{
if (e.Error == null)
{
...
}
}

离线地图管理

MapDownloaderTask task = new MapDownloaderTask();
task.Show();

示例代码下载

File:MapSample.zip

WP8中的地图和导航的更多相关文章

  1. Android中Google地图路径导航,使用mapfragment地图上画出线路(google map api v2)详解

    在这篇里我们只聊怎么在android中google map api v2地图上画出路径导航,用mapfragment而不是mapview,至于怎么去申请key,manifest.xml中加入的权限,系 ...

  2. WP8关于对地图开发的改进

    原文:WP8关于对地图开发的改进 微软在2012年6月21日 发布了 Windows Phone 8的更新.带来大量的功能更新和全新的SDK.作为重头戏的部分是引入了 C++ 和 DirectX,支持 ...

  3. iOS开发----地图与导航--定位和位置信息获取

    要实现地图.导航功能,往往需要先熟悉定位功能,在iOS中通过Core Location框架进行定位操作.Core Location自身可以单独使用,和地图开发框架MapKit完全是独立的,但是往往地图 ...

  4. 用手机地图GPS导航费流量吗?

    如果你的手机带有GPS芯片,那么使用手机导航是不会耗费手机流量的.但是如果你的手机没有GPS芯片,而使用的导航软件又是类似于移动提供的导航服务那样的导航功能,那就耗费手机流量了. 目前,导航软件导航主 ...

  5. wp8.1 Study1: 页面导航&页面间值传递

    摘要:wp8.1与wp8中很多API是不一样了,wp8.1把以前wp7.x时的api去掉了,更多与win8.1的API相似.比如以下的页面导航和页面之间的值传递 1.页面导航 利用Frame.Navi ...

  6. iOS中的地图和定位

    文章摘自http://www.cnblogs.com/kenshincui/p/4125570.html#location  如有侵权,请联系删除. 概览 现在很多社交.电商.团购应用都引入了地图和定 ...

  7. Android百度地图SDK 导航初始化和地图初始化引起的冲突

    如题,相同是百度地图SDK开发过程中遇到的一个问题.交代下背景: 开发了一款内嵌百度地图的应用,因此里面差点儿相同将眼下百度地图SDK开放的主要功能都用到了,定位,地图显示,覆盖物标示.POI搜索,行 ...

  8. IOS百度地图语音导航

    VoiceNavigationViewController.m * 客户端需安装百度导航地图 #import "VoiceNavigationViewController.h" # ...

  9. EChart中使用地图方式总结(转载)

    EChart中使用地图方式总结 2018年02月06日 22:18:57 来源:https://blog.csdn.net/shaxiaozilove/article/details/79274772 ...

随机推荐

  1. [置顶] 手把手教你iOS消息推送证书生成以及Push消息

    iOS推送消息是许多iOS应用都具备的功能,今天在给应用加推送功能,在生成证书的过程中,发生了各种令人蛋痛的事.下面就把步骤拿出来分享下: iOS消息推送的工作机制可以简单的用下图来概括: Provi ...

  2. Android菜鸟的成长笔记(11)——Android中的事件处理

    原文:[置顶] Android菜鸟的成长笔记(11)——Android中的事件处理 Android提供了两种方式来处理事件,一个是基于回调的事件处理,另一个是基于监听的事件处理,举个例子: 基于回调的 ...

  3. 14.6.3 Grouping DML Operations with Transactions 组DML操作

    14.6.3 Grouping DML Operations with Transactions 组DML操作 默认情况下,连接到MySQL server 开始是以启动自动提交模式, 会自动提交每条S ...

  4. POJ 2184 Cow Exhibition 01背包

    题意就是给出n对数 每对xi, yi 的值范围是-1000到1000 然后让你从中取若干对 使得sum(x[k]+y[k]) 最大并且非负   且 sum(x[k]) >= 0 sum(y[k] ...

  5. android打包apk时混淆遇到的问题

    android打包apk的时候一般会选择混淆,而在eclipse中常使用的是proguard来混淆.有很多时候引用了第三方包的时候会导致打包不成功,或者打包成功不能运行的情况. 首先看看正常的prog ...

  6. Disable root 账号登陆

    1. 改动文件: /etc/ssh/sshd_config #PermitRootLogin yes 改动为: PermitRootLogin no 2. 重新启动ssh进程 /etc/init.d/ ...

  7. VS2012配置astyle格式化代码

    1.工具->扩展和更新,搜astyle插件,下载安装重启,当前是2.0版本. 2.工具->选项->AStyle Formatter->Edit,填入下面的,点击save,确定. ...

  8. 通过设置Referer反"反盗链"

    package cn.searchphoto.util; import java.io.File; import java.io.FileOutputStream; import java.io.In ...

  9. linux下修改hostid

    linux下修改hostid 网上有很多版本,总结了这几点. 1> 一个以16进制显示的int字符串: 2> 配置文件: /etc/hostid; 如果有值,输出, 结束. 3> 从 ...

  10. Java线程状态及Thread类中的主要方法

    要想实现多线程,就必须在主线程中创建新的线程对象. 不论什么线程一般具有5种状态,即创建,就绪,执行,堵塞,终止. 创建状态: 在程序中用构造方法创建了一个线程对象后,新的线程对象便处于新建状态,此时 ...