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

本主题包含三个部分。第一部分概述了 ArcGIS 应用程序访问和使用地图缓存切片的方式。第二部分介绍了这些应用程序存储切片(以备日后使用)的方式。最后一部分介绍了如何在 ArcGIS 应用程序中叠加地图缓存。

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

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

Web 应用程序

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

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

提示提示:

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

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

    http://myServer/ArcGIS/rest/services/myService/MapServer/tile/10/1723/3495.jpg

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

ArcMap

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

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

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

ArcGlobe 和 ArcGIS Explorer

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

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

在客户端进行图层的本地缓存

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

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

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

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

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

叠加缓存

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

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

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

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

在 ArcMap 中叠加地图缓存

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

强制动态绘制

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

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

9/15/2013