マップには既にユーザーの場所が表示されているため(IsShowingUserを使用)、この場所にズームしたいだけです。 GeoLocationオブジェクトが見つからないため、これは簡単に可能ですか、またはすべてのプラットフォームで位置を取得する必要がありますか。 GeoCoderのみ...これは、ユーザーの位置にズームする一般的なユースケースではありませんか?
興味のある位置で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))
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/
これは、ユーザーの位置にズームする一般的なユースケースではありませんか?
はい、そうです。 iOSの場合は、MKMapView ShowUserLocation
プロパティを使用します。
From Appleドキュメンタリー:
このプロパティをYESに設定すると、マップビューはCore Locationフレームワークを使用して現在の場所を見つけ、地図上に表示しようとします。
それでは、Xamarinでどのようにできますか? Xamarin FormsMapRendererを拡張するカスタムレンダラーが必要です。ネイティブマップを取得し、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;
_
このイベントの登録を忘れないでください。通常の初期化動作にのみ使用します。ユーザーは好きなように地図を自由にスクロールできるはずです。