Maps Tile 相关计算

在线地图大部分采用Mercator projection(墨卡托投影),墨卡托投影的等角特性,保证了对象的形状的不变行,正方形的物体投影后不会变为长方形。等角也保证了方向和相互位置的正确性,因此在航海和航空中常常应用,在线地图也利用此特性,在计算人们查询地物的方向时不会出错。但是,等角不可避免的带来的面积的巨大变形,特别是两极地区,但是对我们常规的使用已经足够了。

但是在线地图大部分不是采用标准的Mercator projection(等角正切),姑且称为Web墨卡托投影。

X轴:由于赤道半径为6378137米,则赤道周长为2*PI*r = 2*20037508.3427892,因此X轴的取值范围:[-20037508.3427892,20037508.3427892]。

Y轴:当纬度φ接近两极,即90°时,y值趋向于无穷。这是那些懒惰的工程师就把Y轴的取值范围也限定在[-20037508.3427892,20037508.3427892]之间,搞个正方形。

因此在投影坐标系(米)下的范围是:最小(-20037508.3427892, -20037508.3427892 )到最大 (20037508.3427892, 20037508.3427892)

经过反计算,可得到纬度85.05112877980659。因此纬度取值范围是[-85.0511287798065985.05112877980659]

地理坐标系(经纬度)对应的范围是:最小(-180,-85.05112877980659),最大(180, 85.05112877980659)

Ground Resolution,地面分辨率,类似Spatial Resolution(空间分辨率),我们这里主要关注用象元(pixel size)表示的形式:一个像素(pixel)代表的地面尺寸(米)。以Virtual Earth为例,Level为1时,图片大小为512*512(4个Tile),那么赤道空间分辨率为:赤道周长/512。其他纬度的空间分辨率则为纬度圈长度/512,极端的北极则为0。Level为2时,赤道的空间分辨率为 赤道周长/1024,其他纬度为 纬度圈长度1024。很明显,Ground Resolution取决于两个参数,缩放级别Level和纬度latitude ,Level决定像素的多少,latitude决定地面距离的长短。地面分辨率的公式为,单位:米/像素:

ground resolution = (cos(latitude * pi/180) * 2 * pi * 6378137 meters) / (256 * 2level pixels)

Map Scale,即地图比例尺,图上距离比实地距离,两者单位一般都是米。在Ground Resolution的计算中,由Level可得到图片的像素大小,那么需要把其转换为以米为单位的距离,涉及到DPI(dot per inch),暂时可理解为类似的PPI(pixelper inch),即每英寸代表多少个像素。256 * 2level / DPI 即得到相应的英寸inch,再把英寸inch除以0.0254转换为米。实地距离仍旧是:cos(latitude * pi/180) * 2 * pi * 6378137 meters; 因此比例尺的公式为,一般都化为1:XXX,无单位:

map scale = 1 : ground resolution * screen dpi / 0.0254 meters/inch

 = 256 * 2level / screen dpi / 0.0254 / (cos(latitude * pi/180) * 2 * pi * 6378137)

= 1 : (cos(latitude * pi/180) * 2 * pi * 6378137 * screen dpi) / (256 * 2level * 0.0254)

Quadkeys计算

比如第三级的(3,5)

tileX = 3 = 011 2

tileY = 5 = 101 2

quadkey = 100111 2 = 2134 = “213”

下图中的规律自己看,不解释


原文地址:https://www.cnblogs.com/junyuz/p/2009131.html