您的位置:首页 > 其它

WP8中的地图和导航

2014-02-28 14:40 309 查看
原文 WP8中的地图和导航

代码示例
源文件: Media:MapSample.zip
测试基于
SDK: Windows Phone SDK 8.0
兼容于
平台: Windows Phone 8 and later
Windows Phone 8
文章
由 Xinx Gong 在 30 Nov 2012 创建
最后由 hamishwillee 在 26 Jun 2013 编辑

Contents

1 地图控件

1.1 显示地图

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

1.3 用Map.SetView动态的调整地图

1.4 地图制图模式

1.5 地图颜色模式

1.6 显示地标和行人特性

2 地图服务

2.1 通过经纬度查找地址信息

2.2 查找某一地点的经纬度

2.3 路线规划

3 离线地图管理

4 示例代码下载

地图控件

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: