wake-up-neo.com

Wie Sie den aktuellen Standort abrufen oder zum aktuellen Standort in Xamarin.Forms.Map wechseln

Da die Karte bereits den Benutzerstandort (mit IsShowingUser) anzeigt, möchte ich nur auf diesen Standort zoomen. Ist dies problemlos möglich oder muss ich den Speicherort auf jeder Plattform ermitteln, da ich kein GeoLocation-Objekt finde. Nur der GeoCoder ....__ Ist dies nicht üblich, um auf die Benutzerposition zu zoomen?

12
Matt

Sie müssen die MoveToRegion-Methode mit der Position aufrufen, an der Sie interessiert sind.

Sie können Geolocator Plugin for Xamarin verwenden, um die Position im PCL-Projekt abzurufen:

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

Zentrieren Sie die Karte an Ihrem Standort:

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

Vergrößern Sie die Karte an ihrer aktuellen Position:

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

Ref: https://developer.xamarin.com/guides/xamarin-forms/working-with/maps/

4
SushiHangover

Ist dies nicht eine übliche Anwendung, um auf die Benutzerposition zu zoomen?

Ja, so ist es. Für iOS verwenden Sie einfach die MKMapView-Eigenschaft ShowUserLocation.

Aus der Apple-Dokumentation:

Wenn Sie diese Eigenschaft auf YES setzen, verwendet die Kartenansicht das Core Location-Framework, um den aktuellen Standort zu finden und zu versuchen, ihn auf der Karte anzuzeigen.

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

Wie können Sie dies in Xamarin tun? Sie benötigen einen benutzerdefinierten Renderer, der Xamarin Forms MapRenderer erweitert. Rufen Sie die native Map ab und setzen Sie die ShowUserLocation-Eigenschaft auf true.

Hier ist ein Beispiel:

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

  nativeMap.ShowsUserLocation = true;
}

Stellen Sie auch nativeMap.SetUserTrackingMode(MKUserTrackingMode.Follow, true); ein, um dem Benutzer automatisch zu folgen.

Dies funktioniert möglicherweise nicht, wenn die Karte initialisiert wird, da iOS den Benutzerstandort noch nicht abrufen konnte. Wenn Sie also den aktuellen Benutzerstandort anzeigen müssen, wenn die Karte angezeigt wird, verwenden Sie einfach einen EventHandler für MKUserLocationEventArgs und das DidUpdateUserLocation-Ereignis. Sie können es so machen:

private EventHandler<MKUserLocationEventArgs> _didUpdateUserLocationEventHandler;

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

Vergessen Sie nicht, dieses Ereignis abzumelden. Verwenden Sie es nur für ein gewöhnliches Initialisierungsverhalten. Dem Benutzer sollte es frei sein, auf der Karte nach Belieben zu scrollen.

0
jfmg