1

我正在尝试通过在其官方页面上构建此示例代码来解开 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();

...有什么我应该尝试的建议或替代方案吗?

4

1 回答 1

2

并排的例子有点误导。那里的三张地图可以在没有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())。

于 2014-11-11T20:41:14.487 回答