ios - 检查 map 上的点是否位于叠加层内

标签 ios mkmapview mkoverlay

我正在努力找出 MKPolygon 是否与 MKCircle 相交。

这是我的情况:我有一张充满区域的 map 。现在用户可以在 map 上设置一个图钉,我可以在其中以图钉的位置为中心绘制一个 MKCircle。现在我想知道这个圆圈是否与 map 上已有的某些区域重叠。

我的想法是使用 CGPathContainsPoint 方法检查多边形的每个点是否位于圆内。

这是我的代码:

//the circle for the location filter
    MKCircleView *circleView = (MKCircleView *)[map viewForOverlay:self.sfvc.pinCircle];


//loop all regions
for (MKPolygon *region in regions){

    BOOL mapCoordinateIsInPolygon = FALSE;

    //loop all point of this region
    for (int i = 0; i < region.pointCount; i++) {
       MKMapPoint point = region.points[i];
       CGPoint circleViewPoint = [circleView pointForMapPoint:point];
       mapCoordinateIsInPolygon = CGPathContainsPoint(circleView.path, NULL, circleViewPoint, NO);
    }

    if (mapCoordinateIsInPolygon) {
        NSLog(@"YES! At least one point of the poly lies within the circle");
    }

}

不幸的是,我得到了不可预测的结果 - 这没有任何意义。知道我做错了什么吗?还有其他方法可以实现我想要的功能吗?

我的代码部分来自How to determine if an annotation is inside of MKPolygonView (iOS)

注意:我知道我的解决方案依赖于这样的假设:区域/路径定义了足够的点,以便至少有一个点落在圆圈中。

提前致谢,

干杯,帕维

最佳答案

嗯,我终于明白了。上面的代码应该按原样工作,只是循环中缺少一个break语句。代码按原样仅返回多边形的最后一个检查点。将测试插入到mapCooperativeIsInPolygon,然后在第一个测试为正时,内部循环中的break语句就会离开循环,从而给出正确的结果。 ;-)

关于ios - 检查 map 上的点是否位于叠加层内,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6545054/

相关文章:

ios - UITextView – 无法在文本上设置下划线或删除线属性?

objective-c - MKMapKit-遍历MKA注释时为EXC_BAD_ACCESS

ios - setNeedsDisplayInMapRect 不触发新的 drawMapRect : call

ios - 使用 Firebase 发送和接收 iOS 应用程序的推送通知

ios - 如何在 Facebook 上分享来自 iphone book 应用程序的选定文本

ios - gpus_ReturnNotPermittedKillClient 应用后台运行时 MKMapView 抛出错误

ios - MKMapView 获取每屏幕英寸英尺的缩放级别

ios - 如何在 MapKit 中获取可见的叠加层? (即来自 Mapkit View 的 MKOverlay/MKOverlayRenderer)

mapkit - 为缓存的图 block 自定义 MKTileOverlay

ios - 为什么保留循环会泄漏内存?