もっと良い方法はありますか?
マップにいくつかのトラックを追加し (リーフレット gpx プラグインを使用)、追加されたすべてのトラックの境界にマップを合わせたいと考えています。
featureGroup レイヤーを使用してトラックを含めることにより、機能グループを使用して fitBounds() メソッドを使用できます。ただし、featureGroup には fitBounds() をトリガーするロード済みイベントがなく、マップにも適切なトリガーがないようです。
マップがレンダリングされた後、マップ上で fitBounds() を直接呼び出すと、「無効な境界」エラーで失敗します。ただし、呼び出しを約 1 秒遅らせると、正しく実行できます。
グループ内のすべての gpx レイヤーが読み込まれるまでに時間がかかり、それが完了するまで、グループは有効な境界のセットを返すことができないということが起こっていると思います。
そのため、setTimeout を使用して fitBounds() の動作を遅らせることはできますが、マップ自体が再レンダリングされるときに厄介な点滅が発生します。より良い方法はありますか?
これは機能します:
// mapname has been created and tracks have already been loaded into their individual layers
var tracksLayer = L.featureGroup([track1,track2,track3]);
tracksLayer.addTo(mapname);
//this works, with more and complex tracks you might need a longer timeout
setTimeout(function(){ mapname.fitBounds(tracksLayer.getBounds()); }, 1000);
// this however does not work
// mapname.on('load', function() { mapname.fitBounds(tracksLayer.getBounds());});
//nor does this despite the fact that by this stage the map has been created and the featureGroup added
// mapname.fitBounds(tracksLayer.getBounds());