基于要素边界的地图缓存
ArcGIS Server 地图缓存工具允许您将切片的创建限制在要素类边界范围内。要执行此操作,请使用位于“管理地图服务器缓存切片”工具底部的使用要素类更新特定区域选项。
设置要素类边界进行缓存,将允许您仅在所需位置创建切片,避免出现空的或不感兴趣的区域。例如,当您对一个国家/地区进行缓存时,则可能只需要提供主要城区的要素类。这样做,服务器就只需预创建覆盖那些城区的切片。其余区域则可以根据客户端的请求按需进行缓存。这样您就不必预先创建不需要的乡村区域的切片,从而节省了时间和磁盘空间。
下图显示的是当要素类只包含加利福尼亚时即将创建的切片的理论格网。设置使用要素类更新特定区域可避免在海洋和毗邻的州中创建不需要的切片。假如您使用的是默认的矩形范围,则会包含这些不需要的切片。
追踪缓存状态
设置要素类进行缓存,不仅可以为您节省空间,而且还可以帮助您追踪缓存状态。可以使用“管理地图服务器缓存切片”工具来标记已在哪些要素的区域上创建了切片。如果选择使用状态追踪,会针对正在缓存的要素类向其中添加已缓存字段。当已为某个要素的特定范围创建切片后,该要素的缓存字段会标记为是。
如果在相同的要素类上,再次运行工具来使用要素类更新特定区域,则工具仅为其“已缓存”字段还没有标记为“是”的记录创建切片。如果之前的缓存作业发生了中断而且很可能比选择重新创建空切片选项时(选中缓存中的所有切片)的执行速度快,上述方法就十分有用。如果不想让工具从中断的位置处开始执行,您必须移除“已缓存”字段并将该字段的值更改为“是”以外的值,或选中用于忽略状态追踪的选项。
与使用重新创建空切片选项相比,通过启用状态追踪以从失败的缓存作业中恢复的速度要快得多。
最佳做法
以下提示有助于您以更有效的方式来基于要素类创建缓存:
在大比例下仅通过要素类进行缓存
在小比例下,创建相对较少的切片,这样无论是否通过要素类进行缓存,都不会有太大的区别。如果在小和中等比例下创建所有切片,可确保当用户打开地图并执行放大操作时,他们不会丢失任何切片,也不必按需创建任何切片。
为使出现同名标注的概率降至最低,缓存工具将先绘制较大区域的图像或超级切片,之后再将图像剪切成所需大小的切片。启用抗锯齿功能后,超级切片为 2048 x 2048 像素;否则为 4096 x 4096 像素。当您的要素与超级切片的边界相交时,必须创建整个超级切片。这意味着,在通过要素类进行缓存开始在节省时间和磁盘空间方面获得实际效果之前,进行了某种程度的放大。如果要素数量众多且遍布于地图上,由于大部分要素将与超级切片相交,因此,通过要素类进行缓存可能并不会给您带来多大好处。
概化要素边界
如果要素类中存在过多的折点,往往会减慢缓存工具的速度,但幸运的是您不需要有许多折点。事实上,无论要素类中的要素信息多详细,缓存工具绘制方形区域时都会弱化这一边界信息。您的要素类不需要包含所有的岛屿、码头和水港。
可以使用简化面工具将折点从要素类中系统地移除,而不改变常规形状。如果您的要素类是从模型中派生而来的,您可以将“简化面”作为模型中的最后一步操作。某些工具(如缓冲区)可将过多的折点添加到您的要素类中。
下面的图像显示所创建的一组切片极其相似,无论您使用详细的要素类还是使用概化的要素类。通过使用“简化面”工具,第二个要素类中的大部分折点已被移除。灰色方形表示一个大小为 4096 x 4096 的超级切片,比例约为 1:4500。
避免使用小要素
要使 CPU 利用率最高,请避免使用非常小的要素定义缓存作业。在任何给定时间,都会分配每个服务实例(ArcSOC.exe 进程)来创建一个宽为 128 个切片、高为 128 个切片的切片区域。在此区域内,任何其他 ArcSOC.exe 进程都无法创建切片。如果要素面积小于此值,则只能由一个 ArcSOC.exe 进程处理该缓存。如果这些 128 x 128 区域中恰好有一个区域的边界与要素相交,则可让两个或更多个 ArcSOC.exe 进程处理该缓存;但边界是以切片原点为基础,所以并不总能计算出它会落在何处。
因此,最佳做法是创建大要素来定义缓存作业。大要素包含许多这种 128 x 128 切片区域,所以大多数情况下 ArcSOC.exe 进程都会被占用。
将大量要素融合为少量要素
根据小要素获取大要素的方法之一是使用融合工具。此工具会获取多个单独要素,然后将其转换为一个多部分要素。聚合面是另一种具有类似效果的实用工具,它会移除小面或将小面合并成一个大面形状。这两种工具都能帮助您在缓存时提高服务实例的使用效率。
使用区域来追踪状态
如上文所述融合完要素类后,可考虑将其剪切为几个大区域,以便仍可对状态进行追踪。确定最佳区域大小可能很困难。如上文所述,您希望区域大到能够最佳利用 ArcSOC.exe 进程,而一旦切片创建失败,又希望区域小到不会浪费太多工作量。
一种创建缓存区域的有效方式是使用创建渔网工具创建一个格网,并将其裁剪至您的要素类边界。您可以在 ArcMap 中打开剪裁后格网的副本,之后产生类似如下的缓存工具报告:“Processing feature with OID = 8”、“Processing feature with OID = 9”等。
您可能想对您的格网化要素类手动执行某些处理后操作,以便将某些最小的要素与它们的较大相邻要素进行合并。请注意上图中的小岛是如何融合到相邻区域,以免包括非常小的要素。