【发布时间】:2016-03-23 03:58:20
【问题描述】:
我在一个 IOS 7 项目中工作,它包含位置检查(当前位置在给定的多边形中)。
我正在使用以下代码检查条件
创建了一个 MKPolygons 数组
for(MKPolygon *poly in self.polygonArray)
{
[self checkTheLocationIsInPolygon:currentLocation polygon:poly];
}
- (void)checkTheLocationIsInPolygon:(CLLocation*)aLocation polygon:(MKPolygon*)aPolygon
{
CLLocationCoordinate2D coordinate = {aLocation.coordinate.latitude, aLocation.coordinate.longitude};
MKMapPoint mapPoint = MKMapPointForCoordinate(coordinate);
CGMutablePathRef mpr = CGPathCreateMutable();
MKMapPoint *polygonPoints = aPolygon.points;
size_t nCount = aPolygon.pointCount;
for (int p = 0; p < nCount; p++)
{
MKMapPoint mp = polygonPoints[p];
if (p == 0)
CGPathMoveToPoint(mpr, NULL, mp.x, mp.y);
else
CGPathAddLineToPoint(mpr, NULL, mp.x, mp.y);
}
CGPoint mapPointAsCGP = CGPointMake(mapPoint.x, mapPoint.y);
BOOL pointIsInPolygon = CGPathContainsPoint(mpr, NULL, mapPointAsCGP, FALSE);
CGPathRelease(mpr);
if(pointIsInPolygon == YES)
{
//IN
}
else
{
//Out
}
}
对于第一个多边形,此代码正常工作(pointIsInPolygon 返回 YES/NO 正确)。然后下一次迭代(数组中的下一个多边形)pointIsInPolygon 给出前一个状态意味着,如果第一个多边形在该位置之外,它返回 NO 并且如果第一个多边形在该位置内,则返回 YES。
如何解决这个问题?
如果有人知道,请给我一个建议
【问题讨论】:
-
或许这里的答案会对你有所帮助:stackoverflow.com/questions/4354130/…
-
我无法复制它。我用你的代码检查了一些多边形,我总是只得到一个多边形的 TRUE。