Note that there are some explanatory texts on larger screens.

plurals
  1. PO
    primarykey
    data
    text
    <p>Create <code>MKMapView+ZoomLevel.h</code> as</p> <pre><code>#import &lt;MapKit/MapKit.h&gt; @interface MKMapView (ZoomLevel) - (void)setCenterCoordinate:(CLLocationCoordinate2D)centerCoordinate zoomLevel:(double)zoomLevel animated:(BOOL)animated; @end </code></pre> <p>Create <code>MKMapView+ZoomLevel.m</code> as</p> <pre><code>#import "MKMapView+ZoomLevel.h" #define MERCATOR_OFFSET 268435456 #define MERCATOR_RADIUS 85445659.44705395 @implementation MKMapView (ZoomLevel) #pragma mark - #pragma mark Map conversion methods - (double)longitudeToPixelSpaceX:(double)longitude { return round(MERCATOR_OFFSET + MERCATOR_RADIUS * longitude * M_PI / 180.0); } - (double)latitudeToPixelSpaceY:(double)latitude { return round(MERCATOR_OFFSET - MERCATOR_RADIUS * logf((1 + sinf(latitude * M_PI / 180.0)) / (1 - sinf(latitude * M_PI / 180.0))) / 2.0); } - (double)pixelSpaceXToLongitude:(double)pixelX { return ((round(pixelX) - MERCATOR_OFFSET) / MERCATOR_RADIUS) * 180.0 / M_PI; } - (double)pixelSpaceYToLatitude:(double)pixelY { return (M_PI / 2.0 - 2.0 * atan(exp((round(pixelY) - MERCATOR_OFFSET) / MERCATOR_RADIUS))) * 180.0 / M_PI; } #pragma mark - #pragma mark Helper methods - (MKCoordinateSpan)coordinateSpanWithMapView:(MKMapView *)mapView centerCoordinate:(CLLocationCoordinate2D)centerCoordinate andZoomLevel:(double)zoomLevel { NSLog(@"in custom zoomlevel--&gt;%f",zoomLevel); // convert center coordiate to pixel space double centerPixelX = [self longitudeToPixelSpaceX:centerCoordinate.longitude]; double centerPixelY = [self latitudeToPixelSpaceY:centerCoordinate.latitude]; // determine the scale value from the zoom level double zoomExponent = 20.0 - zoomLevel; double zoomScale = pow(2, zoomExponent); // scale the map’s size in pixel space CGSize mapSizeInPixels = mapView.bounds.size; double scaledMapWidth = mapSizeInPixels.width * zoomScale; double scaledMapHeight = mapSizeInPixels.height * zoomScale; // figure out the position of the top-left pixel double topLeftPixelX = centerPixelX - (scaledMapWidth / 2); double topLeftPixelY = centerPixelY - (scaledMapHeight / 2); // find delta between left and right longitudes CLLocationDegrees minLng = [self pixelSpaceXToLongitude:topLeftPixelX]; CLLocationDegrees maxLng = [self pixelSpaceXToLongitude:topLeftPixelX + scaledMapWidth]; CLLocationDegrees longitudeDelta = maxLng - minLng; // find delta between top and bottom latitudes CLLocationDegrees minLat = [self pixelSpaceYToLatitude:topLeftPixelY]; CLLocationDegrees maxLat = [self pixelSpaceYToLatitude:topLeftPixelY + scaledMapHeight]; CLLocationDegrees latitudeDelta = -1 * (maxLat - minLat); // create and return the lat/lng span MKCoordinateSpan span = MKCoordinateSpanMake(latitudeDelta, longitudeDelta); return span; } #pragma mark - #pragma mark Public methods - (void)setCenterCoordinate:(CLLocationCoordinate2D)centerCoordinate zoomLevel:(double)zoomLevel animated:(BOOL)animated { // clamp large numbers to 28 zoomLevel = MIN(zoomLevel, 28); // use the zoom level to compute the region MKCoordinateSpan span = [self coordinateSpanWithMapView:self centerCoordinate:centerCoordinate andZoomLevel:zoomLevel]; MKCoordinateRegion region = MKCoordinateRegionMake(centerCoordinate, span); // set the region like normal [self setRegion:region animated:animated]; } @end </code></pre> <p><code>#import "MKMapView+ZoomLevel.h"</code> statement in your view controller where MKMapView is taken.</p> <pre><code>- (void)mapView:(MKMapView *)mapView regionDidChangeAnimated:(BOOL)animated { double zoomLevel = [self getZoomLevel]; [lblCurrentLevel setText:[NSString stringWithFormat:@"%.2f",zoomLevel]]; NSLog(@"zoomlevel--&gt;%f long--&gt;%f lat--&gt;%f",zoomLevel,mapView.region.span.longitudeDelta,mapView.region.span.latitudeDelta); } - (double) getZoomLevel { return 21.00 - log2(objMapView.region.span.longitudeDelta * MERCATOR_RADIUS * M_PI / (180.0 * objMapView.bounds.size.width)); } </code></pre> <p>In above methods you can get zoom levels as desired, the only thing you have to do is maintain initial zoom and compare latest zoom in/out with that and assign again to that variable.</p> <p>In case of any query let me know we will work out on that :D</p> <p><strong>Edit</strong></p> <p>This source code is from <a href="http://troybrant.net/blog/2010/01/set-the-zoom-level-of-an-mkmapview/" rel="noreferrer">Troy's</a> Blog. Apologize for not mentioning before. </p>
    singulars
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. VO
      singulars
      1. This table or related slice is empty.
    2. VO
      singulars
      1. This table or related slice is empty.
    3. VO
      singulars
      1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload