it-swarm.com.ru

Как получить текущее местоположение или перейти к текущему местоположению в Xamarin.Forms.Map

Поскольку карта уже показывает местоположение пользователя (с IsShowingUser), я просто хочу увеличить это местоположение. Это легко возможно, или мне нужно получить местоположение на каждой платформе, так как я не нахожу объект GeoLocation. Только GeoCoder ... Разве это не распространенный вариант использования для увеличения позиции пользователя?

12
Matt

Вам нужно будет вызвать метод MoveToRegion с интересующей вас позицией.

Вы можете использовать Geolocator Plugin для 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))
18
Giorgi

Сосредоточьте карту на своем местоположении:

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/

4
SushiHangover

Разве это не распространенный вариант использования для увеличения позиции пользователя?

Да, это. Для iOS просто используйте свойство ShowUserLocation MKMapView.

Из документального фильма Apple:

Если для этого свойства задано значение YES, представление карты использует базовую платформу местоположения, чтобы найти текущее местоположение и попытаться отобразить его на карте.

Источник: 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 пока не может определить местоположение пользователя. Поэтому, если вам нужно отобразить текущее местоположение пользователя при отображении карты, просто используйте EventHandler для MKUserLocationEventArgs и используйте событие DidUpdateUserLocation. Вы можете сделать это так:

private EventHandler<MKUserLocationEventArgs> _didUpdateUserLocationEventHandler;

// In OnElementChanged:
_didUpdateUserLocationEventHandler = (_, __) =>
{
    MoveToCurrentPosition();
    nativeMap.DidUpdateUserLocation -= _didUpdateUserLocationEventHandler;
};
nativeMap.DidUpdateUserLocation += _didUpdateUserLocationEventHandler;

Не забудьте отменить регистрацию этого события. Используйте это только для обычного поведения инициализации. Пользователь должен свободно прокручивать карту по своему усмотрению.

0
jfmg