Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使两个openlayers映射同步工作_Openlayers - Fatal编程技术网

如何使两个openlayers映射同步工作

如何使两个openlayers映射同步工作,openlayers,Openlayers,我在我的页面中创建了两个openlayer地图,现在我希望它们能够同步工作 例如,一张地图的中心或缩放发生了更改,而另一张地图的中心或缩放发生了相应的更改 反之亦然 我应该将哪个事件注册到地图上?这确实是可能的,因为我刚才已经这么做了。您需要捕获正在平移或缩放的地图中的“moveend”和“move”事件(moveend在缩放结束时触发,但为了安全起见,您也可以捕获“zoomend”)。如果使用父地图作为上下文捕捉这些,则可以获得新的地图中心。请记住,如果使用导航控件并使用鼠标进行缩放,则地图缩

我在我的页面中创建了两个openlayer地图,现在我希望它们能够同步工作

例如,一张地图的中心或缩放发生了更改,而另一张地图的中心或缩放发生了相应的更改

反之亦然


我应该将哪个事件注册到地图上?

这确实是可能的,因为我刚才已经这么做了。您需要捕获正在平移或缩放的地图中的“moveend”和“move”事件(moveend在缩放结束时触发,但为了安全起见,您也可以捕获“zoomend”)。如果使用父地图作为上下文捕捉这些,则可以获得新的地图中心。请记住,如果使用导航控件并使用鼠标进行缩放,则地图缩放时地图中心可能会发生变化。然后使用moveTo方法(childmap.moveTo()

我选择了moveTo方法(尽管没有很好的文档记录),这是在任何地图上的任何平移或缩放事件中最终调用的方法。另外,调用moveTo也会导致在子地图上触发“move”、“moveend”事件

如果您使用json创建一个映射集合,并使用jQuery,那么实际的代码将如下所示(我假设您知道如何在OpenLayers中捕获映射事件)

其中,“地图”是我的地图集合,“zoomedMap”是用户实际触发平移或缩放事件的地图(我称之为“zoomeMap”,但也可以简单地称之为“pannedMap”),(显然)地图是集合中需要移动的地图

在我使用上面的代码之前,我做了一些尝试。这里的优点是$。每个都不需要等待moveTo函数返回,因此您可以获得更流畅的同步。当然,如果您只同步两个地图,这并不是一个真正的问题


我很抱歉在问题被问了这么久之后才发布这篇文章,但也许它会帮助任何新的搜索者。

嘿,你有什么更新要在这里分享吗?我也处于同一阶段。。。
var newCentre = zoomedMap.getCenter();

$.each(maps, function (ind, map) {
            if (map !== zoomedMap) map.moveTo(newCentre, newZoom);
        });