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
发生这种情况是因为它改变了分辨率以适应范围。如果您更改地图 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)