一、绪论

  地图切片是一种将整幅的地图按照一定的规则拆分成具有行列编号的网格的方案,对于矢量地图而言其好处是可以根据需要显示的范围只绘制对应网格内的要素从而减少渲染压力,对于栅格地图而言则是可以减少一次性请求(或者读取)的数据量,从而更高效的显示区域内的地图。

  瓦片地图金字塔模型则是基于地图切片诞生的一种多分辨率层次模型,从瓦片金字塔的底层到顶层,分辨率越来越低,但表示的地理范围不变(如图1所示)。可以根据显示的范围调度对应层级的地图瓦片,根据区域显示对应的网格,从而进一步减少请求(读取)的数据量。片地图相较于传统地图而言,减少了请求(读取)的数据量,加速了渲染效率,但是会占用更多的存储空间,是一种典型的用空间换时间的方案,在存储成本越来越低廉的今天这种方案的缺点是几乎可以忽略不计的。

                                                                                                                                                         图1 瓦片地图组织形式

  由此可见,不论是上文所述的瓦片地图金字塔模型还是地图切片,其中一个很重要的工作就是将地图按照一定的规则拆分成网格,理论上我们可以自己随意制定一个规则将地图切割成瓦片,但是如何确保自己切割的瓦片能被不同的软件解析和显示,就需要制定一个统一的方案,这就引出了今天的主角,由开源空间信息基金会组织(Open Source Geospatial Foundation,简称OSGeo)制定的TMS(Tile Map Service)与开放地理空间信息联盟(Open Geospatial Consortium,简称OGC)制定的WMTS(Web Map Tile Service)这两种切片方案。

  不论是哪种瓦片模型都是为了方便网络环境下的使用,经过这么多年来的不断迭代和升级,在官方文档中会有大量的篇幅介绍网络response响应文本相关属性。由于本文着重是对切片方案的介绍,因此着重介绍和瓦片相关的属性,对其他的属性有需要的读者这里放上对应的链接可以自行查询:

WMTS:https://www.ogc.org/standards/wmts

TMS: https://wiki.osgeo.org/wiki/Tile_Map_Service_Specification#Maximizing_Cacheability

二、TMS切片方案

<SRS>EPSG:26910</SRS>

<BoundingBox minx="500000" miny="4800000" maxx="700000" maxy="5500000" />

<Origin x="500000" y="4800000" />  

<TileFormat width="256" height="256" mime-type="image/png" extension="png" />

<TileSets profile="none">

    <TileSet href="http://www.osgeo.org/services/basemap/L1" units-per-pixel="6400" order="0" />

    <TileSet href="http://www.osgeo.org/services/basemap/L2" units-per-pixel="1600" order="1" />

    <TileSet href="http://www.osgeo.org/services/basemap/L3" units-per-pixel="400" order="2" />

    <TileSet href="http://www.osgeo.org/services/basemap/L4" units-per-pixel="100" order="3" />

    <TileSet href="http://www.osgeo.org/services/basemap/L5" units-per-pixel="25" order="4" />

</TileSets>

上述是从官方网站提供的示例TMS响应中截取的与切片相关的属性,其中SRS属性指的是本切片使用的坐标系,(EPSG:数字编号是国际石油和天然气生产商协会发布并维护的坐标系参数,不同的数字编码代表着不同的坐标系,例如常用的WGS84经纬度编号为4326);BoundingBox属性为请求的瓦片的坐标范围,Origin标签为编号为0/0瓦片的左下角坐标;profile属性为配置属性,其作用是提供本TMS切片和其他切片的映射关系,从而提高数据的互操作性,配置文件包含四类:none,  global-geodetic, global-mercator, local。其中none为不使用配置文件,local是使用本地配置文件,这两种都不太常见,这里着重说一下global-geodetic, global-mercator。

