2017-07-26 74 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