最近用到了墨卡託坐標轉換經緯度的需求,原理什麼的不想多說,需要的可以查看這裡:
麥卡託投影法
Web Mercator
經緯度轉Wev墨卡託版本1
dvec3 CMathEngine::lonLat2WebMercator(dvec3 lonLat) { dvec3 mercator; double x = lonLat.x *20037508.34/180; double y = log(tan((90+lonLat.y)*PI/360))/(PI/180); y = y *20037508.34/180; mercator.x = x; mercator.y = y; return mercator ; }
版本2
(CGPoint )lonLat2Mercator:(CGPoint ) lonLat{ CGPoint mercator; double x = lonLat.x *20037508.34/180; double y = log(tan((90+lonLat.y)*M_PI/360))/(M_PI/180); y = y *20037508.34/180; mercator.x = x; mercator. y = y; return mercator ;}
版本3
function lonlat2mercator(lonlat){ var mercator={x:0,y:0}; var x = lonlat.x *20037508.34/180; var y = Math.log(Math.tan((90+lonlat.y)*Math.PI/360))/(Math.PI/180); y = y *20037508.34/180; mercator.x = x; mercator.y = y; return mercator ; }
Web墨卡託轉經緯度版本1
dvec3 CMathEngine::WebMercator2lonLat( dvec3 mercator ) { dvec3 lonLat; double x = mercator.x/20037508.34*180; double y = mercator.y/20037508.34*180; y= 180/PI*(2*atan(exp(y*PI/180))-PI/2); lonLat.x = x; lonLat.y = y; return lonLat; }
版本2
(CGPoint )Mercator2lonLat:(CGPoint ) mercator{ CGPoint lonLat; double x = mercator.x/20037508.34*180; double y = mercator.y/20037508.34*180; y= 180/M_PI*(2*atan(exp(y*M_PI/180))-M_PI/2); lonLat.x = x; lonLat.y = y; return lonLat;}
版本3
function mercator2lonlat(mercator){ var lonlat={x:0,y:0}; var x = mercator.x/20037508.34*180; var y = mercator.y/20037508.34*180; y= 180/Math.PI*(2*Math.atan(Math.exp(y*Math.PI/180))-Math.PI/2); lonlat.x = x; lonlat.y = y; return lonlat;}
參考: