客户端使用地图缓存的方法
本主题包含三部分。第一部分概述了 ArcGIS 应用程序访问和使用地图缓存中切片的方式。第二部分介绍了这些应用程序存储切片(以备日后使用)的方式。最后一部分介绍了如何在 ArcGIS 应用程序中叠加地图缓存。
应用程序如何访问和使用缓存
生成地图缓存后,地图服务会自动进行重新启动,并将立即开始使用该缓存。任何可以显示地图服务的 ArcGIS 应用程序都将使用该缓存,只不过各应用程序检索和使用切片的方式各不相同。
Web 应用程序
使用 ArcGIS API for JavaScript、ArcGIS API for Flex 和 ArcGIS API for Silverlight 进行开发时,您将使用特定类来指定正在连接的是切片(已缓存的)地图服务。例如,使用 JavaScript API 时,会使用 ArcGISTiledMapServiceLayer 连接到已缓存的服务。当使用已缓存的服务时,会通过 REST 调用将切片从缓存目录检索到地图服务中。切片请求所采用的格式为 http://<地图服务 URL>/tile/<级别>/<行>/<列>。
使用 Web 应用程序开发框架 (ADF) 时,向应用程序中添加已缓存地图服务的方式与添加任何其他地图服务相同。地图 (Map) 控件可辨别出服务是否已被缓存,并会对服务进行处理以获取缓存切片(如果存在切片)。叠加缓存时,如果 Web ADF 无法获取到某一服务的任何切片,则它会将该服务视为动态服务。
与 GIS 服务器之间建立首次连接后,Web ADF 将直接从虚拟缓存目录中检索切片。这是应用程序用以获取缓存的最为快速的方法。但该检索切片的方法仅适用于以松散格式存储的缓存。
如果虚拟缓存目录不可用或缓存是以紧密格式存储的,则 Web ADF 应用程序会尝试从文件系统上的缓存目录中获取切片。要了解 Web ADF 在无法立即从虚拟缓存目录中获取切片的情况下是如何尝试检索切片的,请参阅地图 (Map) 控件介绍。
在任意 Web 应用程序中查看单个已缓存服务时,如果平移到了某个不存在任何切片的区域,则应用程序将不显示动态图像,导致您无法看到任何内容。有一种方式可以确保在平移到未缓存的区域时仍能看到地图,那就是启用按需缓存。
如果地图的显示速度比预期慢,请检查地图图像的 URL,看看应用程序是否正在检索切片。可通过以下方式来执行此操作:在 Mozilla Firefox 中打开该应用程序,然后单击工具 > 页面信息 > 媒体。
- 如果 URL 如下所示,则说明应用程序正通过 REST 请求成功获取切片:
http://myServer/ArcGIS/rest/services/myService/MapServer/tile/10/1723/3495.jpg
- 如果 URL 如下所示,则说明应用程序正从虚拟缓存目录成功获取切片:
http://myServer:8399/arcgiscache/myService/Layers/_alllayers/L00/R00001019/C00000c55.png
- 如果 URL 如下所示,则说明应用程序无法从虚拟缓存目录中获取切片,正从服务器的文件系统中成功获取切片:
http://myServer:8399/arcgis/services/myService/MapServer?mapname=Electric%20Solutions&level=14&column=2851&row=6544&format=PNG24&time=1191520207507
- 如果地图图像的 URL 格式不是以上任意一种形式,则说明应用程序正以一种低效方式检索切片,或者根本未使用缓存。
从不建议您在 Web 应用程序中使用多图层缓存。如果需要打开和关闭图层,可以通过叠加两个或多个融合缓存的方式来达到与使用多图层缓存相同的视觉效果。要执行此操作,请使用以下工作流程:
- 将已参与多图层缓存的各组图层放置在其各自的地图文档中。确保所有地图文档的全图范围均相同。
- 将各地图文档发布为地图服务。
- 使用同一切片方案为各地图服务创建融合缓存(不需要使用匹配的图像格式)。
- 将服务添加到具有所需图层顺序和透明度的地图中。这样,该地图的用户便可打开和关闭服务。
ArcMap
您可以使用“添加数据”按钮向 ArcMap 中添加已缓存的地图服务,添加方式与添加任何其他地图服务相同。可通过以下两种方法在 ArcMap 中查看缓存:
- 通过地图服务访问缓存。要按此方式查看缓存,请浏览至创建该缓存时所使用的 GIS 服务器和地图服务。在此种情况下,ArcMap 会与 GIS 服务器建立首次连接,确定服务是否有缓存。然后 ArcMap 会从服务器文件系统上的缓存目录中检索切片。
- 将缓存作为栅格数据集进行访问。 要按此种方式查看缓存,请浏览至包含缓存切片的目录,然后选择将数据集添加至 ArcMap 中。表示缓存的图标与使用“添加数据”按钮添加的所有其他栅格的图标相同。作为栅格进行访问的缓存只能进行查看,不能进行查询。此种类型缓存的优势在于,它不与地图服务相互绑定,因此,即便已断开与服务器的连接,只要仍能访问缓存目录,便可继续查看该缓存。
对切片执行请求时,如果切片比例与缓存中某一比例级别完全匹配,则地图服务将直接返回该切片。但更多时候,请求并不与缓存中的任一比例级别完全匹配。在此种情况下,ArcMap 通常会从下一个最接近比例级别请求切片,然后对其重采样以匹配请求的比例。该重采样过程仍然要比动态生成切片快得多,但它会导致图像发生变形。正由于该重采样过程,在 ArcMap 中以某种比例读取被缓存过的地图标注时可能会遇到困难。因此,要获得最佳结果,请以创建缓存时所用的比例或与该比例相接近的比例查看地图。
ArcMap 是最适于使用多图层缓存的客户端。这是因为,ArcMap 能够在客户端上混合并标注多图层缓存切片(这与 Web ADF 应用程序不同)。
ArcGlobe 和 ArcGIS Explorer
ArcGlobe 和 ArcGIS Explorer 可读取 2D 缓存并将其叠加在地球表面上。如果能用 ArcGIS Online、Google 地图和 Bing 地图所使用的任一内置切片方案构建缓存,则将能够获得最佳性能。如果无法使用这些切片方案,则可通过使用 ArcGIS Server globe 服务来获得最佳性能。
当创建了 2D 地图缓存并想基于该 2D 缓存创建相同的 3D globe 缓存时,您可能会希望将地图服务添加至 ArcGlobe 中。在此种情况下,您需要考虑的仅是生成缓存而已,而不用考虑导航地球。
对客户端上的图层进行本地缓存
ArcMap、ArcGIS Explorer 和 ArcGlobe 均会保留您曾访问过的切片的本地缓存。当您缩放或平移回这些区域时,应用程序便会使用本地缓存,而不需要再次从服务器检索切片。
您可以选择是将本地缓存保存在磁盘上以供以后的会话使用,还是仅针对当前会话使用本地缓存。
您还可以选择不对切片进行本地缓存。尽管这样会使本地缓存所带来的性能优势不复存在,但却可以确保始终从服务器中获得最新切片。
有可能服务器管理员已禁用了图层的本地缓存,这也就意味着,您将始终获得最新切片。如果是这样,则用于在本地保存缓存的其他选项将不可用。
如果服务器管理员对您已查看过的服务器缓存区域进行了更新,那么,您必须先清除本地缓存才能查看所做更改。ArcMap、ArcGIS Explorer 和 ArcGlobe 无法检测到缓存是否有更新。因此,如果您是服务器管理员,当更新的数据可用后,您需要提醒用户,以便他们及时清除本地缓存。
叠加缓存
设计将与其他地图缓存相叠加的地图缓存时,有一些重要的缓存设计因素需要加以考虑,具体需要考虑哪些因素取决于查看缓存所用的应用程序。
在 Web 应用程序中叠加地图缓存
Web 应用程序(如用 ArcGIS API for JavaScript 构建的 Web 应用程序)要求叠加缓存时坐标系和切片大小必须匹配。此外,应使匹配的比例数目尽量多。
达到此目的的最简便方式就是先匹配两个缓存的切片方案,然后仅以对每个缓存均适用的比例创建切片。这样便可确保坐标系和切片大小均匹配,而且软件也能辨别出两个缓存具有相同的比例。
在 Web ADF 应用程序中设计将与其他地图缓存相叠加的地图缓存时,同样需要遵循一些规则来确保缓存成功进行叠加。要了解有关这些条件的详细信息,请参阅在 Java Web ADF 中叠加地图缓存。
在 ArcMap 中叠加地图缓存
在 ArcMap 中,您可以叠加任意数量的地图缓存。缓存无需具有相同的切片方案或投影;但由于 ArcMap 会执行重新采样和重新投影过程,因此最好还是使用相同的切片方案和投影以提高地图的性能和美学质量。