前言

我们日常使用的地图都是经过web墨卡托(参考这里)形成的平面地图,地图就变为平面的一张地图。几乎所有的地图应用都采用地图瓦片的方式加载以提高渲染效率,web墨卡托投影的主要切片方案分为四大类:谷歌、TMS、QuadTree、百度。除此之外,国家天地图网站还支持cgcs2000经纬度投影,也有自己一套独特的切片方案。


地图切片

  • 切片实际是采用金字塔结构将大量的空间数据分片后传输回客户端并在客户端进行重组,形成视觉上完整的地图的技术方案。采用本技术方案通常会预切图加快服务访问效率,并且通过缓存减少服务器重复性的计算开销。
  • 要切片首先要建立一个网格,切片的时候按网格来切。不同缩放级别下网格数量不一致,但基本保持2的n次方的规则。一般且为2^z * 2^z大小, z为当前地图缩放层级。
    参考:(https://www.jianshu.com/p/8ef5ebf5559a)
    瓦片参考:https://www.maptiler.com/google-maps-coordinates-tile-bounds-projection/#3/62.60/-15.18

在这里插入图片描述

主流切片方案

谷歌XYZ

  • 定义:Z表示缩放层级,Z=zoom;XY原点在左上角,X从左向右,Y从上向下
  • 应用范围:高德地图、谷歌地图、OpenStreetMap
  • 举例: https://webrd01.is.autonavi.com/appmaptile?x={x}&y={y}&z={z}&lang=zh_cn&size=1&scale=1&style=8(高德)

TMS

  • 定义:OSGeo制定的开源标准,Z的定义与谷歌相同;XY的原点在左下角,X从左向右,Y从下向上
  • 应用范围:腾讯地图
  • 举例: http://rt1.map.gtimg.com/realtimerender?z={z}&x={x}&y={y}&type=vector&style=0(腾讯)

QuadTree

  • 定义:Z的定义与谷歌相同,同一层级的瓦片不用XY两个维度表示,而只用一个整数表示,该整数服从四叉树编码规则
  • 应用范围:微软Bing地图

谷歌XYZ、TMS、QuadTree在缩放层级为2瓦片编号如图:

zoom=2:
在这里插入图片描述

百度XYZ

  • 定义:Z从1开始,在最高级就把地图分为四块瓦片;XY的原点在经度为0纬度为0的位置,X从左向右,Y从下向上
  • 应用范围:百度地图
  • 举例: http://online1.map.bdimg.com/onlinelabel/?qt=tile&x={x}&y={y}&z={z}&styles=pl&scaler=1&p=1(百度)

百度地图比较奇怪,在z小于3时请求出的瓦片全是空白,笔者也不大清楚为什么,手动请求z=3时的瓦片如下,瓦片坐标标在右下角:
在这里插入图片描述

天地图

天地图:https://www.tianditu.gov.cn/ 是是由国家测绘局主导建设的统一地理信息服务的大型互联网地理信息服务网站,该网站发布的地图服务经纬度投影和球面墨卡托投影两种坐标,请求地址中_c表示经纬度投影,_w表示墨卡托投影,如下图。其中_w采用的是谷歌XYZ标准。
在这里插入图片描述
经纬度投影采用的是cgcs2000/4490坐标系,可以将它视为与wgs84等价,但是它的切片方案与上述主流切片方案存在较大不同:

  • 地图以左上角为原点,x向右为正,y向下为正
  • 该地图切片不是一个n*n的正方形,在缩放层级为z时,行数row=2^z-1, 列数col=2^z

zoom = 1

https://t2.tianditu.gov.cn/vec_c/wmtsSERVICE=WMTS&REQUEST=GetTile&VERSION=1.0.0&LAYER=vec&STYLE=default&TILEMATRIXSET=c&FORMAT=tiles&TILECOL=1&TILEROW=0&TILEMATRIX=1&tk=your tk
在这里插入图片描述

zoom= 2:
在这里插入图片描述

总结

  • 地图切片
  • 谷歌XYZ
  • TMS
  • QuadTree
  • 百度XYZ
  • 天地图
Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