关于ArcGIS Server分块切片的一些想法

5
分享 2018-04-02

引子

之前一直接到很多客户关于分块切图之后导入切片的问题,比较典型的情况是:客户想要对大范围的影像切图,但由于各种原因希望能分块进行切图后再合并在一起。基于这个需求,本文从切片和切片存储机制角度出发,为如何分块提出建议,同时提供一种可能的方案以期达到分块切图再合并的需求。
首先,我们需要了解ArcGIS的切图机制和使用bundle这种紧凑型存储切片的机制。以下内容是作者根据菩提老王的一篇旧文中的相关内容的总结和归纳(感谢菩提老王的分享)。

ArcGIS切片存储和切片机制


存储机制

ArcGIS10中推出了新的紧凑型(compact)类型的切片缓存格式,其保存切片为连续的二进制文件,以后缀名为.bundle的文件存储,每个bundle文件最多可存储128x128个瓦片。同时,ArcGIS在切图时,也以bundle所存储切片覆盖的范围为基础来进行分块切片:对于每一级比例尺来说,从切片方案原点开始,将切片范围按128x128瓦片分成若干个区域(我们也可以称之为一个bundle区域);对于每个区域使用一个服务实例(一个arcsoc.exe进程)来进行切片;每个bundle区域的切片即以一个.bundle的文件进行存储。

由bundle而来的分块切片方法

从bundle的存储机制和这种基于bundle的切图机制出发,我们不难想到一种基于先按bundle区域分块切片,再合并的切片的想法。这种想法很自然地也会引出一个问题,我们如何来确定某个比例尺级别一个bundle的大小,又如何生成以为bundle大小为单位的要素图层?为了解决这个问题,我们现需要了解supertile的概念。supertile的概念最早的引入是为了解决重复标注的问题,此处我们暂且不讲它为何能一定程度上解决标注重复的问题(有兴趣的朋友可以去阅读菩提老王的旧文或者查阅相关资料),只来谈谈它和bundle的关系以及我们怎么从supertile要素图层来获得bundle要素图层。我们知道一个瓦片(tile)的大小是256x256 px,而supertile(可以称之为超切片吧)在抗锯齿和非抗锯齿下有不同大小:在开启抗锯齿时大小为2048x2048 px,未开启时为4096x4096 px。此处我们以未开启抗锯齿为例,我们可以计算得到一个supertile对应16x16个瓦片。据此,我们可以进一步计算出某一比例级别的一个bundle含有该级别的8x8个supertile。那么我们怎么获得supertile和bundle呢?从ArcGIS 10开始提供了一个Map Server Cache Tiling Scheme to Polygon的工具,使用该工具可以针对某个切片方案,生成该切片方案所有比例尺的supertile。那么已知比例尺级别之间的关系是:n级的比例尺x2 = n+1级别的比例尺和1个bundle = 8x8 supertile,我们不难推断出n级的supertile所覆盖的区域就是n+3级的一个bundle覆盖的区域。至此,我们已经清楚如何获得的表示bundle的要素图层了:为了获得m级的bundle的要素图层,我们只需使用Map Server Cache Tiling Scheme to Polygon工具来获得m-3级supertile的要素图层即可。
有了bundle要素图层后,我们可以分别导出要素图层成中的每个bundle作为一个独立的要素图层。之后,我们可以使用Manage Tile Cache工具根据每个独立bundle要素图层进行感兴趣区切图。在获得了不同bundle区域的切片后,我们只需要将它们复制粘贴到同一个mxd发布的空切片服务下的相应文件夹即可。

上图内影像为东北地区一景landsat8影像,使用Map Server Cache Tiling Scheme根据默认的ArcGIS Online切片方案对第12级生成的supertile要素图层,当然也就是15级bundle要素图层。

上图为导出的每个bundle区域的要素图层,使用这些单个bundle要素图层对15级进行感兴趣区分块切图。

上图为导入分块切的bundle文件,可以注意到每个框内的三个文件来自于一个bundle区域(测试环境为10.3.1,其他版本文件名可能不同)。在分块切图之后,将生成的bundle文件复制粘贴到一个空的切片服务相应的L15(15级)文件夹内,重新启动服务即可完成

小结

从切片的存储机制出发,对需要切图的范围进行分块切图,可以使后期的合并完美和高效:停止服务 –> 手动复制粘贴切片 –> 启动服务。然而,笔者在测试完成后对本身这个方法有了疑问:这种方法是否真的有意义?我们说到这个方法是根据ArcGIS的切片和切片存储机制来进行分块切图的,也就是说ArcGIS也是这样进行切图和管理切片的,那么我们这种方法是不是,从某种程度上来说,就是把ArcGIS的切图过程给手动化了?如果只是手动化的话,这种方法又有什么意义呢?笔者自己的考虑是,这种方法也许会对遇到某一比例级别的频繁切图出错的情况提供一种可以尝试的解决方案,当然这个还有待测试,这里也希望其他朋友能提供一些建议和指导。

参考:

[1]: ArcGIS Server 10中的切图/缓存机制深入 https://blog.newnaw.com/?p=789

文章来源:https://blog.csdn.net/notxyz/article/details/79787137

0 个评论

要回复文章请先登录注册