定位 最后更新时间: 2021年01月22日
高德地图 Windows Phone SDK 可以实现移动客户端的定位功能,您需要初始化一个 AMapGeolocator 对象,并且设置 PositionChanged 位置回调函数,就可以获取持续的位置。初始化定位的示例代码(详见demo中MyLocation.xaml.cs)如下:
private void amap_Loaded(object sender, RoutedEventArgs e)
{
……
mylocation = new AMapGeolocator();
mylocation.PositionChanged += mylocation_PositionChanged;
}
定位更新时的回调函数
void mylocation_PositionChanged(AMapGeolocator sender, AMapPositionChangedEventArgs args)
{
this.Dispatcher.BeginInvoke(() =>
{
if (marker == null)
{
//添加定位精度圈,为覆盖物中的圆
circle = amap.AddCircle(new AMapCircleOptions()
{
Center = args.LngLat,//圆点位置
Radius = (float)args.Accuracy,//半径
FillColor = Color.FromArgb(80, 100, 150, 255),
StrokeWidth = 2,//边框粗细
StrokeColor = Color.FromArgb(80, 0, 0, 255),//边框颜色
});
//添加我的位置图标,为覆盖物中的标注
marker = amap.AddMarker(new AMapMarkerOptions()
{
Position = args.LngLat,//图标的位置
Title = "我的位置",
IconUri = new Uri("Images/marker_gps_no_sharing.png", UriKind.Relative),//图标的URL
Anchor = new Point(0.5, 0.5),//图标中心点
});
}
else{
//更新我的位置和精度圈
marker.Position = args.LngLat;
circle.Center = args.LngLat;
circle.Radius = (float)args.Accuracy;//圆半径
}
//设置当前地图的经纬度和缩放级别
amap.MoveCamera(CameraUpdateFactory.NewLatLngZoom(args.LngLat, 15));
Debug.WriteLine("定位精度:" + args.Accuracy + "米");
Debug.WriteLine("定位经纬度:" + args.LngLat);
});
}
显示如下图所示: