紧凑型缓存技术小结

Posted by Xiaoyan(Sharon) Mu on 2018-07-23
Estimated Reading Time 6 Minutes
Words 1.6k In Total
Viewed Times

Tiling Scheme

每个缓存服务的切片目录中都会包含一个 Conf.xml,也是就是tile scheme 文件了。

这个文件包含了很多有关切片设置的信息:

  • Spatial reference information
  • Tile origin
  • Tile width/height
  • DPI
  • LODs (Levels of detail - scales)
  • Tile Image format
  • Compression quality
  • Antialiasing settings
  • Storage method

Version Issue

紧凑型缓存的存储格式为**.bundle** 。但有时我们会看到缓存目录中包含**.bundlx** 这样的文件,这说明这些缓存是ArcGIS 10.2.2 或以下版本创建的。从 ArcGIS 10.3 开始,紧凑型缓存做了些改进, .bundlx(tile index information) 文件被包含到了 .bundle 文件中 ,从而进一步降低了文件的数量。

你可以在缓存服务的tiling scheme “Conf.xml” 中查看确认:

10.3 or later (Compact cache V1)

1
2
3
4
<CacheStorageInfo xsi:type='typens:CacheStorageInfo'>
<StorageFormat>esriMapCacheStorageModeCompact</StorageFormat>
<PacketSize>128</PacketSize>
</CacheStorageInfo>

10.2.2 or former (Compact cache V2)

1
2
3
4
   <CacheStorageInfo xsi:type='typens:CacheStorageInfo'>
<StorageFormat>esriMapCacheStorageModeCompactV2</StorageFormat>
<PacketSize>128</PacketSize>
</CacheStorageInfo>
  • 10.3 及之后版本的 ArcGIS Server 仍然可以使用低版本的生产的切片来运行现有服务。如果我们需要将低版本的缓存拷贝过来给高版本的服务用,要注意这个<StorageFormat>参数的一致性。
  • ArcToolbox工具 Upgrade Map Server Cache Storage Format 来升级缓存。升级的过程中不会重新创建切片,而是重组原有的切片。这个工具在ArcGIS Pro 中没有提供。目前,我们还只能使用ArcMap或者使用ArcGIS Server 带有的arcpy包,通过Python来调用。
  • 不支持将高版本的切片供低版本软件使用。如果希望降级,可以使用 Export Map Server Cache 工具导出紧凑型切片。

Tile Format

Tile Format 是指存储切片使用了何种栅格格式,而不是切片文件的本身存储格式 / Storage Format ( Exploded / Compact )。

  • PNG

    ArcGIS 10.1开始引入的类型。选择这种类型,Server会自行确认每张切片的PNG位深,从而达到缩减磁盘占用的目的。在我们不确定使用何种PNG格式时,保持这个默认设置就不错。

    如果磁盘空间不在考虑范围下,而希望优先考虑切片速度,那最好选择MIXED格式了。

  • PNG8

    位深为8位的PNG图片格式;可以最多存储256色,支持布尔透明,磁盘空间占用小,并且无损。适合于颜色相对简单,并且需要透明背景的地图,例如公路数据切图。

  • PNG24

    位深为24的PNG图片格式;可以最多支持约1600万色。当地图的色彩复杂程度超过256时,你就该考虑使用这个格式。但是,PNG24不支持透明,另外不建议在IE6及以前版本浏览器中使用。

  • PNG32

    在PNG24的基础上增加了Alpha通道,因而增加了各种程度半透明的支持。当地图色彩复杂,并开启了抗锯齿功能,PNG32就是最佳选择了,并且PNG32在各个版本的浏览器中支持良好。

  • JPEG

    当切片中不需要透明背景时,JPEG是最常用的切片格式,并且JPEG可以hold住大量的复杂色彩。例如,包含影像、符号化精细程度高的矢量地图都可以使用这个格式。

    JPEG是种有损压缩格式,可以在1%-100%间设置压缩比率,默认值75%一般是显示质量和磁盘空间的最佳平衡。如果觉得噪点过多质量不够,可以调高这个百分比,但你需要在响应性能和图片质量之间做好博弈。

  • MIXED

    顾名思义,混合格式,在切片不透明区域使用JPEG,在透明区域使用PNG32。这是种非常智能的搭配方案,降低硬盘占用的同时,很好的解决了例如在切片边缘需要的透明需求。

  • LERC

    LERC是Esri自主研发的开源的有损压缩格式,点这里有更多信息。推荐用于位深较大的单波段影像或高程数据服务中,如浮点型,32-bit、16-bit、12-bit的数据。 官方声称,LERC压缩方法在压缩速度和压缩质量方面分别是LZ77的5-10倍。当LERC用于整型栅格数据时,损失率在0.99或更低,几乎可以视为无损压缩。

    LERC压缩方式目前只支持Image Service ,而不支持 Map Service。

Performance Suggestion

紧凑型切片比松散型切片有诸多有点,详见文末的官方文档。但不是说选了紧凑型切片性能就没有继续改善的余地了,下面的这些点也是提升切片性能的一些有效建议:

  • 地图数据尽可能使用本地数据,共享目录的数据切片时间可能会更长些;
  • 尽可能的避免使用动态投影;
  • 设置图层的可见比例尺;
  • 谨慎设置反锯齿的级别,标注的反锯齿对切片性能影响甚微,但要素符号的反锯齿会显著增长切片的时长;
  • 建议切片期间关闭防病毒等安全软件;
  • 尽可能地使用MIXED格式
  • 在切片之前为所有数据创建空间索引
  • CachingTools服务的最大实例数 = 核数 + 1,这是官方给出的最佳实践建议
  • 降低日志的级别,如果在大量切图任务中把Server日志开到Debug或Verbose级别,会产生极大的资源浪费。

Tile|SuperTile|Bundle

这三者的关系早在多年前就有大牛们探索发现过,见本文末的相关文章,文中有逻辑缜密且经得起时间检验的详细演绎过程……

简言之,他们的关系是个简单的数学关系,如下:

1
2
3
4
5
6
7
8
9
如果:
Tile = 256 × 256 pixel # 256×256 是ArcGIS Server默认的切片大小
Supertile = 4096 × 4096 pixel # 未开抗锯齿情况下是 4096×4096
那么:
Supertile = 16 × 16 Tile
已知:
Bundle = 128 × 128 Tile
因此:
Bundle 范围是 N-3 级的 Supertile 的范围

看图说话:

官方文档:

相关文章:


如果您喜欢此博客或发现它对您有用,则欢迎对此发表评论。 也欢迎您共享此博客,以便更多人可以参与。 如果博客中使用的图像侵犯了您的版权,请与作者联系以将其删除。 谢谢 !