2017-07-26 11 views
0

私はxamarinフォームマップについて2つの質問があります。 1.マップのドラッグ後に、マップセンターの座標を取得するにはどうすればよいですか? 2.マップ上のタップイベントから座標を取得できますか?Xamarinはマップ座標を形成します

ありがとうございます。

答えて

0

カスタムマップレンダラーが必要です。

これがタップ取得する方法Android用マップ上の座標である:

public class CustomImportantPlaceRenderer : MapRenderer, IOnMapReadyCallback 
{ 
    GoogleMap map; 

    protected override void OnElementChanged(ElementChangedEventArgs<Map> e) 
    { 
     if (map != null) 
     { 
      map.MapClick -= googleMap_MapClick; 
     } 

     base.OnElementChanged(e); 

     if (Control != null) 
     { 
      Control.GetMapAsync(this); 
     } 
    } 

    public void OnMapReady(GoogleMap googleMap) 
    { 
     map = googleMap; 

     if (map != null) 
     { 
      map.UiSettings.ZoomControlsEnabled = false; 
      map.MapClick += googleMap_MapClick; 
      map.MyLocationEnabled = true; 
     } 
    } 

    private void googleMap_MapClick(object sender, GoogleMap.MapClickEventArgs e) 
    { 
     double latitude = e.Point.Latitude; 
     double longitude = e.Point.Longitude; 

     MessagingCenter.Send<String, ClickedPositionCO>("PositionClicked", "PositionClickedDetail", new ClickedPositionCO(latitude, longitude)); 
    } 
} 

そして、これがOKのiOS

public class CustomImportantPlaceRenderer : MapRenderer 
{ 
    private readonly UITapGestureRecognizer tapRecognizer; 

    public CustomImportantPlaceRenderer() 
    { 
     tapRecognizer = new UITapGestureRecognizer(OnTap) 
     { 
      NumberOfTapsRequired = 1, 
      NumberOfTouchesRequired = 1 
     }; 
    } 

    private void OnTap(UITapGestureRecognizer recognizer) 
    { 
     var cgPoint = recognizer.LocationInView(Control); 

     var location = ((MKMapView)Control).ConvertPoint(cgPoint, Control); 

     MessagingCenter.Send<String, ClickedPositionCO>("PositionClicked", "PositionClickedDetail", new ClickedPositionCO(location.Latitude, location.Longitude)); 
    } 

    protected override void OnElementChanged(ElementChangedEventArgs<View> e) 
    { 
     if (Control != null) 
     { 
      Control.RemoveGestureRecognizer(tapRecognizer); 
     } 

     base.OnElementChanged(e); 

     if (Control != null) 
     { 
      var nativeMap = Control as MKMapView; 
      nativeMap.ShowsUserLocation = true; 
      Control.AddGestureRecognizer(tapRecognizer); 
     } 
    } 
+0

のマップ上の座標をタップ取得する方法ですが、どのように私はあればそれを行うことができます地図はPCLで "new Map()"によって作成されますか?あなたはdependencyServiceによってそれを使用する方法をいくつかのコードを書くことができますか?ありがとうございました。 – Klick

関連する問題