-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
BestKai
authored and
BestKai
committed
Jun 20, 2016
1 parent
2aaa344
commit 2fb220b
Showing
13 changed files
with
185 additions
and
272 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,16 @@ | ||
// | ||
// MKMapView+Zoomlevel.h | ||
// GCMessageKitDemo | ||
// | ||
// Created by BestKai on 16/6/20. | ||
// Copyright © 2016年 BestKai. All rights reserved. | ||
// | ||
|
||
#import <MapKit/MapKit.h> | ||
|
||
@interface MKMapView (Zoomlevel) | ||
|
||
- (void)setCenterCoordinate:(CLLocationCoordinate2D)centerCoordinate | ||
zoomLevel:(NSUInteger)zoomLevel | ||
animated:(BOOL)animated; | ||
@end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,96 @@ | ||
// | ||
// MKMapView+Zoomlevel.m | ||
// GCMessageKitDemo | ||
// | ||
// Created by BestKai on 16/6/20. | ||
// Copyright © 2016年 BestKai. All rights reserved. | ||
// | ||
|
||
#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:(NSUInteger)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 | ||
NSInteger zoomExponent = 20 - 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:(NSUInteger)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 |
This file was deleted.
Oops, something went wrong.
212 changes: 0 additions & 212 deletions
212
GCMessageKit/Controller/GCDisplayLocationViewController.m
This file was deleted.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.