|
本帖最后由 地质BOSS 于 2017-10-18 17:30 编辑
最近用到了墨卡托坐标转换经纬度的需求,原理什么的不想多说,需要的可以查看这里:
麦卡托投影法
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;
- }
复制代码
参考:
http://www.thinkgis.cn/topic/54199646bcea5603e8016e1d
|
|