global-geodetic指切片使用的大地经纬度坐标,每个瓦片的大小(width & height)为256x256像素,原点(Origin)坐标为(-180,-90),每个像素代表的经纬度单位(units-per-pixel)数为0.703125 / 2^n(n为瓦片的层级数),由此可以计算出当瓦片层级为第0级时,一个瓦片的横跨的经纬度大小为180度,从而得知第0级由两个256x256大小的瓦片并排组成。

global-mercator指切片使用的是Web墨卡托投影坐标(一种与赤道相切的圆柱投影),与大地经纬度坐标下的TMS切片相似,瓦片大小为256x256,原点坐标为(-20037508.34, -20037508.34),每个像素代表的投影长度为78271.516 / 2^n(n为瓦片的层级数),由赤道半径为6378137米,则赤道周长为2*PI*r = 2*20037508.3427892可以得到第0级是由四个瓦片组成的方块。

切片组织形式的另一个重要内容是瓦片的排列顺序,OSGeo官方给出了一张瓦片地图排列图表,如图所示,TMS切片的编号方式是从左下角开始,向上/向右依次增加序号。

图二 TMS切片瓦片排序

 

三、WMTS切片方案

  作为一个实践性组织OGC迄今为止已经提出了很多网络地图规范,例如网络地图执行方案(WMS),网络特征数据执行规范(WFS)、网络覆盖执行规范(WCS),以及WMTS地图切片方案,对于请求结果的参数也做出了非常详细的规范,因此这里着重介绍一下地图瓦片平铺矩阵相关参数。

  OCG把地图瓦片矩阵集定义为地理空间的呈现形式,一个地图瓦片矩阵集可以包含多个地图瓦片矩阵,也就是前文所说的瓦片地图切片方案中多层瓦片的概念。每个瓦片地图集(每层瓦片)的请求结果中需要以下定义:(1)以瓦片的比例作为比例尺分母;(2)每个瓦片的宽度和高度(以像素为单位);(3)瓦片边界的左上角坐标;(4)瓦片矩阵的宽度和高度(也即XY方向上瓦片的个数)。

  每个瓦片矩阵都有一个近似边界参数Boudingbox,而这个瓦片的精确边界则需要通过其他参数计算得到,这是由不同层级比下的像素比例大小存在差异导致的。在给出了瓦片矩阵左上角坐标(tileMatrixMinX,tileMatrix MaxY),每个瓦片的像素高度和像素宽度(tileWidth, tileHeight),以及瓦片矩阵的高度和宽度(matrixWidth,matrixHeight)后,瓦片矩阵的右下角坐标(tileMatrixMaxX,tileMatrix MinY)通过如下方式计算:

pixelSpan = scaleDenominator × 0.28 10-3 / metersPerUnit(crs);
tileSpanX = tileWidth × pixelSpan;
tileSpanY = tileHeight × pixelSpan;
tileMatrixMaxX = tileMatrixMinX + tileSpanX × matrixWidth;
tileMatrixMinY = tileMatrixMaxY - tileSpanY × matrixHeight;

  其中0.28代表的是一个像素的标准尺寸大小。通过右下角坐标计算方法可以得到,每个瓦片矩阵的排列方式如图3所示:

图3 WMTS瓦片排列方式

四、切片方案比对

  综上所述,WMTS切片方案和TMS切片方案最大的区别在于瓦片的排列形式,即TMS瓦片的起点坐标在左下角,WMTS瓦片的起点在左上角,具体表现是瓦片的编号不同。

  不论是WMTS切片方案还是TMS切片方案都可以使用多种坐标系统,只需要在返回体中明确使用的坐标系即可。

  另外两类切片方案都没有对一个瓦片的具体形状做硬性规定,只是在TMS切片中,对使用global-geodetic和global-webmarcator的切片明确要求了瓦片大小为256x256,而这两种坐标系恰好是网络传输使用的常见坐标系,这就导致了网络上TMS瓦片切片必须是正方形而WMTS瓦片切片可以是长方形这样的误会。

posted on 2023-05-22 19:45  拿铁冰冰冰红茶  阅读(1417)  评论(0编辑  收藏  举报