菜鸟在这里。我已经阅读了如何检测 MKPolygon 中的一个点,但我在实现它时遇到了困难——它可能与我正在检查用户位置的代码部分有关……我不是即使确定它是否一直在检查。无论如何,这是相关的代码:
- (void)locationManager:(CLLocationManager *)manager
didUpdateLocations:(NSArray *)locations {
self.current = [locations lastObject];
NSLog(@"lat%f - lon%f", self.current.coordinate.latitude, self.current.coordinate.longitude);
NSLog(@"%@", self.mapCIIP); }
然后
-(MKOverlayRenderer *)mapView:(MKMapView *)mapView rendererForOverlay:(id <MKOverlay>)overlay{
if([overlay isKindOfClass:[MKPolygon class]]){
MKPolygonRenderer *view = [[MKPolygonRenderer alloc] initWithOverlay:overlay];
view.lineWidth=1;
view.strokeColor=[UIColor blueColor];
view.fillColor=[[UIColor blueColor] colorWithAlphaComponent:0.5];
return view;
CLLocationCoordinate2D mapCoordinate = CLLocationCoordinate2DMake(self.current.coordinate.latitude, self.current.coordinate.longitude);
MKMapPoint mapPoint = MKMapPointForCoordinate(mapCoordinate);
if (CLLocationCoordinate2DIsValid(mapCoordinate)) {
NSLog(@"Coordinate valid");
} else {
NSLog(@"Coordinate invalid");
}
CGPoint polygonViewPoint = [view pointForMapPoint:mapPoint];
if ( CGPathContainsPoint(view.path, NULL, polygonViewPoint, NO) ) {
self.mapCIIP = @"TRUE";
}
else {
self.mapCIIP = @"false";
};
}
return nil; }
我模拟了 Xcode 中的不同位置,它在我的 iPhone 上运行,虽然更新了纬度/经度,但它并没有给我我想要的我绘制的多边形中的真/假。在某一时刻,它显示为全部真实,但现在在 NSLog 中全部为(空)。谢谢!