9

I need to count number of annotations when i zooming mapView, and get array with which are shown on map, and then, i need to reload my Table and show list of only which shown on map.

How can i get number and array with annotation?

Nubaslon
  • 741
  • 2
  • 11
  • 27

3 Answers3

12

As for swift 2.0, I usually use this mapView extension to get all currently visible annotations as an array of MKAnnotations:

extension MKMapView {
    func visibleAnnotations() -> [MKAnnotation] {
        return self.annotationsInMapRect(self.visibleMapRect).map { obj -> MKAnnotation in return obj as! MKAnnotation }
    }
}
David H.
  • 2,762
  • 1
  • 24
  • 18
9

How about these two methods from MapKit class:

1) Get visible rectangle of map using:

@property(nonatomic, readonly) CGRect annotationVisibleRect

http://developer.apple.com/library/ios/DOCUMENTATION/MapKit/Reference/MKMapView_Class/MKMapView/MKMapView.html#//apple_ref/occ/instp/MKMapView/annotationVisibleRect

2) Then get annotation NSSet from parameter map rectangle:

- (NSSet *)annotationsInMapRect:(MKMapRect)mapRect

http://developer.apple.com/library/ios/DOCUMENTATION/MapKit/Reference/MKMapView_Class/MKMapView/MKMapView.html#//apple_ref/occ/instm/MKMapView/annotationsInMapRect:

So I would expect something like this:

-(void)getAnotationsInVisibleMapRectangle
{
    NSSet *annotationSet = [myMapView annotationsInMapRect:myMapView.annotationVisibleRect];

    // print number of annotations
    NSLog(@"Number of annotations in rect: %d", annotationSet.count);

    // this will return an array from the NSSet
    NSArray *annotationArray = [annotationSet allObjects]; 
}

Does that help?

Zhang
  • 11,549
  • 7
  • 57
  • 87
  • It's nice, but need to convert CGRect (myMapView.annotationVisibleRect) to MKMapRect? "annotationInMapRect(MKMapRect)"... – Nubaslon Aug 13 '13 at 08:22
  • Thanks! =) It help me) and i use "visibleMapRect" instead of "annotationVisibleRect" – Nubaslon Aug 13 '13 at 08:52
  • 1
    'annotationVisibleRect' does not compile so use 'visibleMapRect' as @Nubaslon noted. – ghr Feb 04 '17 at 06:10
4

David's great solution in Swift 4

extension MKMapView {
    func visibleAnnotations() -> [MKAnnotation] {
        return self.annotations(in: self.visibleMapRect).map { obj -> MKAnnotation in return obj as! MKAnnotation }
    }
}
Jordi Bruin
  • 1,588
  • 1
  • 11
  • 20