I am able to get visible rectangle of map view and also centre point of map view and span deltas are also get from mkmaap view methods:
To get visible are :mapView.vis
To get the radius follow this:
- (CLLocationDistance)getRadius
{
CLLocationCoordinate2D centerCoor = [self getCenterCoordinate];
// init center location from center coordinate
CLLocation *centerLocation = [[CLLocation alloc] initWithLatitude:centerCoor.latitude longitude:centerCoor.longitude];
CLLocationCoordinate2D topCenterCoor = [self getTopCenterCoordinate];
CLLocation *topCenterLocation = [[CLLocation alloc] initWithLatitude:topCenterCoor.latitude longitude:topCenterCoor.longitude];
CLLocationDistance radius = [centerLocation distanceFromLocation:topCenterLocation];
return radius;
}
It will return the radius in metres.
To get center coordinate
- (CLLocationCoordinate2D)getCenterCoordinate
{
return [self.mapView centerCoordinate];
}
For getting radius, depends on where you want to get the 2nd point. Lets take the Top Center
- (CLLocationCoordinate2D)getTopCenterCoordinate
{
// to get coordinate from CGPoint of your map
return [self.mapView convertPoint:CGPointMake(self.mapView.frame.size.width / 2.0f, 0) toCoordinateFromView:self.mapView];
}
With Swift 3.0 you can use extension to simplify your life:
extension MKMapView {
func topCenterCoordinate() -> CLLocationCoordinate2D {
return self.convert(CGPoint(x: self.frame.size.width / 2.0, y: 0), toCoordinateFrom: self)
}
func currentRadius() -> Double {
let centerLocation = CLLocation(coordinate: self.centerCoordinate)
let topCenterCoordinate = self.topCenterCoordinate()
let topCenterLocation = CLLocation(coordinate: topCenterCoordinate)
return centerLocation.distance(from: topCenterLocation)
}
}
With Swift 4.0 :
extension MKMapView {
func topCenterCoordinate() -> CLLocationCoordinate2D {
return self.convert(CGPoint(x: self.frame.size.width / 2.0, y: 0), toCoordinateFrom: self)
}
func currentRadius() -> Double {
let centerLocation = CLLocation(latitude: self.centerCoordinate.latitude, longitude: self.centerCoordinate.longitude)
let topCenterCoordinate = self.topCenterCoordinate()
let topCenterLocation = CLLocation(latitude: topCenterCoordinate.latitude, longitude: topCenterCoordinate.longitude)
return centerLocation.distance(from: topCenterLocation)
}
}