✅ 操作成功!

火星坐标

发布时间:2023-06-16 作者:admin 来源:文学

火星坐标

火星坐标

-

2023年3月19日发(作者:91卫星助手)

swiftLocationManager坐标偏移WGS-84转GCJ-02(⽕星坐标)

importFoundation

importMapKit

classLocationUtils{

classfuncisCoordinateOutOfChina(coordinate:CLLocationCoordinate2D)->Bool{

ude137.8347||de55.8271

}

classfunctransformToGCJ(fromWGSwgsLoc:CLLocationCoordinate2D)->CLLocationCoordinate2D{

leta=6378245.0;

letee=0.96594323;

letpi=3.979324;

functransformLat(x:CLLocationDegrees,y:CLLocationDegrees)->CLLocationDegrees{

varlat:CLLocationDegrees=-100.0+2.0*x+3.0*y

lat+=0.2*y*y

lat+=0.1*x*y+0.2*sqrt(abs(x))

lat+=(20.0*sin(6.0*x*pi)+20.0*sin(2.0*x*pi))*2.0/3.0

lat+=(20.0*sin(y*pi)+40.0*sin(y/3.0*pi))*2.0/3.0

lat+=(160.0*sin(y/12.0*pi)+320*sin(y*pi/30.0))*2.0/3.0

returnlat;

}

functransformLog(x:CLLocationDegrees,y:CLLocationDegrees)->CLLocationDegrees{

varlon:CLLocationDegrees=300.0+x+2.0*y+0.1*x*x

lon+=0.1*x*y+0.1*sqrt(abs(x))

lon+=(20.0*sin(6.0*x*pi)+20.0*sin(2.0*x*pi))*2.0/3.0

lon+=(20.0*sin(x*pi)+40.0*sin(x/3.0*pi))*2.0/3.0

lon+=(150.0*sin(x/12.0*pi)+300.0*sin(x/30.0*pi))*2.0/3.0

returnlon;

}

varadjustLat=transformLat(ude-105.0,de-35.0);

varadjustLon=transformLog(ude-105.0,de-35.0);

varradLat=de/180.0*pi;

varmagic=sin(radLat);

magic=1-ee*magic*magic;

varsqrtMagic=sqrt(magic);

adjustLat=(adjustLat*180.0)/((a*(1-ee))/(magic*sqrtMagic)*pi);

adjustLon=(adjustLon*180.0)/(a/sqrtMagic*cos(radLat)*pi);

returnCLLocationCoordinate2D(latitude:de+adjustLat,longitude:ude+adjustLon);

}

}

publicextensionCLLocationCoordinate2D{

funcadjust()->CLLocationCoordinate2D{

dinateOutOfChina(self)?self:ormToGCJ(fromWGS:self)

}

}

直接贴代码,参考了

简单封装了下,

⼯具类+扩展类,适⽤于各种地⽅,建议⼤家把这个直接放到⾃⼰的library⾥⾯

⽤的时候这样:

varnewLocation=CLLocation

varadjustedCoordinate=()

varregion=MKCoordinateRegionMakeWithDistance(adjustedCoordinate,100,100)

ion(region,animated:true)

本来想扩展CLLocation的conventioninit函数,直接修改接收到的location,但它⾥⾯的init都是protected,没法实现,算了

👁️ 阅读量:0