如何将UserLocation放在MKPolygonview或iOS MKMapView中的特定区域内?

时间:2013-01-09 10:28:38

标签: iphone ios objective-c mkmapview cllocationmanager

我需要检查当前用户位置是否在特定区域内,这里我使用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;

        }
    }

1 个答案:

答案 0 :(得分:2)

您正在将MKPolygons与MKPolylines混合使用。 MKPolyline有一个相应的MKPolylineView - 而不是MKPolygonView - 即你的演员表是无效的。您应该能够通过在polygonView上使用isKindOfClass来检查它,以验证它是什么类型。

MKPolyline不是一个封闭的路径,所以据我所知它不能包含任何东西。有几种选择,但我认为在你的情况下最容易的就是从MKPolyline中的点创建你自己的封闭CGPath并对其进行测试。