web-dev-qa-db-fra.com

Comment obtenir l'emplacement actuel ou passer à l'emplacement actuel dans Xamarin.Forms.Map

Étant donné que la carte indique déjà l'emplacement de l'utilisateur (avec IsShowingUser), je souhaite uniquement effectuer un zoom sur cet emplacement. Est-ce facilement possible ou dois-je obtenir l'emplacement sur chaque plate-forme, puisque je ne trouve aucun objet GeoLocation. Seul le géocodeur .... N'est-ce pas un cas d'usage courant pour zoomer sur la position des utilisateurs?

12
Matt

Vous devrez appeler la méthode MoveToRegion avec le poste qui vous intéresse.

Vous pouvez utiliser Geolocator Plugin for Xamarin pour obtenir l’emplacement dans le projet 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

Centrez la carte sur votre emplacement:

var position = await locator.GetPositionAsync(5000);
map.MoveToRegion(MapSpan.FromCenterAndRadius(new Position(position.Latitude, position.Longitude), Distance.FromMiles(1))

Zoomer la carte sur sa position actuelle:

var zoomLevel = 9; // between 1 and 18
var latlongdegrees = 360 / (Math.Pow(2, zoomLevel));
map.MoveToRegion(new MapSpan (map.VisibleRegion.Center, latlongdegrees, latlongdegrees));

Réf: https://developer.xamarin.com/guides/xamarin-forms/working-with/maps/

4
SushiHangover

N’est-ce pas un cas d’usage courant pour zoomer sur la position des utilisateurs?

Oui, ça l'est. Pour iOS, utilisez simplement la propriété MKMapView ShowUserLocation.

Du documentaire Apple:

Si vous définissez cette propriété sur YES, la vue Carte utilise le cadre Emplacement principal pour rechercher l'emplacement actuel et essayer de l'afficher sur la carte.

Source: https://developer.Apple.com/library/ios/documentation/MapKit/Reference/MKMapView_Class/#//Apple_ref/occ/instp/MKMapView/showsUserLocation

Alors, comment pouvez-vous le faire dans Xamarin? Vous aurez besoin d’un moteur de rendu personnalisé qui étend Xamarin Forms MapRenderer. Obtenez la carte native et définissez la propriété ShowUserLocation sur true.

Voici un exemple:

private void MoveToCurrentPosition()
{
  var nativeMap = Control as MKMapView;
  if (nativeMap == null)
    return;

  nativeMap.ShowsUserLocation = true;
}

Définissez également nativeMap.SetUserTrackingMode(MKUserTrackingMode.Follow, true); pour suivre automatiquement l'utilisateur.

Cela risque de ne pas fonctionner lors de l’initialisation de la carte, car iOS n’a pas encore pu localiser l’utilisateur. Par conséquent, si vous devez afficher l'emplacement actuel de l'utilisateur lorsque la carte apparaît, utilisez simplement un gestionnaire d'événements pour MKUserLocationEventArgs et l'événement DidUpdateUserLocation. Vous pouvez le faire comme ça:

private EventHandler<MKUserLocationEventArgs> _didUpdateUserLocationEventHandler;

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

N'oubliez pas de vous désinscrire de cet événement. Utilisez-le juste pour un comportement d'initialisation habituel. L'utilisateur doit être libre de faire défiler la carte à sa guise.

0
jfmg