1. 不同坐标系瓦片计算原理
瓦片行列号计算是基于全球世界图进行编码,地理坐标系和投影坐标系的原点都是赤道和本初子午线的相交点,坐标原点为(0,0),而瓦片坐标系的原点根据瓦片坐标系的不同而不同。目前比较流行的瓦片坐标系统的原点有以下几种:地图左上角、左下角、地图中间。瓦片计算原理根据切片方案不同而不同,但主要过程还是一致的。流程图如下:
1、将三维地理坐标(lon,lat)转为二维平面坐标(mx,my)。
将三维地理坐标转为二维平面坐标,一般使用web墨卡托投影进行投影转换,其次也有选择经纬度直投方式。国家天地图有两套地图,一套是使用web墨卡托投影,即wkid:3857切片方案,另一套使用经纬度直投,即wkid:4490切片方案。
使用web墨卡托进行投影转换,即使用web墨卡托投影转换公式得到平面坐标(mx,my),而经纬度直投,是直接将经纬度投到平面上,经纬度就是平面坐标(mx,my)。
2、将二维平面坐标与二维切片坐标系统一坐标原点为切片坐标原点,在这基础上计算出全球的像素坐标。
此时的二维平面坐标系是全球平面坐标系,坐标原点是赤道和本初子午线的相交点,即在平面坐标系的中心点,坐标为(0,0),x轴向右为正方向, y轴向上为正方向。而瓦片坐标系的原点有以下几种:地图左上角、左下角、地图中间。需根据具体情况,将二维平面坐标的坐标原点统一到瓦片原点坐标后,再除以分辨率即得到全球的像素坐标。
(1)若瓦片坐标系原点在左上角,x轴向右为正方向, y轴向下为正方向
distanceX、distanceY:二维世界平面地图的水平与垂直方向的距离,单位为米或度数。
resolutionX、resolutionY:二维世界平面地图的水平与垂直方向的分辨率,是二维世界平面地图的距离/像素距离的值
(2)若瓦片坐标系原点在左下角,x轴向右为正方向, y轴向上为正方向
distanceX、distanceY:二维世界平面地图的水平与垂直方向的距离,单位为米或度数。
resolutionX、resolutionY:二维世界平面地图的水平与垂直方向的分辨率,是二维世界平面地图的距离/像素距离的值
(3)若瓦片坐标系原点在中间,x轴向右为正方向, y轴向上为正方向,瓦片坐标系统与平面坐标系统原点,x、y正方向轴一致,不进行转换。
3、将像素坐标(px,py)转化为全球的瓦片行列号(x_num,y_num)
将得到的像素坐标除以tilesize,再math.floor()取整,即得到瓦片行列号(x_num,y_num),
x_num代表列号,y_num代表行号。
综上,经过上述三步,可由某点球面经纬度坐标得到某点所在瓦片行列号,具体流程图如图1-2所示。
1.1网络墨卡托坐标系瓦片计算原理
网络墨卡托坐标系,wkid为3857,其瓦片计算原理主要是通过网络墨卡托投影得到瓦片的行列号。其过程可以分解为:先对大地经纬度坐标通过网络墨卡托投影方式进行投影,得到投影后的平面坐标,再将其转化为像素坐标,最终通过转换得到瓦片行列号。
1、第一步;经纬度(lon,lat)转平面坐标(mx,my)
大地坐标是在球面的经纬度坐标,单位为度(角度制),在对其进行投影转换前需将其转化为弧度制,角度制与弧度制互转公式如下:
故:
网络墨卡托正投影公式:
网络墨卡托反投影公式:
dLon表示以角度为单位的经度,取值范围是角度[-180,180]
rLon表示以弧度为单位的经度,取值范围为弧度[-PI,PI];
dLat表示以角度为单位的纬度,取值范围是[-85.05112877980659,85.05112877980659],
rLat表示以弧度为单位的纬度,取值范围为弧度[-1.4844222297453322, 1.4844222297453322];
R表示地球半径,6378137米;
mx和my分别表示投影后的坐标,单位:米,范围均为[-20037508.3427892, 20037508.3427892]
2、第二步:将平面坐标(mx,my)转为像素坐标(px,py)
由第一步得到的平面坐标的范围为[-20037508.3427892, 20037508.3427892],原点和经纬度坐标的原点一致,是赤道和本初子午线的相交点相当于在世界平面图的中间,故原点坐标为(0,0),向右为x轴正方向,向上为y轴正方向。而瓦片坐标系的原点取平面坐标系的左上角坐标(-20037508.3427892, 20037508.3427892),x轴向右为正方向,y轴向下为正方向。需将两者坐标系统一为左上角坐标,再计算其像素坐标。水平坐标就是平面坐标x加上世界平面图的一半,垂直坐标就是世界平面图的一半减平面坐标y,世界平面图的一半也就是地球周长的一半。
因为瓦片分辨率为平面距离/像素距离,表示米每像素,故统一坐标系后的平面坐标除以分辨率即得到像素坐标。
分辨率计算公式如下:
根据以上分析得到计算像素坐标(px,py)的公式为:
3、第三步:将像素距离(px,py)转变为瓦片行列号(x_num,y_num)
综上三步,可得到使用web墨卡托投影方式,计算瓦片行列号的公式如下:
1.2国家2000坐标系瓦片计算原理
国家2000坐标系,wkid为4490,其切片方案使用原点为(-180,90),经纬度直投,即直接将经纬度投到平面上,而不经过投影转换。故其与网络墨卡托瓦片计算不同的点是,其直接对经纬度进行瓦片行列号计算,但也需进行坐标系的统一到屏幕左上点(-180,90)。
以天地图国家2000坐标系瓦片计算规则为例。天地图瓦片数据通过金字塔模型组织从 1 到 20 共分为 20 级,随着级别增加分辨率逐渐升高,瓦片数量逐级增大。每一级的瓦片数为 2 ^(2 n-1 ),横纵比例为 2 ∶1.即列数为 2^n,行数为 2^ (n -1 )。式中 n 为正数,代表瓦片级别,即level,坐标系原点在西经 180°,北纬 90° 。
如图1-3所示,天地图为瓦片层级为1的情况,
图 1‑3
计算公式为:
2
分辨率计算公式如下:
但其实分辨率计算公式可合并为:
像素坐标除以tilesize后进行math.floor()取整,即得到瓦片行列号(x_num,y_num)
故推得最终瓦片计算公式为: