矢量数据则是试图利用点、线、面等几何要素来表现这个世界,其数据结构紧凑精准,数据图形质量好,有利于地理信息检索与网络传输等。其中矢量数据的最小单元是以点的形式存在,点构成线,线组成面,面构造出体。随着WebGIS的发展,对于数据展示与数据传输的要求也在不断提高,对于栅格数据来说,通过切片的方式进行动态渲染能够实现根据数据展示范围与层级的实时渲染,大大提高了数据加载效率,而对于矢量数据来说,如果矢量数据量比较大,则前端渲染则效率会出现明显下降,因此为了提高矢量数据渲染和展示能力,同时充分利用矢量数据无极缩放的能力,矢量切片的技术应运而生。

矢量切片的理论基础

    对于栅格数据的切片我们很好理解,通过影像采样的方式得到不同层级的影像,通过地理坐标到像素行列号的方法映射出地理坐标,相比于栅格数据切片方法,矢量数据虽然在原理上存在一定的相似性,但是由于矢量数据的特殊性,矢量切片与栅格数据切片还是存在一定的差异。
    目前矢量切片主要有以下三种格式:GeoJSON,TopoJSON和MapbBox Vector Tile(MVT),其中使用的比较广泛的为MVT格式,在栅格切片中每一个栅格为一张影像,影像样式无法进行修改与处理,而矢量切片,实际上是根据切片范围对矢量数据的描述进行切片,针对不同的范围加载不同的切片描述,而前端根据切片描述绘制出对应的矢量数据。实际上我个人理解为:类似影像数据,我们将矢量数据按照一定的切片规则分为不同的块,每个块能够对应一个地理范围,我们将这个地理范围内的数据以某一种绘制方式进行编码得到一个类似于影像的编码文件,前端根据展示的范围显示对应的编码块,并根据编码块进行渲染展示。

矢量瓦片数据格式标准

    MapbBox Vector Tile(MVT)格式标准参考,实际上不同格式编码有着严格的标准,对于MVT格式来说,其标准是开源的切片标准,具体的标准格式可以参考标准文档,在这里我只对瓦片绘制的方式进行简要说明,矢量瓦片中的几何数据被定义为按照屏幕坐标绘制的形式,其中几何图形被简单的编码为指令和参数的形式(这里有点类似SVG文件但是又不太一样),具体的指令包括MoveTo,LineTo以及ClosePath,每一个指令被映射为一个编码,这样将数和ID映射到一个INT类型的数据中,其中最后3bit标识指令,前29bit标识指令执行次数,参数的编码和解码方式为:
$$
ParameterInteger = (value << 1) ^ (value >> 31)\ value = ((ParameterInteger >> 1) ^ (-(ParameterInteger \& 1)))
$$
得到编码和解码方式之后就可以通过一个数组来表示一个几何对象,对于不同的对象需要的操作是不同的,另外需要注意的是数据的编码是采用相对坐标的形式,每一个要素的后面数据点的坐标都是相对于前一个点来计算的,第一个点的坐标是相对于(0,0)点来计算的。
    要素属性被编码为tag字段中的一对对整数。在每对tag中,第一个整数表示key在其所属的layer的keys列表的中索引号(以0开始)。第二个整数表示value在其所属的layer的values列表的中索引号(以0开始)。一个要素的所有key索引必须唯一,以保证要素中没有重复的属性项。每个要素的tag字段必须为偶数。要素中的tag字段包含的key索引号或value索引号必须不能大于或等于相应图层中keys或values列表中的元素数目。

矢量切片生成方式

    矢量切片有很多生成方式,在这里我只介绍通过ArcGIS进行矢量切片数据的方式,ArcGIS在10.4以后就支持发布和切矢量切片了,其具体步骤为:
在ArcGIS Pro中构建矢量切片:

  • 开启 ArcGIS Pro 并打开包含要发布的地图的工程。
  • 请确保您的门户连接处于活动状态,且您已使用具有创建内容和发布托管切片图层权限的帐户登录到您的组织。
  • 要发布切片图层,请执行以下操作之一:在内容窗格中选择这些图层。右键单击选择集,然后单击共享为 Web 图层。要在地图中发布所有图层,请在共享选项卡的共享为组中单击 Web 图层,然后单击发布 Web 图层。
  • 输入切片图层的名称。图层默认保存到我的内容中。您可以通过输入子文件夹名称或浏览已有的文件夹将图层保存到我的内容的子文件夹中。
  • 选择复制所有数据。
  • 在图层类型中选择切片。这样会自动取消选中其他图层类型选项,因为复制数据时仅可选中一个选项。
  • 提供切片图层的摘要和标签。
  • 请指定应该访问托管切片图层的用户。发布的所有图层都会自动共享到您的组织内的个人工作空间中(我的内容),并选择共享的用户。
  • 单击配置,然后单击配置 Web 图层属性按钮以指定缓存设置。
  • 选择切片方案。
  • 调整并拖拽细节层次条块来为您的切片图层指示最小和最大比例。在您更改最小和最大比例时,生成缓存的估计大小会发生改变。
  • 选择构建切片缓存的时间和位置。
  • 要允许用户下载地图切片以供离线使用,请选中允许客户端导出缓存切片。
  • 如果选中了允许客户端导出缓存切片,请使用导出限制为字段指定客户端一次可离线使用的最大切片数量。
  • 请单击内容选项卡来确认切片图层将会包含您所需的数据图层。
  • 请单击分析来检查错误或故障。
  • 解决错误和某些警告后,单击发布 。

除了通过ArcGIS Pro构建和发布矢量切片外还可以通过ArcGIS Server通过要素服务发布和构建矢量切片,具体的方法参考ArcGIS 官方文档