经纬度和瓦片地图坐标对应关系本质上是由墨卡托投影实现

地图是显示在平面上的,因此需要将球面坐标转换为平面坐标,这个转换过程称为投影。最常见的投影是墨卡托(Mercator)投影,它具有等角性质,即球体上的两点之间的角度方位与平面上的两点之间的角度方位保持不变,因此特别适合用于导航。墨卡托于1569年提出的一种地球投影方法,该方法是圆柱投影的一种,又名”等角正轴圆柱投影”。

瓦片

经过Web墨卡托投影后,地图就变为平面的一张地图。考虑到有时候我们需要看宏观的地图信息(如世界地图里每个国家的国界),有时候又要看很微观的地图信息(如导航时道路的路况信息)。为此,我们对这张地图进行等级切分。在最高级(zoom=0),需要的信息最少,只需保留最重要的宏观信息,因此用一张256×256像素的图片表示即可;在下一级(zoom=1),信息量变多,用一张512×512像素的图片表示;以此类推,级别越低的像素越高,下一级的像素是当前级的4倍。这样从最高层级往下到最低层级就形成了一个金字塔坐标体系。

对每张图片,我们将其切分为256×256的图片,称为瓦片(Tile)。这样,在最高级(zoom=0)时,只有一个瓦片;在下一级(zoom=1)时有4个瓦片;在下一级(zoom=2)时有16个瓦片,以此类推

瓦片编码
瓦片生成后,就是一堆图片。怎么对这堆图片进行编号,是目前主流互联网地图商分歧最大的地方。总结起来分为四个流派:

  • 谷歌XYZ:Z表示缩放层级,Z=zoom;XY的原点在左上角,X从左向右,Y从上向下。
  • TMS:开源产品的标准,Z的定义与谷歌相同;XY的原点在左下角,X从左向右,Y从下向上。
  • QuadTree:微软Bing地图使用的编码规范,Z的定义与谷歌相同,同一层级的瓦片不用XY两个维度表示,而只用一个整数表示,该整数服从四叉树编码规则
  • 百度XYZ:Z从1开始,在最高级就把地图分为四块瓦片;XY的原点在经度为0纬度位0的位置,X从左向右,Y从下向上。
地图商 瓦片编码
高德地图 谷歌XYZ
谷歌地图 谷歌XYZ
OpenStreetMap 谷歌XYZ
腾讯地图 TMS
Bing地图 QuadTree
百度地图 百度XYZ

谷歌地图坐标转换公式

经纬度坐标(lon_deg, lat_rad)转瓦片坐标(xtile, ytile):

n = 2 ^ zoom
xtile = n * ((lon_deg + 180) / 360)
ytile = n * (1 - (log(tan(lat_rad) + sec(lat_rad)) / π)) / 2

python代码实现:

import math
def deg2num(lat_deg, lon_deg, zoom):lat_rad = math.radians(lat_deg)n = 2.0 ** zoomxtile = int((lon_deg + 180.0) / 360.0 * n)ytile = int((1.0 - math.asinh(math.tan(lat_rad)) / math.pi) / 2.0 * n)return (xtile, ytile)

瓦片坐标(xtile, ytile)转经纬度坐标(lon_deg, lat_rad):

n = 2 ^ zoom
lon_deg = xtile / n * 360.0 - 180.0
lat_rad = arctan(sinh(π * (1 - 2 * ytile / n)))
lat_deg = lat_rad * 180.0 / π

python代码实现:

import math
def num2deg(xtile, ytile, zoom):n = 2.0 ** zoomlon_deg = xtile / n * 360.0 - 180.0lat_rad = math.atan(math.sinh(math.pi * (1 - 2 * ytile / n)))lat_deg = math.degrees(lat_rad)return (lat_deg, lon_deg)

代码参考
Slippy map tilenames

介绍参考
瓦片坐标系学习笔记(ps. 该篇文章所列转换公式根据实际操作验证有误,以上篇参考文章中的公式为准)

