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

横に並べた例は少し誤解を招きます。そこにある 3 つのマップは、bindTo呼び出しなしでビューを共有できます。

たとえば、次の 2 つのマップが 1 つのビューを共有しています。

// 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
});

これは、2 つのマップを「同期」するためのより簡単な方法です。違いは、 を使用bindToして 1 つのマップのビュー プロパティを別のマップにバインドすると、 を呼び出すと両方のマップのビューが変更されることですmap.setView(newView)。違いは微妙ですが重要です。どちらの場合も、1 つのビューを複数のマップで共有できます。を呼び出すとbindTomap.setView()バインドされたビュー プロパティを持つすべてのマップも更新されます。

そのため、並べた例のマップの 1 つに新しいビュー与えたい場合、それらすべてに新しいビューを与えるのではなく、最初にビュー プロパティのバインドを解除してから を呼び出す必要があります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 に答える