由于Map已经显示了用户位置(使用IsShowingUser),我只想缩放到此位置。这很容易实现,还是我需要在每个平台上获取位置,因为我找不到任何GeoLocation对象。只有GeoCoder ...... 这不是缩放到用户位置的常用用例吗?
答案 0 :(得分:20)
您需要使用您感兴趣的职位来调用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))
答案 1 :(得分:5)
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/
答案 2 :(得分:0)
这不是缩放到用户位置的常用用例吗?
是的,确实如此。对于iOS,只需使用MKMapView ShowUserLocation
属性。
来自Apple纪录片:
将此属性设置为YES会导致地图视图使用Core Location框架查找当前位置并尝试在地图上显示它。
那么你怎么能在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<MKUserLocationEventArgs> _didUpdateUserLocationEventHandler;
// In OnElementChanged:
_didUpdateUserLocationEventHandler = (_, __) =>
{
MoveToCurrentPosition();
nativeMap.DidUpdateUserLocation -= _didUpdateUserLocationEventHandler;
};
nativeMap.DidUpdateUserLocation += _didUpdateUserLocationEventHandler;
不要忘记取消注册此活动。仅用于通常的初始化行为。用户可以随意在地图上滚动。