# 地图瓦片概述

随着互联网技术的发展,互联网地图已成为人们生活中基础导航工具。为了实现快速的浏览查询,瓦片地图技术应运而生。瓦片地图利用的金字塔模型是一种多分辨率层次模型,从瓦片金字塔的底层到顶层,分辨率越来越低,但表示的地理范围不变。在网络带宽受限的环境下,瓦片地图是使地图服务更快运行的一种非常有效的方法。

制作瓦片时,把缩放级别最低、地图比例尺最小的地图图片作为金字塔的底层,即第1层,并对其进行分块,从左至右、从上到下进行切割,分割成相同大小(比如256x256像素)的正方形地图瓦片,形成第1层瓦片矩阵;在第1层地图图片的基础上,按每2x2像素合成为一个像素的方法生成第2层地图图片,并对其进行分块,分割成与下一层相同大小的正方形地图瓦片,形成第2层瓦片矩阵;采用同样的方法生成第3层瓦片矩阵……如此下去,直到第N-1层,构成整个瓦片金字塔。

目前常用的瓦片技术包括如下两种:

  • 栅格瓦片:将地图瓦片数据通过栅格图片(如*.png)格式进行存储。

  • 矢量瓦片:将地图瓦片数据通过"矢量文件(*.pbf)+样式文件(*.json)"方式进行存储。

传统电子地图共享时,通常会通过瓦片裁剪工具获取栅格瓦片。相对于其他技术,栅格瓦片底图有其优越性,例如有效减少了传输数据体积,多级缩放等。然而,栅格瓦片底图也有一些短处,缺乏灵活性、实时性,数据完整性受损是比较突出的问题,这正是栅格数据的问题:

  • 缺乏灵活性。栅格瓦片完成后,已经保存为图片格式,样式不可修改。若要多种栅格底图,需裁剪多份栅格瓦片底图;
  • 缺乏实时性。由于栅格瓦片已保存为图片格式,当现实世界地物有变化时,不能实时更新,只能重新裁剪栅格瓦片;
  • 丢失属性信息。栅格瓦片没有属性信息,若要查询图片的多边形的属性,需要到服务器重新请求。

基于栅格瓦片底图的劣势,MapGIS 可支持矢量瓦片底图。矢量瓦片针对矢量电子地图,按照一定的标准和技术将其保存为多种比例尺的矢量分块数据,在前端显示电子地图时,可直接调用矢量分块进行绘制。

  • 可保留属性信息,在客户端进行查询时,无需再次请求服务器;
  • 采用分块编码模式,客户端获取时只返回请求区域和相应级数的矢量瓦片底图,且采用实时绘制矢量模式,绘制效率更高;
  • 矢量瓦片分辨率高达4096*4096,是栅格瓦片的16倍,可保证缩放过程中的细节高度还原,且满足高分屏绘制需求;
  • 样式可以改变和定制,矢量瓦片可以在客户端渲染,可以按照用户赋予的样式渲染。如导航地图有白天和黑夜两种模式,只需共用一份矢量瓦片底图,利用两套样式进行渲染即可;
  • 客户端显示矢量瓦片底图时,可以通过属性过滤条件可以任意过滤筛选图元,实现个性化定制;
  • 客户端显示矢量瓦片底图时,可以编辑底图中每一个矢量图层的可见状态,调整矢量层的叠加压盖顺序,修改矢量图层的颜色、大小等显示样式。

# 裁剪策略

地图瓦片裁剪,是根据不同显示比例尺下的地图精度,将其划分为多个按行列规则组成的格网的过程。主要包括裁剪原点、格网高宽和裁剪级数三个部分内容。

(1)瓦片划分