瓦片地图坐标与经纬度换算公式python实现相关推荐

  1. Python调用高德地图API实现经纬度换算、地图可视化

    作者 | 糖甜甜甜 出品 | 经管人学数据分析 Python调用高德地图API实现经纬度换算.地图可视化 前地图可视化的工具和函数比较多,但是在不知道相关地点经纬度的情况下,通过python调用高德地 ...

  2. python 根据经纬度 调取和显示地图_Python调用高德地图API实现经纬度换算、地图可视化-站长资讯中心...

    目前地图可视化的工具和函数比较多,但是在不知道相关地点经纬度的情况下,通过python调用高德地图API实现经纬度换算,并且直接在高德地图新推出的轻量级可视化平台上实现一键式地图可视化,这其中需要申请 ...

  3. 你还在为高德地图找不到门牌号等详细地址而烦恼吗?你还在等什么——Python调用高德地图API实现经纬度换算、地图可视化

    Python调用高德地图API实现经纬度换算.地图可视化 前地图可视化的工具和函数比较多,但是在不知道相关地点经纬度的情况下,通过python调用高德地图API实现经纬度换算,并且直接在高德地图新推出 ...

  4. python调用高德地图api 可视化_Python调用高德地图API实现经纬度换算、地图可视化...

    前地图可视化的工具和函数比较多,但是在不知道相关地点经纬度的情况下,通过python调用高德地图API实现经纬度换算,并且直接在高德地图新推出的轻量级可视化平台上实现一键式地图可视化,这其中需要申请密 ...

  5. 瓦片地图坐标相关计算

    http://www.cnblogs.com/junyuz/archive/2011/04/19/2021035.html 瓦片地图坐标相关计算 在给定level下,把行号tileY和列号tileX转 ...

  6. qpython androidhelper 经纬度_Python调用高德地图API实现经纬度换算、地图可视化

    第二步:构造url参数获取经纬度 得到密钥后,可以在高德地图web服务API下的地理编码接口获取经纬度,地理编码/逆地理编码 API 是通过 HTTP/HTTPS 协议访问远程服务的接口,提供结构化地 ...

  7. python调用按键精灵插件_按键精灵自动寻路系列换算地图坐标寻路法

    金猪脚本(原飞猪脚本)以按键精灵教学为主,涉及UiBot,Python,Lua等脚本编程语言,教学包括全自动办公脚本,游戏辅助脚本,引流脚本,网页脚本,安卓脚本,IOS脚本,注册脚本,点赞脚本,阅读脚 ...

  8. 关于45°角度地图坐标的计算原理 - LVin_A

    首先贴出代码,下面的代码是将屏幕点击的坐标转换成45°角度地图中的坐标. -(CGPoint) tilePosFromLocation:(CGPoint)location tileMap:(CCTMX ...

  9. 经纬度坐标转换xy坐标 python_在Python中使用NewtonRaphson迭代将经纬度转换为xy Mollweide地图坐标...

    我试图编写一个程序,从用户那里获取一组经度和纬度坐标,将它们转换为Mollweide投影图的x&y坐标,然后报告这些坐标处的像素值(在本例中,是噪声温度).在 我使用的地图/数据是Haslam ...

最新文章

  1. 小蠢笔记:从继承特性来看构造函数
  2. springboot集成themeleaf报Namespace 'th' is not bound
  3. Til the Cows Come Home (最短路问题, 模板)
  4. 判断ipv6地址_#网络工程师#5分钟教你搞懂IPV6如何发现邻居
  5. DE1-LINUX运行
  6. 国密算法椭圆曲线参数
  7. Math(牛客多校第三场)
  8. bzoj1296 [SCOI2009]粉刷匠 区间dp+背包
  9. 基于卷积神经网络的人脸表情识别综述
  10. FL Studio20.9水果软件高级中文版电音编曲
  11. Winrar去广告图文教程
  12. 10种受欢迎的前后端相关开发工具
  13. FaceBook到底验证个啥?
  14. 《合约星期五》OKEx BTC季度合约 0726周报
  15. OpenCV-Python 中文教程15——OpenCV 中的轮廓
  16. ASP.NET Core: 全新的ASP.NET !
  17. 比MySQL快801倍,字节阿里争相 部署,真香!
  18. 微信小游戏|创建3D篮球小游戏项目
  19. gateway 内存溢出问题_内存溢出和内存泄漏、产生原因以及解决方案
  20. LambdaMART介绍

热门文章

  1. tp5实现paypal支付
  2. c语言 pragma code,关于#pragma CODE_SECTION的用法?
  3. 【FastAPI后台API 八】JWT token认证登陆
  4. CSS/HTML 改变鼠标指针形状
  5. 【机器学习】深度学习的三个概念:Epoch, Batch, Iteration
  6. angularjs中$scope是什么意思
  7. throw 和 throws 有什么区别
  8. 做外贸必知——你还不知道外贸拼箱技巧吗
  9. laravel的Validator使用
  10. 微信公众号个人中心,实现自动登录的问题