2017-12-12 20 views
0

OpenLayersを使用して、1マップのビューを別のものと同じに設定します。 これまではZoom and Centerを使用していましたが、これはうまくいきましたが、あるプロジェクションでは技術的に不可能であったため、ある程度はやってみました。OpenLayers - 現在のエクステントへのフィットがズームアウトされています

私は最新のOpenLayers(4.6.3)を使用しています。

次のコードは理論的には現在のマップの範囲を取得し、その範囲にマップを適合させ、何も動かないようにする必要があります。

let view = map.getView(); 
let extent = view.calculateExtent(map.getSize()); 
view.fit(extent, map.getSize()); 

しかし、私は(プラスボタンで例えば、6回のクリック)十分にズームインし、その後、上記のコードを実行した場合、実際に、それだけで何のIされていない、私はそれを実行するたびにズームアウト欲しいです。

私はconstraintResolutionを試しましたが、ダメージを最小限に抑え、完全には除去しません。ここで

はと遊ぶのがフィドルです: http://jsfiddle.net/t6uvybd3/1/ (私はOLのバージョンがあるのか​​わからないのですが、それはそこにも起こるん)

ビデオ:https://www.youtube.com/watch?v=ZAV_FuZ-p7M&feature=youtu.be

+0

コードで何も起こりません。 –

+0

6倍ズームしましたか? – Amit

+0

はボタンとホイールの両方で試しました。 –

答えて

1

これが起こっていることのでエクステントに合わせるために解像度を変更します。マップdivのサイズを変更すると、おそらく問題に直面することはありません。いずれにしても、これはopenlayerの不正行為と思われますが、回避策があります。

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); 
+0

これは、getResolutionを使用し、getResolutionForExtentを使用しない場合にのみ有効です。ありがとうございました – Amit

+0

心配ありません。助けてうれしい! – pavlos

関連する問題