我需要检查当前用户位置是否在特定区域内,在这里我使用MKPolygonView。我在MKMapView中添加了一条路由,我想检查用户是否在该特定路由内。我尝试了以下代码,但即使在该区域,它也始终表明我走错了路。
知道我哪里出问题了吗?
任何帮助将不胜感激。
谢谢。

    BOOL exist = NO;
    CLLocationCoordinate2D mapCoordinate = newLocation.coordinate;//user location or annot coord
    MKMapPoint mapPoint = MKMapPointForCoordinate(mapCoordinate);
    for(MKPolyline *routeLine in overlays)
    {

        NSLog(@"Overlays array count = %d",overlays.count);
        MKPolygonView *polygonView =(MKPolygonView *)[mapView viewForOverlay:routeLine];
        CGPoint polygonViewPoint = [polygonView pointForMapPoint:mapPoint];
        BOOL mapCoordinateIsInPolygon = CGPathContainsPoint(polygonView.path, NULL, polygonViewPoint, NO);
        NSLog(@"mapcoordinate %c",mapCoordinateIsInPolygon);
        if(mapCoordinateIsInPolygon)
        {
            exist = YES;
        }
        else
        {
            exist = NO;

        }
    }

最佳答案

您正在将MKPolygons与MKPolylines混合。 MKPolyline具有对应的MKPolylineView-不是MKPolygonView-即您的演员表无效。您应该能够通过在polygonView上使用isKindOfClass进行检查,以验证其类型。

就我所知,MKPolyline不是封闭路径。有两种选择,但我认为您的情况中最简单的选择是仅根据MKPolyline中的点创建自己的封闭CGPath并对此进行测试。

09-16 02:02