常见缓存问题
以下为有关地图和 globe 缓存的常见问题。问题主题按从简单到高级的顺序排列。在很多情况下,这些答案也可在帮助中的其他地方找到。然而,此主题可能比搜索帮助更快地提供具体问题的答案。
常见缓存问题
地图缓存问题
Globe 缓存问题
为什么缓存工具重新启动服务?
管理地图服务器缓存切片及其他缓存工具在后台执行了多种需要在工具运行之前和之后重新启动服务的操作。例如,创建切片之前,管理地图服务器缓存切片会增大服务的超时值以在大型缓存作业期间避免超时,然后在切片创建后将超时时长设置回原始值。
同样,如果缓存工具更改了 conf.xml 切片方案文件,地图服务也需要重新启动以获取这些更改。例如,如果使用管理地图服务器缓存比例添加比例或从缓存中删除比例,地图服务需要重新启动以识别对切片方案的更改。
重新启动期间服务将短时间不可用。
如何在某些比例下生成完整缓存,而在其他比例下生成部分缓存?
大比例下,预先创建预期最常用的切片并设置按需创建其余切片通常是一种很好的做法。与此相反,小比例下可能要创建完整缓存,因为小比例需要较少切片并将在客户端最初查看地图时被频繁查看。
可多次运行管理地图服务器缓存切片工具以在地图的某级别构建部分缓存而在其他级别构建完整缓存。
假定存在要在以下比例下缓存的地图:
- 1:128000
- 1:64000
- 1:32000
- 1:16000
- 1:8000
- 1:4000
可运行管理地图服务器缓存切片,然后仅选中 1:128000、1:64000 和 1:32000 复选框。默认情况下,将缓存这些比例的完整范围。
然后可再次运行工具,并仅选中 1:16000、1:8000 和 1:4000 复选框。而且,可选择基于要素类中要素的范围(例如城市或郡县边界)来缓存这些比例级别,而不是缓存地图的全图范围。此操作创建了这三个比例级别下的部分缓存。或者,可选择按需创建这些比例下的其他切片。
仅在切片方案的部分比例下生成缓存的最佳方法是什么?
管理地图服务器缓存切片工具列出切片方案中的所有比例,每个比例旁有一个复选框。如果仅要生成切片方案中部分级别下的缓存,执行此工具前取消选中不想缓存的比例。
使用 ArcGIS Online、Bing 地图或 Google 地图服务叠加缓存时,仅在切片方案的级别子集下构建缓存是常见的工作流程。在很多情况下,最好使用这些底图叠加数据,但您可能没有时间和磁盘空间来匹配这些服务使用的所有比例。可使用与这些服务相同的切片方案,并只在运行工具前取消选中大比例。
为何 10.0 版地图缓存有时比 9.x 版要慢?
要解答这一问题,先要了解一下有关 10.0 版中服务器如何处理缓存作业的背景知识。
在 ArcGIS 10 中,用于构建缓存的服务实例(ArcSOC.exe 进程)所分配到的不间断处理面积单位要比 9.x 版所使用的单位大得多。在处理下一区域之前,ArcSOC.exe 进程要处理 128 x 128 切片大小的区域。为了简单起见,我们将其称为“包”,即使在创建松散缓存时不一定要创建包文件也是如此。
缓存期间,每个 ArcSOC.exe 都会处理一个包,然后接着处理下一个可用包。在某个给定的时间,只有一个 ArcSOC.exe 进程可以处理一个包。
在 9.x 版中,ArcSOC.exe 进程的工作单元是“超级切片”,其大小为 2048 x 2048 像素(没有抗锯齿功能时为 4096 x 4096 像素),该尺寸要比包小得多。转换为使用包作为工作单元可以优化磁盘 I/O 和网络吞吐量,从而显著提升性能。ArcSOC.exe 进程更改分配的频率更小,因而能够专注于创建切片。
但使用包会产生不利影响:在处理较小的缓存或者根据非常小的要素边界执行缓存时,创建缓存所需的时间可能会比 9.x 版略长。这仅仅是因为可用的包数可能少于可用的 ArcSOC.exe 进程数。如果有八个 ArcSOC.exe 进程可用于处理缓存,但只有一个包涉及到感兴趣区域,则将仅使用一个 ArcSOC.exe 进程。这是一种在处理大型缓存作业的同时提高缓存工具效率的折衷方法。
对于大型缓存,要想避免出现这种情况,最佳的方法就是根据所含包数多于可用 ArcSOC.exe 进程数的大型要素边界来进行缓存。
如何为空白缓存区域显示“数据不可用”切片?
如果缓存区域不存在,则可按需创建切片或配置 Web 服务器返回“数据不可用”切片。如果平移至地图边缘或导航至未完成缓存的区域,则“数据不可用”切片同样非常有用。在某些情况下,与不返回任何内容相比,配置服务器返回“数据不可用”切片可提供更好的用户体验。
有关不使用任何虚拟缓存目录时的说明(包括所有 JavaScript、Flex 以及 Silverlight 应用程序)
对于基于 REST 的应用程序(如通过 ArcGIS API for JavaScript、ArcGIS API for Flex 或 ArcGIS API for Silverlight 构建的应用程序),您可以通过在缓存的根目录中放置空的切片(如 missing.png、missing.jpg 或 blank.png)来配置“数据不可用”切片。如果在缓存中无法找到切片,则切片处理程序服务将默认使用此切片。该技术对不使用(或禁用)虚拟缓存目录进行缓存的 Web ADF 应用程序同样适用。说明如下:
- 创建与切片方案中的切片尺寸和影像格式相同的影像。将其命名为 missing.png 或 missing.jpg。如果需要清晰的空白切片(如用于需要透明度的叠加服务的切片),则使用 blank.png。要下载示例切片,请参阅 ESRI 知识库文章 36939。
- 将文件 missing.png、missing.jpg 或 blank.png 保存到地图服务的 _alllayers 文件夹下。例如:C:\arcgisserver\arcgiscache\MyMapService\Layers\_alllayers\missing.png。
ArcGIS Server 切片处理程序会自动处理缺失的切片,方法为使用缓存根级别的特殊“缺失”或“空白”切片来替换应得到但缺失的切片。
Web ADF 应用程序使用虚拟缓存目录的条件下创建自定义错误响应示例 - IIS
如果您正在构建使用虚拟目录的 Web ADF 应用程序,则可在虚拟目录中为 HTTP Error 404 创建错误响应:未找到。Web 服务器返回切片,而不是错误消息。下面是 IIS 6 的示例:
- 打开 Windows 控制面板,然后单击管理工具 > Internet 信息服务 (IIS) 管理器。
- 导航至虚拟缓存目录,查找包含地图缓存的文件夹。右键单击文件夹,然后单击属性。
- 单击自定义错误选项卡,向下滚动,然后选择 404 错误代码。
- 单击编辑按钮。在 URL 框中,指定切片丢失时 IIS 应返回的切片。使用相对 URL 而不只是文件路径。
- 单击确定关闭对话框。
Web ADF 应用程序使用虚拟缓存目录的条件下创建自定义错误响应示例 - Apache
- 备份位于 <apache 安装位置>\conf下的 httpd.conf 文件。
- 在文本编辑器中打开 httpd.conf 文件。
- 查看缓存目录是否已存在任何目录条目。大多数情况下,类似如下所示:
<Directory "C:/ arcgisserver/arcgiscache"> Options Indexes FollowSymLinks AllowOverride None Order allow,deny Allow from all </Directory>
目录标记中的精确设置可能不同,但会列出缓存的路径。如果具有此目录,转到步骤 5。
- 如果没有目录标记,则查找如下所示指代 htdocs 的标记:
<Directory "C:/Program Files/Apache Software Foundation/Apache2.2/htdocs"> Options Indexes FollowSymLinks AllowOverride None Order allow,deny Allow from all </Directory>
在其下方创建新条目:
<Directory "C:/ arcgisserver/arcgiscache"> </Directory>
将继续使用默认目录设置。
- 在缓存目录标记中,放置以下内容:
ErrorDocument 404 /arcgiscache/data_not_avail.jpg
此时具有类似如下所示的内容:
<Directory "C:/ arcgisserver/arcgiscache"> ErrorDocument 404 /arcgiscache/data_not_avail.jpg </Directory>
如果这是现有目录条目,还可能具有其他设置。
- 重新启动 Apache 服务器。
如何在缓存中避免出现同名标注?
如果在地图文档中正使用动态标注引擎来放置标注(而不是注记),可能偶尔会在缓存切片中看到同名标注。这种情况的出现不会比 4096 x 4096 像素在任一方向上发生更频繁。使用注记可消除所有同名标注。使用注记时,标注与地图上某个点相关联,不会存在同名现象。
以上建议适用于融合缓存。使用多图层缓存时,缓存图像中将不包含标注。将在缓存图像之上动态绘制这些标注。
如果在 9.2 .NET Web ADF 中使用多图层缓存,很可能会看到许多同名标注,因为会为每个切片绘制一组动态标注。在 9.3 及以后的版本中,此行为有所改善;然而,出于对性能方面的考虑,通常应只将在 ArcMap 中使用的多图层缓存作为客户端。
基于要素类边界创建缓存时,为什么能看到某些切片在要素外部创建?
为了在切片上避免同名标注,缓存工具最初绘制 4096 x 4096 像素的区域(默认的 256 x 256 像素切片大小的 256 个切片),然后将此区域裁剪为切片方案中请求大小的切片。根据切片方案以及要素类的位置和形状,4096 x 4096 区域的某些切片可能落在要素类边界之外。这属于预期的行为。在任何方向都不应看到在超出 4,096 像素的要素类边界之外创建切片。
按需创建切片时,为什么在用户地图范围之外创建额外切片?
请求新切片时(按需或使用缓存工具),始终成组创建切片。缓存机制一次不会仅创建一个切片。如果一次仅创建了一个切片,则将会看到许多同名标注,因为服务器将不会意识到相邻切片上的标注。
如果已启用按需缓存,并且平移至未缓存区域,则服务器将绘制一个 4096 x 4096 像素区域,然后将其裁剪为切片。因此,如果切片尺寸为 256 x 256 像素,可预期创建多达 256 个切片。如果地图包含许多图层或复杂符号,将导致客户端等待时间较长。
因此,强烈建议为地图的常用区域预创建切片,仅在较不常用区域使用按需缓存。如果具有复杂的源地图文档,请避免按需构建整个缓存。
对于 globe 服务应该使用什么切片方案?
与地图服务不同,所有 globe 服务使用相同的切片方案,因此不必进行任何操作来为 globe 服务设置切片方案。将在内置地球切片方案级别自动缓存数据。
如果仔细观察,将能看到这些级别反映在 ArcGlobe 或 ArcGIS Explorer 中。随着在地球上不断放大,将会注意到经过不同高度时图片会变得略微清晰或模糊一些。
ArcGIS Online/Bing 地图/Google 地图切片方案中的比例与 ArcGlobe 中的内置比例级别大致匹配。如果打算将 2D 地图服务叠加在地球表面,此切片方案通常为很好的选择。除了切片方案在外观上非常理想之外,ArcGlobe 设计为可使用此切片方案快速绘制 2D 服务。