Search code examples
iosmkmapviewmkannotation

How to count number and which annotations shown on MapView, when zooming?


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?


Solution

  • 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?