mirror of
https://github.com/Swiftgram/Telegram-iOS.git
synced 2025-06-16 05:55:20 +00:00
44 lines
1.6 KiB
Objective-C
44 lines
1.6 KiB
Objective-C
#import "TGLocationUtils.h"
|
|
|
|
const NSInteger TGGoogleMapsOffset = 268435456;
|
|
const CGFloat TGGoogleMapsRadius = TGGoogleMapsOffset / (CGFloat)M_PI;
|
|
|
|
@implementation TGLocationUtils
|
|
|
|
+ (CLLocationCoordinate2D)adjustGMapCoordinate:(CLLocationCoordinate2D)coordinate withPixelOffset:(CGPoint)offset zoom:(NSInteger)zoom
|
|
{
|
|
return CLLocationCoordinate2DMake([self adjustGMapLatitude:coordinate.latitude withPixelOffset:(NSInteger)offset.y zoom:zoom], [self adjustGMapLongitude:coordinate.longitude withPixelOffset:(NSInteger)offset.x zoom:zoom]);
|
|
}
|
|
|
|
+ (CLLocationDegrees)adjustGMapLatitude:(CLLocationDegrees)latitude withPixelOffset:(NSInteger)offset zoom:(NSInteger)zoom
|
|
{
|
|
return [self _yToLatitude:([self _latitudeToY:latitude] + (offset << (21 - zoom)))];
|
|
}
|
|
|
|
+ (CLLocationDegrees)adjustGMapLongitude:(CLLocationDegrees)longitude withPixelOffset:(NSInteger)offset zoom:(NSInteger)zoom
|
|
{
|
|
return [self _xToLongitude:([self _longitudeToX:longitude] + (offset << (21 - zoom)))];
|
|
}
|
|
|
|
+ (NSInteger)_latitudeToY:(CLLocationDegrees)latitude
|
|
{
|
|
return (NSInteger)round(TGGoogleMapsOffset - TGGoogleMapsRadius * log((1 + sin(latitude * M_PI / 180.0)) / (1 - sin(latitude * M_PI / 180.0))) / 2);
|
|
}
|
|
|
|
+ (CLLocationDegrees)_yToLatitude:(NSInteger)y
|
|
{
|
|
return (M_PI_2 - 2 * atan(exp((y - TGGoogleMapsOffset) / TGGoogleMapsRadius))) * 180.0 / M_PI;
|
|
}
|
|
|
|
+ (NSInteger)_longitudeToX:(CLLocationDegrees)longitude
|
|
{
|
|
return (NSInteger)round(TGGoogleMapsOffset + TGGoogleMapsRadius * longitude * M_PI / 180);
|
|
}
|
|
|
|
+ (CLLocationDegrees)_xToLongitude:(NSInteger)x
|
|
{
|
|
return (x - TGGoogleMapsOffset) / TGGoogleMapsRadius * 180.0 / M_PI;
|
|
}
|
|
|
|
@end
|