OpenLayers - 适合当前范围正在缩小

Ami*_*mit 2 javascript openlayers openlayers-3

使用 OpenLayers,我想设置 1 个地图的视图,使其与另一个地图相同。到目前为止,我使用了缩放和居中,效果很好,但由于某些投影在技术上不可行,我尝试在一定程度上进行操作。

我正在使用最新的 OpenLayers (4.6.3)。

理论上,以下代码应该获取我当前地图的范围,并将我的地图适合该范围,这样就不会发生任何移动。

let view = map.getView();
let extent = view.calculateExtent(map.getSize());
view.fit(extent, map.getSize());
Run Code Online (Sandbox Code Playgroud)

但实际上,如果我放大得足够大(例如,点击加号按钮 6 次),然后运行上面的代码,它每次运行时都会缩小,这不是我想要的。

我尝试过constraintResolution,但它最大限度地减少了损害,而不是完全消除它。

这是一个可以玩的小提琴:http://jsfiddle.net/t6uvybd3/1/ (我不确定那里的ol版本是什么,但它也确实在那里发生)

视频:https://www.youtube.com/watch? v=ZAV_FuZ-p7M&feature=youtu.be

pav*_*los 5

发生这种情况是因为它改变了分辨率以适应范围。如果您更改地图 div 的大小,您可能不会遇到这个问题。无论如何,这似乎是 openlayers 的不当行为,但这里有一个解决方法。

var map = new ol.Map({
   target: 'map',
   loadTilesWhileAnimating: true,
   layers: [new ol.layer.Tile({source: new ol.source.OSM()})],
   view: new ol.View({
      center: ol.proj.transform([0, 0], 'EPSG:4326', 'EPSG:3857'),
      zoom: 1
   })
});

var fitExtentAnimated = document.getElementById('fit-extent-animated');
fitExtentAnimated.addEventListener('click', function() {

  let view = map.getView();
  let extent = view.calculateExtent(map.getSize());
  //hold the current resolution
  let res = view.getResolution();
  //if you use older versions of ol3 use `fitExtent` istead of `fit`
  view.fit(extent, map.getSize());
  //apply the resolution back 
  view.setResolution(res);
}, false);
Run Code Online (Sandbox Code Playgroud)