IT-Swarm.Net

Xamarin.Forms.Map’te geçerli yerlerde

Harita zaten kullanıcı konumunu gösterdiğinden (IsShowingUser ile) Sadece bu konumu yakınlaştırmak istiyorum. Bu kolayca mümkün mü yoksa herhangi bir GeoLocation nesnesi bulamadığım için her platformda yer bulmam gerekiyor mu? Yalnızca GeoCoder .... __ Bu, kullanıcıların pozisyonlarını yakınlaştırmak için yaygın bir kullanım alanı değil midir?

12
Matt

İlgilendiğiniz pozisyon ile MoveToRegion yöntemini çağırmanız gerekecektir.

PCL projesinde yer almak için Xamarin için Geolocator Eklentisi kullanabilirsiniz:

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

Haritayı konumunuzda ortalayın:

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

Haritayı geçerli konumunda yakınlaştır:

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

Bu, kullanıcıların pozisyonlarını yakınlaştırmak için yaygın bir kullanım alanı değil midir?

Evet öyle. İOS için sadece MKMapView ShowUserLocation özelliğini kullanın.

Apple belgeselinden:

Bu özelliğin YES olarak ayarlanması, harita görünümünün geçerli konumu bulmak ve haritada göstermeyi denemek için Çekirdek Konum çerçevesini kullanmasına neden olur.

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

Peki, Xamarin'de nasıl yapabilirsiniz? Xamarin Formları MapRenderer öğesini genişleten özel bir işleyiciye ihtiyacınız olacak. Yerel haritayı alın ve ShowUserLocation özelliğini true olarak ayarlayın.

İşte bir örnek:

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

  nativeMap.ShowsUserLocation = true;
}

Ayrıca, kullanıcıyı otomatik olarak takip edecek şekilde nativeMap.SetUserTrackingMode(MKUserTrackingMode.Follow, true); değerini ayarlayın.

Harita başlatıldığında bu çalışmayabilir, çünkü iOS henüz kullanıcı konumunu bulamadı. Bu nedenle, harita göründüğünde geçerli kullanıcı konumunu görüntülemeniz gerekirse, MKUserLocationEventArgs için bir EventHandler kullanın ve DidUpdateUserLocation olayını kullanın. Böyle yapabilirsiniz:

private EventHandler<MKUserLocationEventArgs> _didUpdateUserLocationEventHandler;

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

Bu etkinliği kaydettirmeyi unutma. Sadece normal bir başlangıç ​​davranışı için kullanın. Kullanıcı istediği gibi harita üzerinde kaydırma yapmakta özgür olmalıdır.

0
jfmg