Skip to content

Commit

Permalink
0.0.1
Browse files Browse the repository at this point in the history
  • Loading branch information
BestKai authored and BestKai committed Jun 20, 2016
1 parent 2aaa344 commit 2fb220b
Show file tree
Hide file tree
Showing 13 changed files with 185 additions and 272 deletions.
2 changes: 0 additions & 2 deletions GCMessageKit.podspec
Original file line number Diff line number Diff line change
Expand Up @@ -14,8 +14,6 @@ Pod::Spec.new do |s|

s.dependency 'YYWebImage'
s.dependency 'YYText'
s.dependency 'AMap2DMap'
s.dependency 'AMapSearch'
s.dependency 'YAssetsPicker'
s.dependency 'SVProgressHUD'

Expand Down
16 changes: 16 additions & 0 deletions GCMessageKit/Category/MKMapView+Zoomlevel.h
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
96 changes: 96 additions & 0 deletions GCMessageKit/Category/MKMapView+Zoomlevel.m
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
24 changes: 0 additions & 24 deletions GCMessageKit/Controller/GCDisplayLocationViewController.h

This file was deleted.

212 changes: 0 additions & 212 deletions GCMessageKit/Controller/GCDisplayLocationViewController.m

This file was deleted.

1 change: 0 additions & 1 deletion GCMessageKit/Controller/GCMessageTableViewController.h
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,6 @@
#import "GCOtherMessageInputView.h"
#import "GCTakePhotographHelper.h"
#import "YImagePickerNavController.h"
#import "GCDisplayLocationViewController.h"

#import "GCVoiceRecordHelper.h"
#import "GCAddressBookHelper.h"
Expand Down
Loading

0 comments on commit 2fb220b

Please sign in to comment.