iOS Developer

使用苹果系统自带的地图,火星坐标转换

2016-04-07  本文已影响391人  ShiyongTan

#import"CommonMapWGS.h"

@implementationCommonMapWGS

//china GPS correct

//World Geodetic System ==> Mars Geodetic System

//translate from csharp:https://on4wp7.codeplex.com/SourceControl/changeset/view/21483#353936

constdoublea =6378245.0;

constdoubleee =0.00669342162296594323;

+(CLLocationCoordinate2D)wgs84ToGcj02:(CLLocationCoordinate2D)wgCoord{

if([selfoutOfChina:wgCoord.latitudelng:wgCoord.longitude]) {

returnwgCoord;

}

doublewgLon = wgCoord.longitude;

doublewgLat =wgCoord.latitude;

doubledLat = [selftransformLat: wgLon -105.0y: wgLat -35.0];

doubledLon = [selftransformLon: wgLon -105.0y: wgLat -35.0];

doubleradLat = wgLat /180.0*M_PI;

doublemagic =sin(radLat);

magic =1-ee* magic * magic;

doublesqrtMagic =sqrt(magic);

dLat = (dLat *180.0) / ((a* (1-ee)) / (magic * sqrtMagic) *M_PI);

dLon = (dLon *180.0) / (a/ sqrtMagic *cos(radLat) *M_PI);

doublemgLat = wgLat + dLat;

doublemgLon = wgLon + dLon;

returnCLLocationCoordinate2DMake(mgLat, mgLon);

}

+(BOOL)outOfChina:(double)latlng:(double)lng {

if(lng <72.004|| lng >137.8347){

returnYES;

}

if(lat <0.8293|| lat >55.8271){

returnYES;

}

returnNO;

};

+(double)transformLat:(double)x y:(double)y{

doubleret = -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;

returnret;

}

+(double)transformLon:(double)xy:(double)y{

doubleret =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;

returnret;

}

@end

上一篇下一篇

猜你喜欢

热点阅读