当您在客户端应用程序中使用地图缓存时,请考虑每个应用程序处理切片的方式、切片是否存储在本地以及叠加缓存需要满足的条件。
应用程序如何访问和使用缓存
在您定义了地图服务的切片方案之后,服务即会开始尝试使用缓存。 任何可以显示地图服务的 ArcGIS 应用程序都将使用缓存,尽管应用程序之间检索和使用切片的方式有所不同。
Web 应用程序
当使用 ArcGIS API for JavaScript 进行开发时,您需要使用特定的类来指定正在连接的是一个切片(缓存的)地图服务。 例如,可使用 ArcGISTiledMapServiceLayer 连接到缓存服务。 而使用这一缓存服务时,则要通过 REST 调用将切片从缓存目录检索到地图服务中。 切片请求所采用的格式为 https://<map service URL>/tile/<level>/<row>/<column>。
在任一 Web 应用程序中查看单个缓存服务时,如果平移到了某个不存在任何切片的区域,应用程序将不会显示动态图像,从而导致您无法看到任何内容。 确保您在平移到未缓存区域时看到地图的一种方法是启用按需缓存。
提示:
如果地图的显示速度比预期慢,请检查地图图像的 URL,以确定应用程序是否正在检索切片。 可通过以下方式执行此操作:在 Mozilla Firefox 中打开该应用程序,然后单击 Firefox > Web 开发者 > Web 控制台。 打开控制台后,单击网络按钮,然后开始缩放或平移地图。
如果 URL 如下所示,则说明应用程序正通过 REST 请求成功获取切片:
https://gisserver.domain.com:6443/arcgis/rest/services/myService/MapServer/tile/10/1723/3495.jpg
如果您看到地图图像其他某种 URL 格式,则表明您的应用程序检索切片的方式的效率较低,或者未使用缓存。
ArcMap 和 ArcGIS Pro
您可以使用添加数据按钮向 ArcMap 和 ArcGIS Pro 中添加缓存的地图服务,添加方式与添加任何其他地图服务的方式完全相同。 有两种方法可以查看缓存:
- 通过地图服务访问缓存 - 要以此种方式查看缓存,请浏览至用于创建缓存的 GIS 服务器和地图服务。 这种情况下,将与 GIS 服务器建立一个初始连接,以确定此服务是否具有缓存。 然后会从服务器文件系统上的缓存目录中检索切片。
- 以访问栅格数据集的形式访问这一缓存 - 要按此种方式查看缓存,请浏览至包含缓存切片的目录,然后添加数据集。 表示缓存的图标与通过添加数据按钮添加所有其他栅格时所使用的图标相同。 作为栅格访问的缓存只能进行查看,不能进行查询。 此种类型缓存的优势在于,它不与地图服务相绑定,因此,即便断开了与服务器的连接,只要仍能访问缓存目录,便可继续查看该缓存。
对切片执行请求时,如果切片比例与缓存中某一比例级别完全匹配,地图服务就将直接返回该切片。 但更多时候,请求并不与缓存中的任一比例级别完全匹配。 此种情况下,通常会请求下一个最接近比例级别下的切片,然后对其重采样以匹配所请求的比例。 该重采样过程仍然要比动态生成切片快得多,但它会导致图像发生变形。 正是由于该重采样过程,以某种比例读取缓存的地图标注时可能会遇到困难。 要获得最佳结果,请以创建缓存时所用的比例或与该比例相接近的比例查看地图。
使用缓存内容打印地图
地图缓存和 Web 地图打印的标准在许多方面都需要一致的性能。 但是,您可能会发现缓存地图服务的分辨率对于打印质量而言并不令人满意。 打印的地图通常需要每英寸 200 点(dpi)或更高的分辨率,而 ArcGIS 中的地图缓存通常以 96 dpi 显示。
ArcGIS Server 内置的 PrintingTools 服务允许您平衡地图缓存和地图打印的目标。 为此,它使用默认情况下在地图服务上处于启用状态的动态图层。
该服务考虑是否启用动态图层。 当具有缓存内容的地图服务(包括 WMS 服务)已启用动态图层时,该服务将查询地图服务的源数据,从而以更高的分辨率导出地图范围。 这是绕过地图缓存的动态操作。
如果未在具有缓存内容的地图服务或 WMS 服务上启用动态图层,则 PrintingTools 服务将从服务器站点上的缓存中导出地图范围。 此操作的地图结果将为地图缓存的 96 dpi 分辨率,这可能不会满足对打印地图的期望。
要使用 PrintingTools 服务从缓存地图服务中打印高质量的输出(换句话说,打印质量分辨率),建议您启用动态图层选项。
提高缓存地图服务的显示性能
当客户端向 ArcGIS Server 发送请求以显示地图服务时,服务器上的响应通常由浏览器进行缓存,并在一段时间之内重复使用。 此行为有助于 ArcGIS Server 获得最理想的地图服务显示性能。 但您可以考虑根据地图服务及其相关数据在应用程序中的使用方式来调整浏览器缓存中的响应将使用多长时间。 通过将名为 cacheControlMaxAge 的属性添加到服务的 JavaScript 对象标记法 (JSON),可实现上述操作。
cacheControlMaxAge 属性的使用方式
ArcGIS Server 地图服务响应包括实体标签 (ETag) 和缓存控制头。 ETag 头值是响应的唯一标识符。 缓存控制头具有一个最长期限值,该值可向浏览器提供有关浏览器缓存中响应可供重复使用的最大时段的信息。 该值由 cacheControlMaxAge 属性控制。
如果重复请求且尚未超过缓存的最长期限,则浏览器将使用缓存的响应而不会将请求发送到服务器。 如果最长期限已过期,则浏览器必须将请求发送到服务器,并通过与其缓存中响应相对应的相关 ETag 值设置 IF-NONE-MATCH 头。 ArcGIS Server 评估请求,并使用 ETag 值来确定响应是否更改。 如果服务器的响应与浏览器中的副本不同,则服务器会将一个全新的响应发送到浏览器。 如果响应与浏览器上的副本相同,则服务器会警告浏览器继续在其缓存中使用响应。
定义 cacheControlMaxAge 属性值
要指定允许浏览器使用缓存响应的时长,请定义 cacheControlMaxAge 属性。 每一个服务缓存都能设置该属性。 通过减少 ArcGIS Server 发送完整响应的需要,可提高浏览器缓存的效率,有助于优化应用程序,从而节省网络带宽。
对于不允许客户端本地缓存切片的缓存地图服务,默认值为 0。这表示浏览器始终重新发送请求,且 ArcGIS Server 将处理请求并在内容发生更改的情况下向浏览器发送完整的响应。 该值适用于大多数应用程序。
对于允许客户端本地缓存切片的缓存地图服务,默认值为 86,400 秒(1 天)。 这表示如果在 1 天内重复请求,浏览器将使用其缓存中的响应。
对于地图或数据不会发生频繁更改的缓存地图服务,建议将默认值增加到 30 天(259,2000 秒)或更长,从而最大限度地降低网络流量。
要将 cacheControlMaxAge 属性添加到服务并指定其默认值,请执行以下操作:
- 在 web 浏览器中打开 ArcGIS Server 管理员目录,然后以具有管理员权限的用户身份进行登录。 URL 地址格式为 https://gisserver.domain.com:6443/arcgis/admin。
- 单击服务,然后从服务列表中选择要修改的地图服务。 如果此处没有列出您的服务,则可能在根文件夹下的目录中列出。
- 在服务 - <服务名称> (<服务类型>) 页面,滚动至底部然后单击编辑。
- 在服务属性对话框中,找到服务 JSON 的属性部分。
- 将 cacheControlMaxAge 属性添加到该部分,然后指定属性值(以秒为单位),如:
"properties": { "cacheControlMaxAge": "2592000",
- 单击保存编辑。
- 在服务 - <服务名称>(<服务类型>)页面,验证属性部分中是否显示 cacheControlMaxAge 属性以及您为该属性指定的值。
叠加缓存
设计将与其他地图缓存相叠加的地图缓存时,应用程会要求坐标系和切片大小必须匹配。 最好尽可能地匹配更多的比例。
达到此目的的最简便方式就是先匹配两个缓存的切片方案,然后仅以对每个缓存均适用的比例创建切片。 这样,您可以确保您已匹配坐标系和切片大小,并且软件可以识别出这两个缓存具有相同的比例。