裁剪原点是指裁剪片方案格网的左上角,高度/宽度代表格网的大小。裁剪原点不一定代表创建瓦片的起始点。使用公用裁剪方案原点可以确保它们能够相互叠加与合并。

  • 裁剪原点仅会影响瓦片的行列号,在瓦片显示时真实地理范围是通过裁剪原点、行列号、裁剪比例尺共同计算而得,因此不受影响。但是业务中为了规范性,习惯性设置统一的裁剪原点;
  • 裁剪原点可以设置为地图左上角,此时瓦片行列号从(0,0)开始;大多数情况下,裁剪原点不是地图左上角,瓦片行列号值都会比较大。
  • 从裁剪原点开始划分网格时,裁剪范围左上角可能在某个格网的中心。瓦片裁剪时依然会裁剪整个网格范围,因此真实裁剪范围会比设置的裁剪范围略大。

(2)裁剪级数

栅格/矢量瓦片利用的金字塔模型是一种多分辨率层次模型,每一个层次即一个级数,有n个级数代表了有n层模型。

提示:

MapGIS矢量瓦片与栅格瓦片裁剪格网划分基本思路一致,但是栅格瓦片级数从1开始,矢量瓦片级数从0开始。在web前端显示时,均从0开始计算。即栅格瓦片裁剪第n级,对应了web前端显示的第n-1级。

每一个级数对应了一个显示比例尺,不同的显示比例尺表现为地图瓦片的细节层次差异。例如1:1,000,000的比例尺可以看到主要道路;1:100,000的比例尺不仅观察到主要道路,还可观察到市区道路;1:20,000比例尺还可以表现出道路周边的POI点信息。

创建裁剪方案时,采用哪些地图比例创建瓦片是最为重要的选择。瓦片的比例尺设置的合理性取决于地图数据的设计以及瓦片的使用目的。

  • 如果瓦片数据需要与其它瓦片相叠加,那么这些瓦片所使用的比例尺方案应该尽量保持一致。MapGIS系统自带的经纬度及"Web墨卡托"裁剪策略即目前常用web地图裁剪比例尺;
  • 如果用户不确定瓦片裁剪的起始和终止级数,可在地图视图中切换显示比例尺,通过地图显示效果来确认裁剪起始/终止级数。

提示:

1、MapGIS系统自定义模式时,第0级默认比例尺为1:52000000,此比例尺适合于比较大的数据范围,如中国。若是某个县级行政区,用此比例尺查看时行政区显示非常小。若是用世界地图,由于图片过大,此比例尺又会导致无法查看完整的世界地图效果。

2、裁剪终止级数越大时,裁剪出的瓦片数量必然越多,会导致裁剪的耗时越长。因此选择合适的终止级数尤为重要,不是越多越好的。

# 通用裁剪策略

MapGIS生成栅格或矢量瓦片时,是按照一定的规则将矢量地图裁剪为若干行列的矢量瓦片数据。针对目前Web地图最常用的两种空间参照系,提供了如下两种默认分块规则:

# 地理坐标系

地理坐标系下,经度从-180度到+180度;纬度从-90度到+90度,即分块范围覆盖整个地球。具体分块规则如下图所示:

其中,第0级分成1行2列,每个瓦片尺寸为180度×180度;第1级对第0级的每个瓦片进行4叉划分,每个瓦片尺寸为90度×90度;以此类推。

矢量瓦片以左上角(-180°,90°)为编码原点,垂直向右(向东)、向下(向南)对瓦片进行行列编码,序号从0开始。如,第0级2张矢量瓦片为(0,0)、(0,1);第1级8张瓦片的编码分别为(0,0)、(0,1)、(0,2)、(0,3)、(1,0)、(1,1)、(1,2)、(1,3);以此类推。

提示:

各级地图瓦片编码的第一个参数为行号,第二个参数为列号。

显示比例尺计算方法如下:

地图显示比例=1:地面分辨率*屏幕分辨率/(0.0254 米/英寸)

其中:地面分辨率= [2*π*地球长半径(米)]/(256*2Level像素)

Level 表示比例尺的级数,最小为0;屏幕分辨率取值为96 dpi;地球长半径取2000 国家大地坐标系规定参数,为6378137 米。

以第0级为例,世界地图刚好填充满两张图片,可计算:

