This category rectifies that.
MKMapView-CoordsDisplay.h
MKMapView-CoordsDisplay.m
#import <MapKit/MapKit.h>
@interface MKMapView(CoordsDisplay)
- (BOOL)coordinatesInRegion:(CLLocationCoordinate2D)coords;
@end
#import "MKMapView-CoordsDisplay.h"
@implementation MKMapView(CoordsDisplay)
- (BOOL)coordinatesInRegion:(CLLocationCoordinate2D)coords
{
CLLocationDegrees leftDegrees = self.region.center.longitude - (self.region.span.longitudeDelta / 2.0);
CLLocationDegrees rightDegrees = self.region.center.longitude + (self.region.span.longitudeDelta / 2.0);
CLLocationDegrees bottomDegrees = self.region.center.latitude - (self.region.span.latitudeDelta / 2.0);
CLLocationDegrees topDegrees = self.region.center.latitude + (self.region.span.latitudeDelta / 2.0);
return leftDegrees <= coords.longitude && coords.longitude <= rightDegrees && bottomDegrees <= coords.latitude && coords.latitude <= topDegrees;
}
@end
#define kApproxRadiusOfEarthInMiles 3963.1676
#define kApproxSizeOfOneDegreeLatitudeInMiles 68.71
#define kApproxSizeOfOneDegreeLongitudeAtLatitude(lat) ((M_PI/180.0)* kApproxRadiusOfEarthInMiles *cos(lat))
- (void)locationManager:(CLLocationManager *)manager
didUpdateToLocation:(CLLocation *)newLocation
fromLocation:(CLLocation *)oldLocation {
MKCoordinateSpan viewSpan;
viewSpan.latitudeDelta = 0.5 / kApproxSizeOfOneDegreeLatitudeInMiles;
viewSpan.longitudeDelta = 0.5 / kApproxSizeOfOneDegreeLongitudeAtLatitude(newLocation.coordinate.latitude);
MKCoordinateRegion viewRegion;
viewRegion.center = newLocation.coordinate;
viewRegion.span = viewSpan;
MKCoordinateRegion adjustedRegion = [mapView regionThatFits:viewRegion];
[mapView setRegion:adjustedRegion animated:YES];
}