2017-07-26 47 views
0

我有兩個關於xamarin表格地圖的問題。 1.地圖拖動後,如何獲取地圖中心座標(long,lat)? 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)); 
    } 
} 

這是如何獲得挖掘在地圖上的座標爲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中創建的?你可以寫一些代碼如何通過dependencyService使用它。謝謝。 – Klick