ios 定位经纬度中国国内修正

CommonMapWGS.h

#import <Foundation/Foundation.h>
#import <MapKit/MapKit.h>
#import "MyAnnotation.h"

@interface CommonMapWGS : NSObject

+(CLLocationCoordinate2D)wgs84ToGcj02:(CLLocationCoordinate2D)wgCoord;

@end

CommonMapWGS.m

#import "CommonMapWGS.h"

@implementation CommonMapWGS

const double a = 6378245.0;
const double ee = 0.00669342162296594323;
+(CLLocationCoordinate2D)wgs84ToGcj02:(CLLocationCoordinate2D)wgCoord{
    if ([self outOfChina:wgCoord.latitude lng:wgCoord.longitude]) {
        return wgCoord;
    }
    
    double wgLon = wgCoord.longitude;
    double wgLat =  wgCoord.latitude;
    double dLat = [self transformLat: wgLon - 105.0  y: wgLat - 35.0];
    double dLon = [self transformLon: wgLon - 105.0  y: wgLat - 35.0];
    double radLat = wgLat / 180.0 * M_PI;
    double magic = sin(radLat);
    magic = 1 - ee * magic * magic;
    double sqrtMagic = sqrt(magic);
    dLat = (dLat * 180.0) / ((a * (1 - ee)) / (magic * sqrtMagic) * M_PI);
    dLon = (dLon * 180.0) / (a / sqrtMagic * cos(radLat) * M_PI);
    double mgLat = wgLat + dLat;
    double mgLon = wgLon + dLon;
    return CLLocationCoordinate2DMake(mgLat, mgLon);
}

+(BOOL)outOfChina:(double)lat  lng:(double)lng {
    
    if (lng < 72.004 || lng > 137.8347){
        return YES;
    }
    
    if (lat < 0.8293 || lat > 55.8271){
        return YES;
    }
    
    return NO;
};

+(double)transformLat:(double)x y:(double)y{
    
    double ret = -100.0 + 2.0 * x + 3.0 * y + 0.2 * y * y + 0.1 * x * y + 0.2 * sqrt(fabs(x));
    ret += (20.0 * sin(6.0 * x * M_PI) + 20.0 * sin(2.0 * x * M_PI)) * 2.0 / 3.0;
    ret += (20.0 * sin(y * M_PI) + 40.0 * sin(y / 3.0 * M_PI)) * 2.0 / 3.0;
    ret += (160.0 * sin(y / 12.0 * M_PI) + 320 * sin(y * M_PI / 30.0)) * 2.0 / 3.0;
    return ret;
}

+(double)transformLon:(double)x  y:(double)y{
    double ret = 300.0 + x + 2.0 * y + 0.1 * x * x + 0.1 * x * y + 0.1 * sqrt(fabs(x));
    ret += (20.0 * sin(6.0 * x * M_PI) + 20.0 * sin(2.0 * x * M_PI)) * 2.0 / 3.0;
    ret += (20.0 * sin(x * M_PI) + 40.0 * sin(x / 3.0 * M_PI)) * 2.0 / 3.0;
    ret += (150.0 * sin(x / 12.0 * M_PI) + 300.0 * sin(x / 30.0 * M_PI)) * 2.0 / 3.0;
    return ret;
}

@end


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值