我在页面中创建了两个openlayer地图,现在我想让它们同步工作。
例如,更改了一个地图的中心或缩放,然后另一个地图相应地更改了它。
反之亦然。
我应该在地图上注册哪个活动?
答案 0 :(得分:1)
这确实是可能的,正如我刚刚做到的那样。你需要陷入“移动”状态。并且'移动'来自地图的事件被平移或缩放(在缩放结束时触发moveend,但您可以陷阱' zoomend'以及安全方面)。如果您使用父地图捕获这些作为上下文,那么您可以获得新的地图中心。请记住,如果正在使用导航控件并使用鼠标进行缩放,则地图中心可以在地图缩放时更改。然后使用moveTo方法(childmap.moveTo()。
我选择了moveTo方法(尽管没有详细记录),这是在任何地图上的任何平移或缩放事件中始终最终调用的内容。顺便说一下,调用moveTo也会导致移动'移动'要在子地图上触发的事件。
如果使用json制作地图集合并使用jQuery,实际代码看起来就像这样(我假设您知道如何在OpenLayers中捕获地图事件);
var newCentre = zoomedMap.getCenter();
$.each(maps, function (ind, map) {
if (map !== zoomedMap) map.moveTo(newCentre, newZoom);
});
其中maps是我的地图集合,zoomedMap是用户实际触发平移或缩放事件的地图(我称之为zoomeMap,但它可以很容易地被称为pannedMap),并且(显然)地图是集合中需要移动的地图。
在我选择上述代码之前,我玩了一下。这里的优点是$ .each不会等待moveTo函数返回,所以你看起来更加光滑同步。当然,如果你只是同步两张地图,那么这不会是一个问题。
对不起,在问到这个问题之后很久就发布了这个问题,但也许它会帮助那些新的搜索者。