为什么会有这个需求和想法呢?还是源自于 局部更新矢量切片 的想法,当我们遭遇一个海量矢量数据的矢量切片创建更新任务时,希望尽可能少且尽可能准确地更新受影响的bundle,而不是全局,那么了解bundle的范围是十分必要的。在写上一篇《紧凑型缓存技术小结》的时候,目的在于在其基础之上探索矢量切片的bundle。

为了确保单个bundle文件的矢量切片数据的完整性,每级每次至少需要更新一个bundle文件。当矢量切片的数据量不显著的时候,可能每级本身也就一个或几个bundle,那局部更新体现不出它的优势; 当某些等级(例如LOD比较大的级别)矢量切片bundle非常多的时候,如果更新的范围只影响了其中一个,或者几个文件时,局部更新是有必要的。

结论

参照栅格切片的 帮助文档 中明确说明的, “A bundle contains up to 16,384 tiles. ” 那就是 128 × 128 的关系,照搬到矢量切片是否适用呢? 通过验证,确实如此。

先上结论,第N级的矢量切片的bundle范围刚好是第N-7级的切片范围,如下图,红线是 level 6 的切片索引,刚好可以作为level 13 的bundle范围:

示例

为了做验证和测试,我用了美国大选的区块数据做实验,这个面数据包含182895条记录,节点较多,很适合做矢量切片。假设,需要更新的切片范围仅仅是密歇根湖的一角:

PS:上图是完全由 ArcGIS Pro 制作导出的,使用到了 Layout , Extent Indicator; 从制图角度来说,ArcGIS Pro 是个非常好的桌面端应用,可以继承和超越ArcMap。

以13级为例,更新的这一角仅需替换一个bundle:

那么自定义工具 Create Part Vector Tile Package 所要做的工作,逻辑就变得非常清晰,也就是通过用户提供的待更新区域(AOI)来计算每级被影响到的bundle文件的地理范围,从而进行bundle的替换工作;包含了为其服务的,解包、打包、解析类的工作。

工具

Latest Version: Partially Upate ArcGIS Vector Tiles Toolbox 2.1.1

待解决的问题

  • 投影坐标系和自定义坐标系支持
  • tile scheme 原生获取