ArcGIS 为您提供了在用户访问时按需创建地图缓存切片的选项。 第一个导航到未缓存区域的用户必须等待相应的切片由服务器绘制。 然后将切片添加到服务的缓存文件夹并保留在服务器上,直到服务器管理员更新或删除。 这意味着该区域的后续访问者将不必等待创建切片。
巧妙地使用按需缓存可以为您节省大量的时间和磁盘空间。 大多数地图,尤其是以大比例(放大后)显示时,地图读者都会看到一些空旷的、不可用的或不感兴趣的区域。 按需缓存可以减轻您创建和存储这些不需要的切片的负担,但如果需要,用户仍然可以查看该区域。
尽管按需缓存是一个非常有用的功能,但误用或滥用按需缓存功能会对性能造成负面影响。 以下部分包含了有关有效使用按需缓存方面的提示。
获得最佳性能
全地图缓存的一个好处是您可以快速提供复杂的地图,因为 ArcGIS Server 站点正在分发地图的切片图像;它不会对每个请求都绘制地图。 但是,当使用按需缓存时,ArcGIS Server 站点必须在用户导航到未缓存区域时动态绘制切片。 此动态绘图比常规请求花费更长时间,因为 ArcGIS Server 站点一次创建一组切片。 如果地图服务使用抗锯齿,则这组切片的尺寸为 2048x2048 像素,如果不使用抗锯齿,则为 4096x4096 像素。 因此,您必须准备好地图,以便以可接受的速度绘制大面积区域。
抢先版本:
在这种情况下,ArcGIS Server 站点不会一次创建单个切片,因为如果这样做,您会看到重复的标注,因为标注引擎无法确定相邻切片上存在哪些标注。
下两个部分介绍了几种可减少按需缓存性能开销的方法。
确定进行按需缓存的位置
配置按需缓存时,要确定的最重要的事情是将按需创建哪些区域以及将预缓存哪些区域。 不要使用按需缓存来构建整个缓存。 您始终应该在希望用户流量最大的地图区域中预创建一些切片,从而最大限度地减少用户按需请求切片时所消耗的服务器资源。
确定地图的哪些区域最受欢迎,很大程度上取决于地图的目的和受众。 对于常规的底图而言,人口密集场所、道路、海岸线、停车场以及其他感兴趣的位置被访问的机会要比其他区域多。
专题地图(相对于底图)可能会显示热门地点的不同趋势。 例如,一家矿业公司使用的地图可能在矿山密度最大的地区使用率最高。 而矿产高密度区很可能是一般人群很少关注的人迹罕至区域或山区。
要确定应预缓存哪些区域,无论是在线还是在桌面上,请检查当前地图的使用模式。 可通过观测用户所倾向的导航位置和所查询的要素来了解更多信息。
数据可用性和分辨率也很重要。 如果某些区域的数据很差或不存在,您可以跳过缓存这些区域。 如果没有数据需要进行显示,即使某个用户请求了按需切片,绘制也不会花费太长时间。
数据也可能与地图目的密切相关。 例如,如果您与交通部门合作,请确保预缓存具有高密度道路和铁路的区域。 空间分析工具,如核密度分析可以帮助您确定热门要素较多的常用区域。
在确定用户最常访问的位置后,创建一个隔离这些区域的要素类。 运行管理地图服务器缓存切片工具时引用此要素类来确保切片仅在其边界内创建。
您可以在模型或脚本中将多个工具链接在一起,获得这个热门地点的要素类。 模型可以包含各种预期热门的要素输入,可选择缓冲要素或确定其密度,最后对输出执行后处理以确保生成的要素类适用于缓存模板。 例如,您可以使用简化面地理处理工具来删除可能会减慢缓存工具速度的过多折点。
隔离越多的地图的热门区域,使用预缓存切片而不是按需创建切片可以满足的请求就越多。 在大范围内,您可能只需要缓存一小部分地图即可满足绝大多数用户请求。 您可能会决定使用您所节省下来的时间和磁盘空间来战略性地缓存其他比例等级。
测试和优化地图
许多组织拥有最初为桌面 GIS 目的准备的复杂地图文档。 这些地图往往需要进行调整,以获得网络用户所期望的快速反应时间。
在更改地图前,请创建一小块区域的测试缓存,以便为您提供一些基线数据。 选择一个很好的混合了地图各地形的区域:城镇和乡村、平原和山区。 记下创建测试缓存所需的时间。 接下来,启用按需缓存并缩放到未缓存的区域。 请注意切片以各种比例出现需要多长时间。 如果此时性能可以接受,则不必作任何调整。
对于地图服务中低效率图层的高级检测,请将 ArcGIS Server 站点的记录级别设置为详细。 对地图服务发出一个绘制请求,如缩放至 ArcGIS Pro 中的某个书签。 然后检查 ArcGIS Server Manager 中的 ArcGIS Server 日志并记录绘制每个图层的所花时间。 您将很快能够分辨出哪些图层花费的时间最多。 最好在地图的随机区域中以不同的缓存比例重复此练习。 完成测试后,请不要忘记将记录设回之前的级别,因为“详细”记录会写入更多通常并不需要的日志信息。
优化地图后,制作另一个测试缓存并注意按需创建切片需要多长时间。 如果此时性能仍然不能接受,可以执行以下操作之一:
- 预缓存更大区域。 这样一来,遇到按需切片的机会将有所降低。 可以尝试将按需缓存限定在比例最大、最为空旷的区域内,进而确保一次只需绘制少量要素。
- 创建完全缓存。 通过预缓存所有切片,您将不再需要按需创建切片。 如果有时间和空间来创建完整缓存,这可能是最佳选择,且不会经常更新。 如果在缓存期间服务器停机时间是个问题,您可以将缓存作业编程为发生在晚上和周末,以稳定地构建服务的缓存,直到填满。 您也可以将一个服务实例专门用于进行缓存,而将其他的实例用于处理用户请求。
- 使用动态绘制服务。 如果构建完整缓存并不可行,而使用动态绘制服务后的性能是可以接受的,则完全可以选择不进行缓存。 虽然使用此选项不会获得最佳性能,但地图服务中的数据永远是最新的。
更新切片
编辑缓存地图服务的源数据时,必须先更新缓存,用户才能看到更改。 如果遵循基于要素类预缓存区域并按需填充其余缓存的建议,则必须注意更新包括所有必要的区域。
当您按需使用创建的切片时,您可以遵循两种策略来更新缓存。
删除所有按需创建的切片,然后再执行更新
如果您是按需创建切片,您可能会根据要素类预缓存某个区域。 通常情况下,您也可以依据要素类执行更新,此时如果不删除按需切片,它们就会过期。
要删除这些切片,请运行管理地图服务器缓存切片,并使用删除切片模式。 根据针对要素类预缓存的相反顺序删除切片。 您可以使用 ArcGIS 编辑工具制作一个表示地图全图的面,并在其中为预缓存的区域挖一个孔。 生成的圆环面是应该删除切片的区域。 有关如何在 ArcGIS Pro 中使用裁剪工具在面中挖孔的说明,请参阅在面要素中挖孔。
也可先删除缓存中的所有切片,之后再进行更新,但如果缓存较大,这样做可能对 ArcGIS Server 站点上的资源产生不利影响。
如果用户抱怨每次更新后必须等待某个地点进行按需缓存,请将此地点添加到预缓存的区域。 当您明智地进行预缓存时,按需缓存应该只在地图中不太感兴趣区域以随机模式不经常发生。 如果用户经常返回至地图上某地点,应该对此地点进行预缓存。
使缓存更新操作仅限定在已对数据进行编辑的区域
实现此操作的一种方法是:使用地理数据库归档或自定义工具来追踪自上次更新之后做出的所有更改,将这些进行过更改的区域导出到某个要素类中,并基于此要素类的边界更新切片。
如果确实打算仅更新执行过编辑操作的区域,则不必删除所有按需创建的切片。