определить, находится ли точка внутри наложения MKPolygon.

Я хочу иметь возможность определить, находится ли нажатие внутри MKPolygon.

У меня есть MKPolygon :

CLLocationCoordinate2D  points[4];

points[0] = CLLocationCoordinate2DMake(41.000512, -109.050116);
points[1] = CLLocationCoordinate2DMake(41.002371, -102.052066);
points[2] = CLLocationCoordinate2DMake(36.993076, -102.041981);
points[3] = CLLocationCoordinate2DMake(36.99892, -109.045267);

MKPolygon* poly = [MKPolygon polygonWithCoordinates:points count:4];

[self.mapView addOverlay:poly];  

//create UIGestureRecognizer to detect a tap
UITapGestureRecognizer *tapRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(foundTap:)];
tapRecognizer.numberOfTapsRequired = 1;
tapRecognizer.numberOfTouchesRequired = 1;
[self.mapView addGestureRecognizer:tapRecognizer];

, это просто схема штата Колорадо.

Я настроил преобразование касания в широту/долготу :

-(IBAction)foundTap:(UITapGestureRecognizer *)recognizer
{
    CGPoint point = [recognizer locationInView:self.mapView];

    CLLocationCoordinate2D tapPoint = [self.mapView convertPoint:point toCoordinateFromView:self.view];
}

, но я не уверен, как это сделать, если моя точка касания находится в пределах MKPolygon. похоже, нет способа выполнить эту проверку, поэтому я предполагаю, что мне нужно преобразовать MKPolygon в CGRect и использовать CGRectContainsPoint.

MKPolygon имеет свойство.points, но я не могу вернуть его обратно.

есть предложения?

РЕДАКТИРОВАТЬ:

Оба приведенных ниже решения работают в iOS 6 или ниже, но не работают в iOS 7. В iOS 7 свойство polygon.pathвсегда возвращает NULL. Г-жа Анна была достаточно любезна, чтобы предоставить решение в другом вопросе SO здесь . Это включает в себя создание собственного пути от точек многоугольника до CGPathContainsPoint().

изображение моего полигона:

enter image description here

17
задан Community 23 May 2017 в 12:10
поделиться