4

機能をクリックしたときにFoundsを機能に適合させたいのですが、ズームインするときに、ズームインすると表示されるコントロールレイヤーを考慮に入れて、ズームインしますが、左。現在、次のコードでこれを実現できますが、残念ながら、現在の方法ではfitBoundsを使用してズームし、ズームするとpanByを使用して左に150ピクセルパンするため、スムーズなズームではありません。パンがスムーズであれば、おそらく250ミリ秒待った後でも、これはそれほど悪くはありません。理想的には、fitBoundsメソッドに渡された境界でいくつかの計算を実行して、左への150pxのシフトを単純に説明できるようにしたいと思います。

これが私が現在取り組んでいることの例です。

これが私が使用しているコードの簡略化されたバージョンです:(すべてのソースコードを含む完全に機能するバージョンについては、ここをクリックしてください)

クリックすると

function clickFeature(e) {
  var layer = e.target;

  map.fitBounds(layer.getBounds());
}

ZoomEndの地図:

map.on({
  zoomend: function() {
    map.panBy([150, 0]);
  }
});

だから、私は目的の機能を達成しましたが、それはスムーズではありません。

クリックされた機能に対して取得している境界で計算を行う方法はありますか?ズームすると、すでに変更された座標にズームインして、2段階のアニメーションプロセスを排除できますか?

4

2 に答える 2

0

私はこれと同じ問題を抱えていましたが、思ったよりも簡単でした! fitBounds メソッド (およびその問題に関するすべてのパン/ズーム メソッド) でパディングを設定できます。

http://leafletjs.com/reference.html#map-fitboundsオプション

それで:

map.fitBounds(layer.getBounds(),{paddingBottomRight:[150,0]});
于 2014-04-24T16:54:08.340 に答える
0

まず、パン オプションを使用してアニメーションを制御できます。これにより、移行がスムーズになります。それらはここで見ることができます。

次に、変換関数を使用して必要なオフセットを計算できます。これらはここで見ることができます。

たとえば、(頭のてっぺんから) ポリゴン境界のマップ オブジェクトに getBoundsZoom を使用して将来のズームを計算し、そのズームをポリゴンでプロジェクト関数に使用して、新しい LatLngBound を作成するようなことを行うことができます。わずかにオフセットされたポリゴン バウンド。

お役に立てれば!

于 2013-09-09T07:01:47.973 に答える