如何获取当前位置或移动到Xamarin.Forms.Map中的当前位置
由于Map已经显示了用户位置(使用IsShowingUser),我只想缩放到此位置。 这很容易实现,还是我需要在每个平台上获取位置,因为我找不到任何GeoLocation对象。 只有GeoCoder ……这不是缩放到用户位置的常用用例吗?
您需要使用您感兴趣的位置调用MoveToRegion
方法。
您可以使用Geolocator Plugin for Xamarin获取PCL项目中的位置:
var locator = CrossGeolocator.Current; var position = await locator.GetPositionAsync(10000); map.MoveToRegion(MapSpan.FromCenterAndRadius(new Position(position.Latitude, position. Longitude), Distance.FromMiles(1))
将地图置于您所在位置的中心:
var position = await locator.GetPositionAsync(5000); map.MoveToRegion(MapSpan.FromCenterAndRadius(new Position(position.Latitude, position.Longitude), Distance.FromMiles(1))
缩放地图的当前位置:
var zoomLevel = 9; // between 1 and 18 var latlongdegrees = 360 / (Math.Pow(2, zoomLevel)); map.MoveToRegion(new MapSpan (map.VisibleRegion.Center, latlongdegrees, latlongdegrees));
参考: https : //developer.xamarin.com/guides/xamarin-forms/working-with/maps/
这不是缩放到用户位置的常用用例吗?
是的。 对于iOS,只需使用MKMapView ShowUserLocation
属性。
来自Apple纪录片:
将此属性设置为YES会导致地图视图使用Core Location框架查找当前位置并尝试在地图上显示它。
资料来源: https : //developer.apple.com/library/ios/documentation/MapKit/Reference/MKMapView_Class/#//apple_ref/occ/instp/MKMapView/showsUserLocation
那么你怎么能在Xamarin中做到这一点? 您将需要一个自定义渲染器,它扩展了Xamarin Forms MapRenderer 。 获取本机映射并将ShowUserLocation属性设置为true。
这是一个例子:
private void MoveToCurrentPosition() { var nativeMap = Control as MKMapView; if (nativeMap == null) return; nativeMap.ShowsUserLocation = true; }
同时设置nativeMap.SetUserTrackingMode(MKUserTrackingMode.Follow, true);
自动关注用户。
初始化地图时,这可能无效,因为iOS无法获取用户位置。 因此,如果您需要在地图出现时显示当前用户位置,只需使用MKUserLocationEventArgs
的EventHandler并使用DidUpdateUserLocation
事件。 你可以这样做:
private EventHandler _didUpdateUserLocationEventHandler; // In OnElementChanged: _didUpdateUserLocationEventHandler = (_, __) => { MoveToCurrentPosition(); nativeMap.DidUpdateUserLocation -= _didUpdateUserLocationEventHandler; }; nativeMap.DidUpdateUserLocation += _didUpdateUserLocationEventHandler;
不要忘记取消注册此事件。 仅用于通常的初始化行为。 用户可以随意在地图上滚动。