2009年3月8日星期日

【原】AE之鹰眼的实现

大家都用过百度地图或者googole地图吧,在它们主地图的右下角,有个小地图窗口,这就是鹰眼窗口。用鼠标拖动鹰眼里的小窗口,则主地图便移动到相应的位置。下面就介绍鹰眼的实现。
鹰眼和主地图的互动,主要体现在两个方面:一是主地图的地图改变了,则鹰眼里的矩形框要移动到对应的位置,以指示当前地图在整个地图中的位置;二是鹰眼的矩形框移动了,则主地图中显示的地图要移动到相应的位置。
AE中显示地图的控件叫 ESRI MapControl,这里主要用到了它的OnAfterDraw事件。在主地图的OnAfterDraw事件中,根据当前地图的大小,改变鹰眼中矩形框的大小;在鹰眼的OnAfterDraw事件中,根据矩形框的位置,确定主地图中地图的位置。google地图的鹰眼还实现了矩形框的拖动,这个也很好实现,呵呵。在鼠标点击到鹰眼控件时,先判断是否在矩形框内,如果在的话,用一个状态量记住这个状态,此时如果鼠标移动,则矩形框跟着相应的移动;若不在矩形框内,则矩形框移动到鼠标点击的位置。

4 条评论:

  1. 方法讲解言简意赅,可以对比着SuperMap和MapInfo讲讲它们关于鹰眼实现的异同,呵呵。

    关于鹰眼矩形框的拖动,我们的客户端实现了么?我怎么感觉好像没有印象...^_^

    回复删除
  2. AE的版本已经实现了拖动矩形框。

    回复删除
  3. ArcEngine,SupermapObjects和MapInfo这三者在实现的原理方面都是一样的,只是具体的事件名称可能不一样。AE中可能叫OnAfterDraw,SupermapObjects中就叫OnAfterMapDraw,从字面的意思就可以理解这个事件,就是地图重新绘制之后触发的事件。

    回复删除