百度地图瓦片切片规则

谷歌、高德、天地图、OSM、腾讯等的瓦片组织模式参见:https://blog.csdn.net/sinat_41310868/article/details/115561425

这篇文章单独说一下百度地图的瓦片组织规则。

相对于谷歌等地图的瓦片地图切片规则,百度的瓦片差异主要在如下两个方面:

1.瓦片坐标系原点由东经180°,南纬85.05°,变为了东经0°,北纬0°,既赤道与格林尼治经线的交点。

2.Y轴由向下,变为向上,既Y由南向北。

原点也变了,坐标轴也转向了,百度地图这个瓦片切片模式,的确是让人挺困惑的,就跟BD09坐标的存在一样,令人困惑double。

下图是在zoom level为3的时候,百度地图的瓦片分布,从瓦片坐标(0,0)开始,x和y都是正数的时候,是东北半球,西半球和南半球的瓦片x和y是负数。

百度地图zoom level最小值是3,最大值是21。

 

之前已经在坐标系与投影中介绍了百度地图的坐标系与投影,https://blog.csdn.net/sinat_41310868/article/details/115551276,基于百度地图与众不同的坐标系、投影、切片方式,经纬度坐标与瓦片坐标之间的转换,也要比正常的地图瓦片复杂一些。

首先,需要将经纬度坐标投影到平面坐标,根据平面坐标计算出瓦片坐标,在还原的时候,也需要根据平面坐标进行中转。

百度地图瓦片在zoom level为18的时候,其像素分辨率是1m/pixel,可推出像素分辨率的计算公式为:

resolution=2^( 18-z) m/pixel

其中z是zoom level。

百度地图瓦片的投影平面坐标起点为(0,0)。

当瓦片尺寸为256*256pixel的时候,瓦片坐标(tileX,tileY)的计算公式为:

tileX=int(x*2^(z-18)/256)

tileY=int(y*2^(z-18)/256)

其中,x和y是平面投影坐标,z是zoom level。

知道了在zoom level为18的时候,像素分辨率为1m/pixel,坐标原点为(0,0),一切就都豁然开朗了。

平面投影坐标(x,y)转瓦片像素坐标(pixelX,pixelY)的公式:

pixelX=x*2^(z-18)-int(x*2^(z-18)/256)*256

pixelY=y*2^(z-18)-int(y*2^(z-18)/256)*256

其中z是zoom level。

瓦片坐标(tileX,tileY)加上像素坐标(pixelX,pixelY),转平面投影坐标(x,y)的公式:

x=(tileX*256+pixelX)*2^(18-z)

y=(tileY*256+pixelY)*2^(18-z)

其中z是zoom level。

因为BD09坐标系是极坐标加常量二次加密GCJ02坐标系获得的,所以它的墨卡托投影需要分区间进行修正。它的参考椭球也是变形的,根据计算可知道,它的赤道半径是6378206米,扁率应该可以还用WGS84椭球的扁率1/298.257223565。

百度地图瓦片平面投影坐标x最大值为20037726m, y最大值为12474104m。

梳理完百度地图瓦片规则,真的还是很让人困惑,从BD09坐标系,到BD09MC投影,到独树一帜的瓦片规则,百度地图为什么要搞得这么绕来绕去呢?

这么复杂,一般人搞不出来,但为什么要搞这么复杂呢?理应是一个通用服务,为啥弄得这么遗世独立呢?

真的很困惑triple。

把坐标系转换、投影、瓦片坐标、像素坐标的计算方法写成了python代码,如下:

import math
x_pi = 3.14159265358979324 * 3000.0 / 180.0
pi = 3.1415926535897932384626  # π
a = 6378245.0  # 长半轴
ee = 0.006693421
  • 6
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值