免费视频|新人指南|投诉删帖|广告合作|地信网APP下载

查看: 5347|回复: 7
收起左侧

[经验共享] 墨卡托坐标与经纬度相互转换的方法

[复制链接]

155

主题

4871

铜板

3

好友

地信专家组

Rank: 14Rank: 14Rank: 14Rank: 14

积分
2288
发表于 2017-10-18 17:29 | 显示全部楼层 |阅读模式
本帖最后由 地质BOSS 于 2017-10-18 17:30 编辑

最近用到了墨卡托坐标转换经纬度的需求,原理什么的不想多说,需要的可以查看这里:

麦卡托投影法

Web Mercator

墨卡托坐标与经纬度相互转换的方法

墨卡托坐标与经纬度相互转换的方法


经纬度转Wev墨卡托

版本1
  1. dvec3 CMathEngine::lonLat2WebMercator(dvec3  lonLat)  
  2. {  
  3.     dvec3  mercator;  
  4.     double x = lonLat.x *20037508.34/180;  
  5.     double y = log(tan((90+lonLat.y)*PI/360))/(PI/180);  
  6.     y = y *20037508.34/180;  
  7.     mercator.x = x;  
  8.     mercator.y = y;  
  9.     return mercator ;  
  10. }
复制代码

版本2
  1. (CGPoint )lonLat2Mercator:(CGPoint ) lonLat{
  2.     CGPoint mercator;
  3.     double x = lonLat.x *20037508.34/180;
  4.     double  y = log(tan((90+lonLat.y)*M_PI/360))/(M_PI/180);
  5.     y = y *20037508.34/180; mercator.x = x; mercator.
  6.     y = y; return mercator ;
  7. }
复制代码

版本3
  1. function lonlat2mercator(lonlat)
  2. {   
  3.     var mercator={x:0,y:0};
  4.     var x = lonlat.x *20037508.34/180;  
  5.     var y = Math.log(Math.tan((90+lonlat.y)*Math.PI/360))/(Math.PI/180);
  6.     y = y *20037508.34/180;
  7.     mercator.x = x;
  8.     mercator.y = y;
  9.     return mercator ;
  10. }
复制代码

Web墨卡托转经纬度

版本1
  1. dvec3 CMathEngine::WebMercator2lonLat( dvec3   mercator )  
  2. {  
  3.     dvec3 lonLat;  
  4.     double x = mercator.x/20037508.34*180;  
  5.     double y = mercator.y/20037508.34*180;  
  6.     y= 180/PI*(2*atan(exp(y*PI/180))-PI/2);  
  7.     lonLat.x = x;  
  8.     lonLat.y = y;  
  9.     return lonLat;  
  10. }  
复制代码

版本2
  1. (CGPoint )Mercator2lonLat:(CGPoint ) mercator
  2. {
  3.     CGPoint lonLat;
  4.     double x = mercator.x/20037508.34*180;
  5.     double y = mercator.y/20037508.34*180;
  6.     y= 180/M_PI*(2*atan(exp(y*M_PI/180))-M_PI/2);
  7.     lonLat.x = x; lonLat.y = y;
  8.     return lonLat;
  9. }
复制代码

版本3
  1. function mercator2lonlat(mercator){
  2.     var lonlat={x:0,y:0};   
  3.     var x = mercator.x/20037508.34*180;
  4.     var y = mercator.y/20037508.34*180;
  5.     y= 180/Math.PI*(2*Math.atan(Math.exp(y*Math.PI/180))-Math.PI/2);
  6.     lonlat.x = x;   lonlat.y = y;   return lonlat;
  7. }
复制代码

参考:
http://www.thinkgis.cn/topic/54199646bcea5603e8016e1d
头像被屏蔽

141

主题

980万

铜板

3万

好友

管理员

Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20

积分
627184
发表于 2017-10-18 17:33 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

21

主题

9万

铜板

83

好友

地信学员

开开心心每一天

Rank: 12Rank: 12Rank: 12

积分
12751
发表于 2017-10-18 23:15 | 显示全部楼层
謝謝分享好好學習一下
回复 支持 反对

使用道具 举报

10

主题

1万

铜板

21

好友

资深会员

Rank: 18Rank: 18Rank: 18Rank: 18Rank: 18

积分
3816
发表于 2021-11-13 21:29 | 显示全部楼层
感谢分享!
回复

使用道具 举报

30

主题

2万

铜板

59

好友

钻石会员

Rank: 26Rank: 26Rank: 26Rank: 26Rank: 26Rank: 26Rank: 26

积分
6283
QQ
发表于 2022-1-23 21:37 | 显示全部楼层
感谢分享:mg
回复 支持 反对

使用道具 举报

0

主题

549

铜板

1

好友

技术员

Rank: 3Rank: 3

积分
57
发表于 2022-1-24 12:24 | 显示全部楼层
回复是对楼主最基本的尊重!!!
回复 支持 反对

使用道具 举报

1

主题

1万

铜板

2

好友

黄金会员

Rank: 23Rank: 23Rank: 23Rank: 23Rank: 23Rank: 23Rank: 23

积分
5180
发表于 2022-11-27 16:03 | 显示全部楼层
谢谢楼主分享
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

在线客服
快速回复 返回顶部 返回列表