Windows Phone 8 使用全新的地图API,与之前Windows Phone7 采用的必应地图有很大的区别。最主要的区别在于,wp7地图控件是Sliverlight控件,而wp8控件直接基于wp8 SDK libraries,并且采用了诺基亚的Here‘s地图。在兼容方面,旧的wp7控件仍然被wp8 SDK支持,但不推荐使用。
要调用wp8的地图服务,首先开启ID_CAP_LOCATION。之后,按照不同的需求进行不同的调用。
获取当前位置
1.先实例化一个Geolocator类;
2.需要特别注意的是,Geolocator返回的包含当前位置信息的Geocoordinate不能直接使用。wp8的map control支持使用GeoCoordiante。因此我们可以写一个ConverterCoordinate类来进行转换;
3.最后将map control加到应用界面中,可以在xaml中直接加或通过cs的代码来加入。
关键代码如下:
private async void GetAndShowMyLocationOnMap()
{
Geolocator myGeoLoc = new Geolocator();
myGeoLoc.DesiredAccuracy = PositionAccuracy.High;
Geoposition myGeoposition = await myGeoLoc.GetGeopositionAsync();
Geocoordinate myGeocoordinate = myGeoposition.Coordinate;
GeoCoordinate myGeoCoordinate = CoordinateConverter.ConvertGeocoordinate(myGeocoordinate);
Map MyMap = new Map();
MyMap.Center = myGeoCoordinate;
MyMap.ZoomLevel = 7;
MyMap.LandmarksEnabled = true;
MyMap.CartographicMode = MapCartographicMode.Hybrid;
ContentPanel.Children.Add(MyMap);
}
具体位置搜索:
添加System.Device程序集的引用,并且引用Microsoft.Phone.Tasks和System.Device.Location命名空间,注意到如果我们没有设定搜索地点,那么地图会默认选择我们当前位置作为搜索地点(Center)。
private void LaunchMapTask()
{
MapsTask mapsTask = new MapsTask();
mapsTask.SearchTerm = "同济大学";
mapsTask.ZoomLevel = 7;
mapsTask.Show();
}
路线搜索(Maps DirectionTask)
Maps Direction Task可以帮助我们方便地实现路线导航的功能。具体代码如下:
private void MapsDirectionsTask()
{
MapsDirectionsTask mapsDirectionsTask = new MapsDirectionsTask();
LabeledMapLocation StartPoint = new LabeledMapLocation("同济大学", null);
LabeledMapLocation EndPoint = new LabeledMapLocation("复旦大学", null);
mapsDirectionsTask.Start = StartPoint;
mapsDirectionsTask.End = EndPoint;
mapsDirectionsTask.Show();
}
实现出来的效果如图:
源代码下载地址:http://download.csdn.net/detail/lanqiuchaoren/6932593