2016-12-16 3 views
2

でview.animate()を使用して:view.fit()私が持ってOpenLayersをするために書かれた次のコードは、3.20を事前OpenLayersを3.20+

fitViewToFeature: function (viewer, feature) { 
    var pan = ol.animation.pan({ 
     source: viewer.olView.getCenter(), 
     duration: 1000 
    }) 

    var zoom = ol.animation.zoom({ 
     resolution: viewer.olView.getResolution(), 
     duration: 1000 
    }) 

    viewer.olMap.beforeRender(pan, zoom) 

    viewer.olView.fit(feature.getGeometry(), viewer.olMap.getSize(), { 
     padding: [ 100, 100, 100, 100 ], 
     constrainResolution: false, 
     maxZoom: 4 
    }) 
} 

私の質問は、新しいビューには、この機能を変換する方法です。 OpenLayers 3.20で導入されたanimate()構文?

また、GitHubの問題を開いて、view.animateに追加する新しいオプションをリクエストする必要がありますか?

答えて

5

あなたはol.View#fit()durationオプションを使用して、はるかに簡単な方法で、同じアニメーションを実現することができるはずです。

viewer.olView.fit(feature.getGeometry(), { 
    duration: 1000 
}); 

OpenLayersを4.xでは上記の作品

+0

でヌルのプロパティ「長さ」を読み込めませんhttps://github.com/openlayers/openlayers/releases/tag/v4.0.0を反映させますか?私はこれを受け入れられた答えにしてうれしいですが、今は3.20としか互換しません。 – zsero

+0

私は答えを更新しました。 – ahocevar

0

@zsero、私はレイヤーソースの範囲にズームするために同じ関数を使用します。 view.animate()を私のルートの半分まで使用し、コールバック関数ではview.fit()を使用します。

私はそう私はエラーメッセージを持っている)(view.fitにsetTimeoutをする必要があります。 あなたはOL4のためにこの答えを更新することができますol.View.updateAnimations_

var origine = view.getCenter(); 
var destination = ol.extent.getCenter(extent); 
var middleDestination = [(origine[0] + destination[0])/2, (origine[1] + destination[1])/2]; 
var viewFit = function() { 
    setTimeout(function() { 
     view.fit(extent, map.getSize(), { 
      duration: duration/2, 
      padding: [ 64, 10, 10, 328 ], 
      constrainResolution: false 
     }) 
    }, 0) 
} 
var animation = function() { 
    view.animate({ 
     center: middleDestination, 
     duration: duration/2 
    }); 
    view.animate({ 
     zoom: zoom - backZoom, 
     duration: duration/2 
    }, viewFit); 
} 
関連する問題