Xamarin形成地图坐标

Xamarin形成地图坐标,xamarin,xamarin.forms,Xamarin,Xamarin.forms,我有两个关于xamarin表单映射的问题。 1.拖动地图后,如何获取地图中心的坐标(长、纬度)? 2.可以从地图上的点击事件获取坐标吗 谢谢。您需要自定义地图渲染器 以下是如何获取Android地图上的点击坐标: public class CustomImportantPlaceRenderer : MapRenderer, IOnMapReadyCallback { GoogleMap map; protected override void OnElementChanged

我有两个关于xamarin表单映射的问题。 1.拖动地图后,如何获取地图中心的坐标(长、纬度)? 2.可以从地图上的点击事件获取坐标吗


谢谢。

您需要自定义地图渲染器

以下是如何获取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));
    }
}
公共类CustomImportantPlaceRenderer:MapRenderer,IOnMapReadyCallback { 谷歌地图; 受保护的覆盖无效OnElementChanged(ElementChangedEventArgs e) { if(map!=null) { map.MapClick-=googleMap\u MapClick; } 基础。一个要素发生变化(e); if(控件!=null) { GetMapAsync(this); } } 4月1日公开作废(谷歌地图谷歌地图) { 地图=谷歌地图; if(map!=null) { map.UiSettings.ZoomControlsEnabled=false; map.MapClick+=googleMap\u MapClick; map.MyLocationEnabled=true; } } 私有void googleMap_MapClick(对象发送者,googleMap.MapClickEventArgs e) { 双纬度=东点纬度; 双经度=e.点经度; MessagingCenter.Send(“已点击位置”、“已点击位置详情”、新点击位置CO(纬度、经度)); } } 这就是如何在地图上为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);
        }
    }
公共类CustomImportantPlaceRenderer:MapRenderer
{
专用只读UITapGestureRecognizer tapRecognizer;
public CustomImportantPlaceRenderer()
{
tapRecognizer=新的UITapGestureRecognizer(OnTap)
{
NumberOfTapsRequired=1,
NumberOfTouchesRequired=1
};
}
专用void OnTap(UITapGestureRecognitor识别器)
{
var cgPoint=识别器。位置视图(控制);
变量位置=((MKMapView)控件).ConvertPoint(cgPoint,控件);
MessagingCenter.Send(“已单击位置”、“已单击位置详细信息”,新建已单击位置CO(位置.纬度,位置.经度));
}
受保护的覆盖无效OnElementChanged(ElementChangedEventArgs e)
{
if(控件!=null)
{
控制。RemoveGestureRecognizer(tapRecognizer);
}
基础。一个要素发生变化(e);
if(控件!=null)
{
var nativeMap=作为MKMapView的控件;
nativeMap.ShowsUserLocation=true;
Control.AddGestureRecognitor(TapRecognitor);
}
}

Ok,但是如果map是通过“new map()”在PCL中创建的,我该怎么做?您能写一些代码来说明dependencyService如何使用它吗?谢谢。