gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-02 10:18:46 25 4
gpt4 key购买 nike

我正在努力寻找 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 语句。代码原样仅返回多边形的最后检查点。向 mapCoordinateIsInPolygon 插入一个测试,然后在内循环中插入一个 break 语句,一旦第一个测试为正,就会立即离开循环,从而给出正确的结果。 ;-)

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com