I dealt with some similar problems, and the most effective way I could find was to add overlays in the form of annotations, since MKOverlay implements MKAnnotation . You can then use annotationsInMapRect for the currently displayed mapRect. However, this will also return any normal MKAnnotations and will only use the calculated midpoint overlay. The only way (as I understand it) to get only overlays would be to iterate over each overlay and use:
-(BOOL)intersectsMapRect:(MKMapRect)mapRect;
on the current visible map. If you could find another way, I would be happy to hear!
source share