地面分辨率= [2*π*地球长半径(米)]/(256*2level像素)=(2*π*6378137)/(256*2)≈78271.5170米/像素
地图显示比例尺=1:地面分辨率*屏幕分辨率/(0.0254 米/英寸)=1:78271.5170*96/(0.0254)≈1:295829355.45。

以此类推,各级分辨率及比例尺信息如下表所示:

级数 行瓦片数*列瓦片数 256*256 地面分辨率 显示比例尺
0 1*2 78271.5170 1:295829355.45
1 2*4 39135.7585 1:147914677.73
2 4*8 19567.8792 1:73957338.86
3 8*16 9783.9396 1:36978669.43
4 16*32 4891.9698 1:18489334.72
5 32*64 2445.9849 1:9244667.36
6 64*128 1222.9925 1:4622333.68
7 128*256 611.4962 1:2311166.84
8 256*512 305.7481 1:1155583.42
9 512*1024 152.8741 1:577791.71
10 1024*2048 76.4370 1:288895.85
11 2048*4096 38.2185 1:144447.93
12 4096*8192 19.1093 1:72223.96
13 8192*16384 9.5546 1:36111.98
14 16384*32768 4.7773 1:18055.99
15 32768*65536 2.3887 1:9028.00
16 65536*131072 1.1943 1:4514.00
17 131072*262144 0.5972 1:2257.00
18 262144*524288 0.2986 1:1128.50
19 524288*1048576 0.1493 1:564.25

# 墨卡托投影

墨卡托投影下,整个地球范围会投影为一个正方形,x/y方向坐标值从-20037508.34到20037508.34。具体分块规则如下图所示:

矢量瓦片以左上角(-20037508.34,20037508.34)为编码原点,垂直向右(向东)、向下(向南)对瓦片进行行列编码,序号从0开始。其中,第0级分成1行1列;第1级对第0级的每个瓦片进行4叉划分;以此类推。如第0级1张矢量瓦片为(0,0);第1级4张瓦片的编码分别为(0,0)、(0,1)、(1,0)、(1,1);以此类推。

提示:

各级地图瓦片编码的第一个参数为行号,第二个参数为列号。

显示比例尺计算方法如下:

地图显示比例=1:地面分辨率*屏幕分辨率/(0.0254 米/英寸)

其中:地面分辨率为单个像素代表的实地距离,即地面分辨率=世界范围距离/(256*2Level)

Level 表示比例尺的级数,最小为0;屏幕分辨率取值为96 dpi;世界范围距离为Xmax-Xmin≈40075016.69米

以第0级为例,世界地图刚好填充满一张图片,可计算:

地面分辨率=世界范围距离/(256\*2Level)=40075016.69/(256\*20)≈156543.0339米/像素
地图显示比例尺=1:地面分辨率*屏幕分辨率/(0.0254 米/英寸)=1:156543.0339*96/(0.0254)≈1:591658710.91

以此类推,各级分辨率及比例尺信息如下表所示:

级数 行瓦片数*列瓦片数 (256*256) 地面分辨率 显示比例尺
0 1*1 156543.0339 1:591658710.91
1 2*2 78271.5170 1:295829355.45
2 4*4 39135.7585 1:47914677.73
3 8*8 19567.8792 1:73957338.86
4 16*16 9783.9396 1:36978669.43
5 32*32 4891.9698 1:18489334.72
6 64*64 2445.9849 1:9244667.36
7 128*128 1222.9925 1:4622333.68
8 256*256 611.4962 1:2311166.84
9 512*512 305.7481 1:1155583.42
10 1024*1024 152.8741 1:577791.71
11 2048*2048 76.4370 1:288895.85
12 4096*4096 38.2185 1:144447.93
13 8192*8192 19.1093 1:72223.96
14 16384*16384 9.5546 1:36111.98
15 32768*32768 4.7773 1:18055.99
16 65536*65536 2.3887 1:9028.00
17 131072*131072 1.1943 1:4514.00
18 262144*262144 0.5972 1:2257.00
19 524288*524288 0.2986 1:1128.50