由于地图已经显示了用户位置(IsShowingUser),我只想缩放到该位置。这是否容易实现,还是我需要在每个平台上获取位置,因为我找不到任何GeoLocation对象。只有GeoCoder……这不是一个常见的用例吗?
由于地图已经显示了用户位置(IsShowingUser),我只想缩放到该位置。这是否容易实现,还是我需要在每个平台上获取位置,因为我找不到任何GeoLocation对象。只有GeoCoder……这不是一个常见的用例吗?
您需要使用MoveToRegion
方法,并传入您感兴趣的位置。
您可以在PCL项目中使用Xamarin的Geolocator插件来获取位置:
var locator = CrossGeolocator.Current;
var position = await locator.GetPositionAsync(10000);
map.MoveToRegion(MapSpan.FromCenterAndRadius(new Position(position.Latitude, position. Longitude),
Distance.FromMiles(1)));
更新:现在 Xamarin Forms 默认包含 Xamarin.Essentials: Geolocation
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));
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<MKUserLocationEventArgs> _didUpdateUserLocationEventHandler;
// In OnElementChanged:
_didUpdateUserLocationEventHandler = (_, __) =>
{
MoveToCurrentPosition();
nativeMap.DidUpdateUserLocation -= _didUpdateUserLocationEventHandler;
};
nativeMap.DidUpdateUserLocation += _didUpdateUserLocationEventHandler;