在与一个地图进行交互时,一次平移和缩放多个地图

时间:2018-01-28 17:51:58

标签: maps openlayers zooming interaction panning

我有两个Openlayers地图,显示两个不同(无线电)频率的天空区域的两个图像(png文件)。

我想知道是否可以将一个地图上的平移或缩放结果复制到另一个地图并相互反复。换句话说,我想在一个窗口同时复制一个交互(Pan - Zoom)的效果。

提前谢谢

1 个答案:

答案 0 :(得分:0)

是的,您可以通过聆听一个ol.View的事件并将其应用于第二张地图来实现。

使用change:resolution,您可以进行缩放并使用change:center平移。

var view = new ol.View({
  center: [0, 0], zoom: 2
});
var view2 = new ol.View({
  center: [0, 0], zoom: 2
});
var source = new ol.source.OSM();

var map = new ol.Map({
  layers: [
    new ol.layer.Tile({
      source: source
    })
  ],
  target: 'map',
  view: view
});
var map2 = new ol.Map({
  layers: [
    new ol.layer.Tile({
      source: new ol.source.OSM()
    })
  ],
  target: 'map2',
  view: view2
});

function updateView(event, viewRef){
  let newValue = event.target.get(event.key);

  if(event.key === 'center') {
    // we need to transform the value, it comes in an other projection
    newValue = ol.proj.transform(newValue , source.getProjection(), 'EPSG:3857');
    // offset the value somehow here
  }
  viewRef.set(event.key, newValue);
}

view.on('change:resolution', function(event){
  updateView(event, view2);
});

view.on('change:center', function(event){
  updateView(event, view2);
});
.map{
    max-height: 100px;
  }
<link href="https://openlayers.org/en/v4.6.4/css/ol.css" rel="stylesheet"/>
<script src="https://openlayers.org/en/v4.6.4/build/ol-debug.js"></script>
<div id="map" class="map"></div>
<div id="map2" class="map"></div>