首页 > 解决方案 > 选择 MKPolygon 点击

问题描述

我正在尝试允许用户使用 xamarin 表单 iOS 在地图上选择多边形并将笔画应用于他们选择的多边形。我无法弄清楚如何以这种方式在 c# 中创建点击手势。

我正在通过创建多边形

var blockOverlay = MKPolygon.FromCoordinates(coords);
 Constants.nativeMap.AddOverlay(blockOverlay);

理想情况下,我希望它看起来像我的 Android 地图

标签: c#xamarinxamarin.formsxamarin.ios

解决方案


UITapGestureRecognizer您可以添加一个MKMapView并将捕获的点击坐标转换为地图点,并测试它是否存在于您的任何叠加层中。

例子:

var uiTapGesture = new UITapGestureRecognizer(tappedGesture =>
{
    foreach (MKPolygon polygon in (tappedGesture.View as MKMapView).Overlays)
    {
        using (var render = new MKPolygonRenderer(polygon))
        {
            var coord2D = nativeMap.ConvertPoint(tappedGesture.LocationInView(nativeMap), nativeMap);
            var mapPoint = MKMapPoint.FromCoordinate(coord2D);
            var polyTouched = render.Path.ContainsPoint(render.PointForMapPoint(mapPoint), true);
            if (polyTouched)
                Console.WriteLine($"tapped: {polygon}");
        }
    }
});
nativeMap.AddGestureRecognizer(uiTapGesture);

注意:这是假设您正在使用MKPolygon叠加层,如果没有,请进行相应调整。


推荐阅读