ArcGis Server中使用事件方式同步map控件与自定义层的位置

 

在使用ArcGis Server9.3 + VS.Net 2008开发实时性、动态性要求比较高的B/S系统时,经常需要在map控件中使用动态的自定义图片,但是ArcGis Server 9.3本身是不支持动态图片的显示。如果要使用自定义的动态图片,就需要自已在map控件上创建用于图片的层的显示。这种方式虽然能使系统支持在map控件上显示动态图片,但是在位置的更新时存在层与map控件刷新不同步的问题。网上的解决方案都是在页面中使用JavaScript方法去循环检测层与map控件的位置是否保持一致,这种方案虽然能够在某种程度上解决层与map控件位置刷新不同步的问题,但是在map控件中的操作比较频繁时,页面中的层有明显的跳动且有延迟,显示效果很不尽人意,如果将循环的间隔时间设的很短,又会加重服务器的负担。

通过分析使用循环检测方案存在的问题可以知道循环检测方案是一种被动的方式,那么如果我们能使用主动的方式,也就是在map控件发生操作的时候主动的隐藏掉显示动态图片的层,在操作完成后再调用更新动态图片层的方法就可以解决位置不同步和显示效果不尽人意的问题。使用主动的方式时,最关键的就是事件的绑定;如果我们将隐藏的事件绑定在map控件上,产生的效果与使用循环的效果差不多,原因是因为事件的触发总是要等到map控件有响应了才会发生,所以我们需要将事件绑定在比map控件更上一层的控件中,经过查找资源,在ArcGis Server9.3 ADF JavaScript For .netAPI中找到了map控件的_containerDiv的属性,通过属性名称可以大概知道这个属性是包含map控件的容器的访问接口。通过将事件绑定在包含map控件的容器上,解决了位置不同步和显示效果跳动、延迟的问题。

posted @ 2009-11-16 17:03  AooYu  阅读(649)  评论(0编辑  收藏  举报