bluefish

幸福像花儿一样……

ArcGIS Server大数据量地图服务影像缓存建立方法初探

      ArcGIS Server 9.2引入地图服务缓存机制,通过建立静态影像缓存的方式,可以显著改进访问地图服务的速度,地图缓存机制将基于地图服务生成多比例尺分块的地图影像图片,从而显著提高地图服务的执行效率,这种机制允许用户能够直接从缓存影像中快速取出地图图片,而不是和以往传统模式一样,向服务器发出请求,然后再动态生成地图影像。
     大多数时候建立地图影像缓存的工作可以在几个小时以内完成(如市、县一级或其他相对较小的区域),但是有些大数据量的地图影像缓存将花费数天的时间完成(如建立国家一级的小比例尺到城市一级的大比例尺的地图影像缓存),因此,建立良好的总体规划来指导地图服务影像缓存的建立,将会大大减少浪费的时间,而且得到的结果将会更好的符合你的需求。必须牢牢记住一点,地图服务影像缓存也是一种投资,因此,缩短建立地图影像缓存的时间将会降低用户的投资。
     在开始建立地图服务影像缓存之前,用户需要试尝试回答几个问题。这些问题和地图服务影像缓存的建立密切相关,例如:你需要使用什么比例尺范围的地图?你是需要在所有的比例尺下都建立影像缓存呢,还是仅仅只需要在特定的区域建立地图影像缓存(如火车站、国家公园或者主要城市等区域)?另外一些问题是关于硬件环境的,例如,是否具有足够的磁盘空间来存储缓存图片?是否具有足够的资源在有限的时间内完成地图影像缓存的建立?最后,让我们以一个实例开始对建立大数据量地图服务影像缓存进行初步的探讨。

提供的工具

 

ArcGIS Server 9.2提供了两项地图缓存处理工具,生成缓存和更新缓存。
·         生成缓存:用于建立地图服务影像缓存,能够生成地图服务指定比例尺范围内的影像缓存分块。
·         更新缓存:用于更新已建立的地图服务影像缓存,例如:当原始矢量数据更新之后,那么影像缓存也需要同步更新已反映数据的现势性。可以单独更新某个比例尺下特定范围的地图服务缓存,此外还可以用于重新生成丢失的地图缓存影像分块。

      在理想状况下,我们通常简单地使用地图影像缓存建立工具建立缓存,当源数据更新后使用“更新缓存工具”来同步更新地图服务的影像缓存。但是,在实际情况下,硬件和软件的问题都有可能影响地图服务影像缓存的建立。现在我们要介绍的一种做法是尽可能降低这些问题对地图影像缓存的建立,以便用户离开时也能持续建立工作。

工作流程

     在以下的工作流程中,首要的步骤是预先选择小范围的实验片区建立所需比例尺范围的地图服务影像缓存。这样我们可以在开始大范围建立缓存之前预览效果,以便作出相应的调整(例如改变比例尺或者地图符号等)。假如效果不符合要求,我们可以删除影像缓存图片重新建立,一旦效果符合需求,我们就可以开始开展后续工作。

     很多时候,大数据量的影像缓存包括超过上百万张的影像分块图片。ESRI通过ArcGIS Online发布的街道二维地图服务包括全球地图,最大比例尺为1:1908,包括1840万张地图影像分块图片,数量非常巨大,比例尺越大,产生地图影像缓存分块将成几何级数增长。示例中工作流的目的在于分解工作步骤,而不是一次性完成创建大量的地图影像缓存分块,这样的好处是显而易见的,其中某个环节出了问题并不会导致所有的工作失败。

      问题的关键在于如何把大的缓存建立工作分解为小的缓存建立工作子项。我们在更新地图缓存时具有两个选项,一个可以让你设置特定比例尺范围,另外一个可以让你设置特定区域。因此,你可以把所有小比例尺地图缓存建立作为一组工作子项,而在大比例尺下,我们可以分比例尺、分区域逐步建立。本文介绍的工作流程将向你展示整个过程。

示例

     我们以建立路易斯安那州的地图服务影像缓存为例,比例尺范围为3.5M、3M、2M、2M、以及500K。在大比例尺下仅仅需要在路易斯安那州主要城市建立如下比例尺范围的缓存:250K,100K,50K,24K,12K,6K,3K和1K。

      在接下来的工作流程中,首先需要建立实验片区的小比例尺地图服务影像缓存。 在发布地图到SERVER之前,在ArcMap里缩放至实验片区——在这个例程中,我们选择路易斯安那的一个城市,然后设置该城市的范围为地图的全图范 围。具体做法如下:在图层列表中双击数据框架,弹出属性对话框,选择数据框架标签设置地图文档的全图范围为当前可视地图范围。

下一步:发布地图服务,使用“生成缓存”工具建立所有比例尺范围地图影像缓存分块,范围为刚才设置的全图范围。

现在,已经完全生成该城市的所有比例尺范围的地图服务影像缓存,我们可以使用客户端程序浏览缓存图片,察看效果是否满意。

下一步,编辑地图文档,重新设置整个路易斯安那州的范围为全图范围。然后重新启动地图服务,使用“缓存更新工具”生成小比例尺(3.5M,3M,2M,1M,500K)范围的地图服务影像缓存。

缓存更新工具将根据指定比例尺创建城市最小边界范围的影像缓存分块。

  很明显,用户不可能手动运行地理处理工具来更新超过100个单独城市的地图影像缓存,幸运的是,我们可以通过Python脚本的方式来循环调用地图缓存更新工具执行地图缓存更新,下面的例程向我们展示使用的方法。

在例程中,小比例尺和大比例尺之间的工作断点划分取决于城市大比例尺地图缓存的所需的比例尺,而不是整个地图的比例尺。通常来说,如果希望在所有比例尺下建立整个地图的缓存,那么需要自己根据数据量去确定工作断点的设置,主要还是根据一次性要生成影像分块的数量来定,当然也要考虑硬件的性能。ESRI技术网站提供了工具下载可以让我们确定某一比例尺生成地图缓存影像分块的数量http://arcscripts.esri.com/details.asp?dbid=15045

这些需要生成影像缓存的城市是离散分布的,换句话说,如果用户的需求是建立整个地图所有比例尺范围内的地图影像缓存,那么需要一个连续的区域图层(如郡县界)来进一步细分整个州的范围,在该例程中使用规则的矩形网格来划分影像缓存区域,每个矩形网格代表一个地图影像缓存创建的工作子项。

  脚本

示例中的脚本可以根据一个多边形图层来分区域更新地图影像缓存,在脚本中可以指定需要更新的区域(必须在统一投影坐标系下),需要建立缓存的区域以及其他更新缓存的参数(包括服务器名,服务名,数据框架名,比例尺、更新模式以及是否进行反锯齿处理等)

在脚本执行时,首先会检测要素图层确认是否“Cached”字段存在,如果没有,那么首先会创建“Cached”字段,然后开始逐个要素更新地图服务影像缓存。当一个更新子过程完成时会自动循环到下一个要素。假如“Cached”字段存在,将会跳过已被标记更新的要素,进入到下一个更新子过程。

 

摘自:http://www.3snews.net/bbs/viewthread.php?tid=5863&highlight=%BB%BA%B4%E6

 

 

 


 

posted on 2009-03-27 15:52  bluefish  阅读(1018)  评论(0)    收藏  举报

导航