detectar se um ponto está dentro de uma sobreposição de MKPolygon
Eu quero ser capaz de dizer se o tap está dentro de um MKPolygon.
Eu tenho um MKPolygon:
<code>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]; </code>
é apenas um esboço básico do estado do Colorado.
Eu tenho o toque para configuração de conversão lat / long:
<code>-(IBAction)foundTap:(UITapGestureRecognizer *)recognizer { CGPoint point = [recognizer locationInView:self.mapView]; CLLocationCoordinate2D tapPoint = [self.mapView convertPoint:point toCoordinateFromView:self.view]; } </code>
mas eu não tenho certeza como técnico se o meu ponto de toque está dentro do MKPolygon. Não parece haver um método para fazer essa verificação, portanto, eu estou supondo que eu preciso converter o MKPolygon para um CGRect e usar CGRectContainsPoint.
O MKPolygon tem uma propriedade .points, mas parece que não consigo recuperá-los.
alguma sugestão?
EDITAR:
Ambas as soluções abaixo funcionam no iOS 6 ou inferior, mas quebra no iOS 7. No iOS 7, opolygon.path
propriedade sempre retornaNULL
. Ms Anna foi gentil o suficiente para forneceruma solução em outra pergunta SO aqui. Envolve criar seu próprio caminho a partir dos pontos de polígono para passarCGPathContainsPoint()
.
imagem do meu polígono: