如何用python实现百度地图墨卡托坐标跟经纬度坐标互转?

2014-01-01 18:13:18 +08:00
 pc10201
从百度地图的js中获取到了一部分数据

"name":"多味小吃店(荣华东道)","overall_rating":"3.5","pc_bookable":0,"phone":"(021)62088786","poi_address":"上海长宁区荣华东道19弄1楼3号C室(近水城南路)","point":{"x":13514570.1,"y":3636377.2},"price":"40","service_rating":"3","shop_hours_flag":1,"tag":"美食,韩国料理,古北","wap_bookable":0},"src_name":"cater"}

里面的point":{"x":13514570.1,"y":3636377.2}数据转换成坐标即是
121.39532, 31.19393

如何用python实现百度地图墨卡托坐标跟经纬度坐标互转?
最好是不用百度的API,直接计算
11931 次点击
所在节点    Python
8 条回复
zavior
2014-01-01 20:11:42 +08:00
其实。。这样转换违反国家相关法律
est
2014-01-01 20:16:38 +08:00
lazycat
2014-01-02 00:01:56 +08:00
@zavior 为什么。。。
dancingbear
2014-01-02 00:09:40 +08:00
没有这样的逆向算法吧
zavior
2014-01-02 13:45:57 +08:00
@lazycat 因为奇葩天朝法律规定,地图的坐标必须有偏移,任何从火星坐标转换回地球坐标的行为都是违法的。
phyng
2014-01-02 21:46:31 +08:00
import math

mercator = {"x":13514570.1, "y":3636377.2}
lonlat = {}

x = mercator['x']/ 20037508.3427892 * 180
y = mercator['y']/ 20037508.3427892 * 180

lonlat['x'] = x
lonlat['y'] = 180 / math.pi * (2 * math.atan(math.exp(y * math.pi / 180)) - math.pi / 2)

print lonlat

这样得到的结果是{'y': 31.027932178384102, 'x': 121.40344879134716}
有误差可能出在20037508.3427892以及math.pi

偏移问题不是指这个,偏移是实际坐标要经过我朝保密插件处理成假坐标,而墨卡托坐标跟经纬度坐标互转是有公开算法的对地球的不同表示。参考http://www.cnblogs.com/liongg/archive/2009/04/20/1439905.html
http://bbs.esrichina-bj.cn/esri/viewthread.php?tid=78245
pc10201
2014-01-03 09:22:01 +08:00
@phyng "point":{"x":13514570.1,"y":3636377.2}请问这个坐标到底是国际的墨卡托坐标还是我朝加密后的火星坐标?
phyng
2014-01-03 13:43:44 +08:00

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/95296

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX