Skip To Content

客户端使用地图缓存的方法

在本主题中

本主题包含三个部分。第一部分概述了 ArcGIS 应用程序访问和使用地图缓存切片的方式。第二部分介绍了这些应用程序存储切片(以备日后使用)的方式。第三部分介绍如何通过调整 Web 浏览器可在多长时间内重复使用其本地缓存中的切片来提高切片的显示性能。最后一部分介绍了在 ArcGIS 应用程序中叠加地图缓存的方式。

应用程序如何访问和使用缓存

在您定义了地图服务的切片方案之后,服务即会开始尝试使用缓存。任何可以显示地图服务的 ArcGIS 应用程序都将使用该缓存,只不过各应用程序检索和使用切片的方式各不相同。

Web 应用程序

当使用 ArcGIS API for JavaScript 进行开发时,您需要使用特定的类来指定正在连接的是一个切片(缓存的)地图服务。例如,可使用 ArcGISTiledMapServiceLayer 连接到缓存服务。而使用这一缓存服务时,则要通过 REST 调用将切片从缓存目录检索到地图服务中。切片请求所采用的格式为 http://<map service URL>/tile/<level>/<row>/<column>

在任一 Web 应用程序中查看单个缓存服务时,如果平移到了某个不存在任何切片的区域,应用程序将不会显示动态图像,从而导致您无法看到任何内容。可确保您在平移到未缓存区域时仍能看到地图的唯一方式就是启用按需缓存。

提示:

如果地图的显示速度比预期慢,请检查地图图像的 URL,以确定应用程序是否正在检索切片。可通过以下方式执行此操作:在 Mozilla Firefox 中打开该应用程序,然后单击 Firefox > Web 开发者 > Web 控制台。打开控制台后,单击网络按钮,然后开始缩放或平移地图。

  • 如果 URL 如下所示,则说明应用程序正通过 REST 请求成功获取切片:

    http://gisserver.domain.com:6080/arcgis/rest/services/myService/MapServer/tile/10/1723/3495.jpg

  • 如果地图图像的 URL 格式不是以上任意一种形式,则说明应用程序正以一种低效方式检索切片,或者根本未使用缓存。

ArcMap 和 ArcGIS Pro

您可以使用添加数据按钮向 ArcMap 和 ArcGIS Pro 中添加缓存的地图服务,添加方式与添加任何其他地图服务的方式完全相同。有两种方法可以查看缓存:

  • 通过地图服务访问缓存 - 要以此种方式查看缓存,请浏览至用于创建缓存的 GIS 服务器和地图服务。这种情况下,将与 GIS 服务器建立一个初始连接,以确定此服务是否具有缓存。然后会从服务器文件系统上的缓存目录中检索切片。
  • 以访问栅格数据集的形式访问这一缓存 - 要按此种方式查看缓存,请浏览至包含缓存切片的目录,然后添加数据集。表示缓存的图标与通过添加数据按钮添加所有其他栅格时所使用的图标相同。作为栅格访问的缓存只能进行查看,不能进行查询。此种类型缓存的优势在于,它不与地图服务相绑定,因此,即便断开了与服务器的连接,只要仍能访问缓存目录,便可继续查看该缓存。

对切片执行请求时,如果切片比例与缓存中某一比例级别完全匹配,地图服务就将直接返回该切片。但更多时候,请求并不与缓存中的任一比例级别完全匹配。此种情况下,通常会请求下一个最接近比例级别下的切片,然后对其重采样以匹配所请求的比例。该重采样过程仍然要比动态生成切片快得多,但它会导致图像发生变形。正是由于该重采样过程,以某种比例读取缓存的地图标注时可能会遇到困难。因此,要获得最佳结果,请以创建缓存时所用的比例或与该比例相接近的比例查看地图。

ArcGlobe 和 ArcGIS Explorer

ArcGlobe 和 ArcGIS Explorer 可读取 2D 缓存并将其叠加在地球表面上。如果使用 ArcGIS Online/Google 地图/Bing 地图切片方案构建缓存,您将会获得最佳性能。如果无法使用这些切片方案,则可通过使用 globe 服务来获得最佳性能。

当您创建了一个 2D 地图缓存并想基于该 2D 缓存创建相同的 3D globe 缓存时,您可能会希望将地图服务添加至 ArcGlobe 中。此种情况下,您需要考虑的仅是生成缓存而已,而不用考虑导航地球。

提高缓存地图服务的显示性能

当客户端向 ArcGIS Server 发送请求以显示地图服务时,服务器上的响应通常由浏览器进行缓存,并在一段时间之内重复使用。此行为有助于 ArcGIS Server 获得最理想的地图服务显示性能。但您可以考虑根据地图服务及其相关数据在应用程序中的使用方式来调整浏览器缓存中的响应将使用多长时间。通过将名为 cacheControlMaxAge 的属性添加到服务的 JavaScript 对象标记法 (JSON),可实现上述操作。

cacheControlMaxAge 属性的使用方式

ArcGIS Server 地图服务响应包括实体标签 (ETag) 和缓存控制头。ETag 头值是响应的唯一标识符。缓存控制头具有一个最长期限值,该值可向浏览器提供有关浏览器缓存中响应可供重复使用的最大时段的信息。该值由 cacheControlMaxAge 属性控制。

如果重复请求且尚未超过缓存的最长期限,则浏览器将使用缓存的响应而不会将请求发送到服务器。如果最长期限已过期,则浏览器必须将请求发送到服务器,并通过与其缓存中响应相对应的相关 ETag 值设置 IF-NONE-MATCH 头。ArcGIS Server 将评估请求,并使用 ETag 值来确定响应是否更改。如果服务器的响应与浏览器中的副本不同,则服务器会将一个全新的响应发送到浏览器。如果响应与浏览器中的副本一致,则服务器将提示浏览器继续使用其缓存中的响应。

定义 cacheControlMaxAge 属性值

ArcGIS Server 管理员可定义 cacheControlMaxAge 属性,以指定允许浏览器使用缓存响应的时长。通过减少 ArcGIS Server 发送完整响应的需要,可提高浏览器缓存的效率,有助于优化应用程序,从而节省网络带宽。

对于不允许客户端本地缓存切片的缓存地图服务,默认值为 0。这表示浏览器始终重新发送请求,且 ArcGIS Server 将处理请求并在内容发生更改的情况下向浏览器发送完整的响应。此值适用于大多数应用程序。

对于允许客户端本地缓存切片的缓存地图服务,默认值为 86,400 秒(1 天)。这表示如果在 1 天内重复请求,浏览器将使用其缓存中的响应。

对于地图或数据不会发生频繁更改的缓存地图服务,建议将默认值增加到 30 天(259.2000 秒)或更长,从而最大限度地降低网络流量。

要将 cacheControlMaxAge 属性添加到服务并指定其默认值,请执行以下操作:

  1. 在 Web 浏览器中打开 ArcGIS Server 管理员目录,然后以具有管理员权限的用户身份进行登录。URL 的格式为 http://gisserver.domain.com:6080/arcgis/admin
  2. 单击服务,然后从服务列表中选择要修改的地图服务。如果此处没有列出您的服务,则可能在根文件夹下的目录中列出。
  3. 服务 - <服务名称>(<服务类型>)页面中滚动至底部,然后单击编辑
  4. 服务属性对话框中,找到服务 JSON 的属性部分。
  5. cacheControlMaxAge 属性添加到该部分,然后指定属性值(以秒为单位),如:
    "properties": {
      "cacheControlMaxAge": "2592000",
  6. 单击保存编辑内容
  7. 服务 - <服务名称>(<服务类型>)页面中,验证属性部分中是否显示 cacheControlMaxAge 属性以及您为该属性指定的值。

ArcGIS for Desktop 中图层的本地缓存

ArcGIS for Desktop(ArcMap、ArcGIS Pro、ArcGIS Explorer 和 ArcGlobe)均会保留您曾访问过的切片的本地缓存。当您缩放或平移回这些区域时,应用程序便会使用本地缓存,而不需要再次从服务器检索切片。

您可以选择是将本地缓存保存在磁盘上以供以后的会话使用,还是仅针对当前会话使用本地缓存。

您还可以选择不对切片进行本地缓存。尽管这样会使本地缓存所带来的性能优势不复存在,但却可以确保始终从服务器中获得最新切片。

可能的情况是服务器管理员禁用了图层的本地缓存,这也就意味着,您将始终获得最新切片。如果是这样,则用于在本地保存缓存的其他选项将不可用。

如果服务器管理员对您已查看过的服务器缓存区域进行了更新,那么,您必须先清除本地缓存才能查看所做的更改。ArcGIS for Desktop 无法检测到缓存是否有更新。因此,如果您是服务器管理员,当更新的数据可用后,您需要提醒用户,以便他们及时清除本地缓存。

叠加缓存

设计将与其他地图缓存相叠加的地图缓存时,需要考虑一些重要的缓存设计因素,具体要考虑哪些因素取决于查看缓存所用的应用程序。

在 Web 应用程序中叠加地图缓存

使用 ArcGIS API for JavaScript 构建的 Web 应用程序要求叠加缓存时坐标系和切片大小必须匹配。此外,应使匹配的比例数目尽可能地多。

达到此目的的最简便方式就是先匹配两个缓存的切片方案,然后仅以对每个缓存均适用的比例创建切片。这样便可确保坐标系和切片大小均匹配,而且软件也能辨别出两个缓存具有相同的比例。

在 ArcMap 和 ArcGIS Pro 中叠加地图缓存

您可以在 ArcMap 和 ArcGIS Pro 中叠加任意数量的地图缓存。缓存无需具有相同的切片方案或投影;但由于会执行重新采样和重新投影过程,因此最好还是使用相同的切片方案和投影以提高地图的性能和美学质量。

强制动态绘制

在某些情况下,您可能想要强制服务忽略缓存并进行动态绘制,即使是切片在某些级别可用的情况下。例如,假设您正使用 ArcGIS API for JavaScript 开发 Web 应用程序。您有一个地图在缩放级别 0 - 15 范围内缓存,但应在级别 16 - 19 范围内动态绘制。这可能是您要以大比例显示实时数据的情况,也可能是要以大比例缓存的地图覆盖面积过于宽广的情况。

此情景的解决方案是在服务器上启用动态图层,并在地图中指定要使用动态图层的请求(级别为 16 - 19)。否则,服务将返回一个由可用切片构建的地图,该地图在切片不存在的区域将为空白。