• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

ios - 检查 map 上的点是否在覆盖范围内

[复制链接]
菜鸟教程小白 发表于 2022-12-13 08:06:34 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

我正在努力找出 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)

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

提前致谢,

干杯,宝贝



Best Answer-推荐答案


好吧,我终于想通了。上面的代码应该按原样工作,除了循环中缺少 break 语句。原样的代码仅返回多边形的最后一个检查点。向 mapCoordinateIsInPolygon 插入一个测试,然后在内部循环中的 break 语句在第一个测试为正时立即离开循环,从而给出正确的结果。 ;-)

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

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap