Web墨卡托投影与地图瓦片系统
地图提供了一个用户可以直接操纵平移和缩放的世界地图。为了使这种交互尽可能快速和响应, 我们选择在不同显示级别上预先渲染地图, 并将每张地图切成块以快速检索和显示。本文介绍了地图瓦片的投影、坐标系和寻址方案
地图投影
为了使地图无缝, 并确保来自不同来源的图像正确地排列, 我们必须对整个世界使用一个单一的投影。我们选择使用墨卡托投影。网络在线地图所使用的地图投影,常被称作Web Mercator(web墨卡托投影)或Spherical Mercator(球面墨卡托投影),它与常规墨卡托投影的主要区别就是把地球模拟为球体而非椭球体。
墨卡托(Mercator)投影,又名“等角正轴圆柱投影”,荷兰地图学家墨卡托(Mercator)在1569年拟定,假设地球被围在一个中空的圆柱里,其赤道与圆柱相接触,然后再假想地球中心有一盏灯,把球面上的图形投影到圆柱体上,再把圆柱体展开,这就是一幅标准纬线为零度(即赤道)的“墨卡托投影”绘制出的世界地图。
墨卡托投影的“等角”特性,保证了方向和相互位置的正确性,因此在航海和航空中常常应用,而Google们在计算人们查询地物的方向时不会出错。
墨卡托投影的“圆柱”特性,保证了南北(纬线)和东西(经线)都是平行直线,并且相互垂直。而且等角间隔的平面经线间隔是相同的,等角间隔的平面纬线间隔从标准纬线(此处是赤道,也可能是其他纬线)向两级逐渐增大。
但是,“等角”不可避免的带来的面积的巨大变形,特别是两极地区,明显的如格陵兰岛比实际面积扩大了N倍。不过要是去两极地区,不会来查看网络地图的。
为了简化计算,我们使用该投影的球形而不是椭球形式。由于投影仅用于地图显示,而不是用于显示数字坐标,因此我们不需要椭球投影的额外精度。球形投影在Y方向上导致约0.33%的比例失真,特别是比例尺越大,地物更详细的时候,差别基本可以忽略。
我们知道 WGS 1984 是一个长半轴(a)为6378137,短半轴(b)为6356752.314245179 的椭球体,扁率(f)为298.257223563,f=(a-b)/a 。
Web Mercator 坐标系使用的投影方法不是严格意义的墨卡托投影,而是一个被 EPSG(European Petroleum Survey Group)称为伪墨卡托的投影方法。
因为这个坐标系统是 Google Map 最先使用的,或者更确切地说,是Google 最先发明的。在投影过程中,将表示地球的参考椭球体近似的作为正球体处理(正球体半径 R = 椭球体半长轴 a)。这也是为什么在 ArcGIS 中经常看到这个坐标系叫 WGS 1984 Web Mercator (Auxiliary Sphere)。Auxiliary Sphere 就是在告知你,这个坐标在投影过程中,将椭球体近似为正球体做投影变换,虽然基准面是WGS 1984 椭球面。
后来,Web Mercator 在 Web 地图领域被广泛使用,尽管这个坐标系由于精度问题一度不被GIS专业人士接受,但最终 EPSG 还是给了 WKID:3857
Web墨卡托投影坐标系:
以整个世界范围,赤道作为标准纬线,本初子午线作为中央经线(即0度经线),两者交点
为坐标原点,向东向北为正,向西向南为负。
X轴:由于赤道半径为6378137米,则赤道周长为2*PI*r = 2*20037508.3427892,因此X轴的取值范围:[-20037508.3427892,20037508.3427892]。
Y轴:由墨卡托投影的公式可知,同时上图也有示意,当纬度φ接近两极,即90°时,y值趋向于无穷。这时那些“懒惰的工程师”就把Y轴的取值范围也限定在[-20037508.3427892,20037508.3427892]之间,搞个正方形。
因此在投影坐标系(米)范围是:
X轴[-20037508.3427892,20037508.3427892],Y轴[-20037508.3427892,20037508.3427892]
对应的地理坐标系:
经度:取全球范围:[-180,180]
纬度:上面已知,纬度不可能到达90°,懒人们为了正方形而取的20037508.3427892,经过
反计算,可得到纬度85.05112877980659。因此纬度取值范围是:[-85.05112877980659,85.05112877980659]
实际:经度 [-180,180] 纬度[-85.05,85.05]
因此,地理坐标系(经纬度)对应的范围是:最小(-180,-85.05112877980659),最大(180, 85.05112877980659)。
设地球表面A点经纬坐标(单位:弧度)为(a,b),对应的投影坐标(单位:米)为(x,y),r为地球半径(6378137);墨卡托投影方程式为:
x=r*a a=x/r
y=r*ln(tan(π/4+b/2)) b=2*(arctan(e^(y/r))-π/4)
地图分辨率与地图比例尺
除了投影之外, 还必须说明地面分辨率或地图刻度比例尺来渲染地图。在最低缩放级别 level 1时, 映射为512x512像素。然后,在每一个连续的放大级别, 地图的宽度和高度增长的因子
为2,例如级别2为1024x1024像素, 级别3为2048x2048像素, 级别4为4096x4096像素, 等等。通常, 映射的宽度和高度 (以像素为单位) 可以计算为:
地图宽度(map-width) = 地图高度(map-height) = 256*2^level pixels(像素)
地图分辨率是指在地图上由一个像素表示的地面上的距离。例如, 在地面分辨率为10米/像素, 每个像素代表一个地面距离10米。地面分辨率的变化取决于缩放级别level和测量的纬度。r为地球半径(6378137), 纬度为b(单位:弧度)的地面分辨率 (单位:米) 可以计算为:
地图分辨率(ground-resolution)=cos(b)*地球周长/地图宽度=(cos(b)*2*π*r)/(256*2^level)
地图比例尺是指地图上的距离和地面实际距离之间的比率(用相同测量单位)。例如, 在地图的比例为 1: 10万, 地图上的每一寸都代表了10万英寸的地面距离。与分辨率地图一样, 地图比例尺随缩放级别level和纬度b(单位:弧度)而变化。它可以由地面分辨率计算出来, 屏幕分辨率为每英寸点数, 通常为96dpi:
地图比例尺(map scale)= 1:地图分辨率*屏幕分辨率/0.0254 = 1:(cos(b)*2*π* r*96) / (256*2^level*0.0254)
像素坐标
根据每个缩放级别的比例和投影, 我们可以将经纬度地理坐标转换为像素坐标。因为地图的宽度和高度在每个缩放级别是不同的, 所以像素坐标也是变化的。
地图左上角的像素总是有像素坐标 (0,0)
地图右下角的像素坐标 (mapwidth-1,mapheight-1)=(256*2^level–1, 256*2^level–1)
给定经纬度坐标:经度a(度),纬度b(度);以及缩放级别level; 地图像素坐标X像素(横向)Y像素(纵向)为:
X=int((a+180)/360*256*2^level)字符串长度web
Y=int((0.5-ln((1+sin(b*π/180))/(1-sin(b*π/180)))/(4*π))*256*2^level)
a=360*X/(256*2^level)-180
b=arcsin((e^(0.5-4*π*Y/(256*2^level))-1)/(e^(0.5-4*π*Y/(256*2^level))+1))*180/π
瓦片坐标与四叉树键
为了优化地图检索和显示的性能, 渲染的地图被切成256x256像素的瓦片。由于像素的数量在每一个缩放级别上都不同, 所以瓦片的数量如下关系:
地图宽度=地图高度= 2^level个瓦片数量
瓦片坐标XY范围:从左上角的(0,0)到右下角的(2level–1, 2level–1)。
例如, 在3级, 瓦片坐标的范围从(0,0)到(7,7),如下所示:
给定一对像素(pixelX, pixelY)坐标, 可以确定包含该像素的瓦片的 XY 坐标:
瓦片坐标X(tileX)=int(pixelX/256)
瓦片坐标Y(tileY)=int(pixelY/256)
为了优化瓷砖的索引和存储, 二维瓦片XY坐标被组合成一维字符串, 称为四叉树键, 简称 "quadkeys"。 在特定缩放级别level中每个quadkey数据唯一地标识一个瓦片, 它可以用作通用数据库B-树索引中的一个键值。要将瓦片坐标转换为 quadkey, 要将Y和X坐标的二进制位进行交错处理, 结果为 保持前导零的4进制数字字符串。例如, 给定的瓦片XY坐标 (3, 5)在缩放级别3级, quadkey如下:
tileX=3=011(2进制)
tileY=5=101(2进制)
quadkey=100111=213(4进制)=“213”字符串
Quadkeys有几个有趣的属性。首先, quadkey的长度(位数) 等于相应瓦片的缩放级别level。
其次, 任何瓦片的 quadkey都以其父瓦片(上一个级别容器瓦片)的quadkey为开始。如下面的示例所示, 瓦片2是瓦片20到23的父级, 而瓦片13是瓦片130到133的父级:
quadkeys提供一维索引键,通常保留XY空间中瓦片的接近度。换句话说, 两个有相近XY坐标的瓦片通常有相对接近的quadkeys。这对于优化数据库性能非常重要, 因为相邻的瓦片通常成组存取, 可以将这些块放在相同的磁盘块上, 使磁盘读取次数最少。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论