打开图层3:如何在并排贴图上取消绑定bindTo事件?

时间:2014-04-19 00:16:26

标签: javascript maps openlayers-3

我试图通过在他们的官方页面上构建这个示例代码来解开Open Layers 3中的并排映射:

http://ol3js.org/en/master/examples/side-by-side.html

我想调用取消绑定地图的页面。到目前为止,我尝试使用此处记录的“unbind”和“unbindAll”调用:

http://ol3js.org/en/master/apidoc/ol.Object.html

我已经尝试了以下每个调用,但没有一个有效:

domMap.unbind('view');
domMap.unbindAll();

webglMap.unbind('view');
webglMap.unbindAll();

canvasMap.unbind('view');
canvasMap.unbindAll();

......我应该尝试一些建议或替代方案吗?

1 个答案:

答案 0 :(得分:2)

side-by-side example有点误导。这三张地图可以在没有bindTo电话的情况下共享视图。

例如,这里有两张地图共享一个视图:

// one view shared by two maps
var view = new ol.View({
  center: [0, 0],
  zoom: 1
});

var map1 = new ol.Map({
  target: 'map1',
  view: view
});

var map2 = new ol.Map({
  target: 'map2',
  view: view
});

这是“同步”两张地图的一种更直接的方式。不同之处在于,如果使用bindTo将一个地图的视图属性绑定到另一个地图,则在调用map.setView(newView)时,将更改两个地图的视图。差异很微妙但很重要。在这两种情况下,您都可以拥有多个地图共享的单个视图。如果您致电bindTo,则在调用map.setView()时,所有带有绑定视图属性的地图也会更新。

所以,如果你想在并排的例子中给出一个新的视图而不用为它们提供一个新的视图,你首先必须取消绑定视图属性和然后拨打setView

// give only the canvasMap a new view
canvasMap.unbind('view');
canvasMap.setView(new ol.View({center: [0, 0], zoom: 1}));

您应该能够确认在unbind调用后,所有地图仍然共享相同的视图实例(例如canvasMap.getView() === domMap.getView())。