境界が変更された場合にトリガーされるイベントがあることは知っていbounds_changed
ますが、fitBounds がいつ完了したか (境界が変更されたとき、または境界が同じままであったとき) を知る必要があります。
Google にはある種の許容範囲があり、境界がほとんど変更されていない場合、実際には境界が変更されず、bounds_changed が呼び出されません。これがいつ起こるかを知る必要があります。
タイムアウトを使用してこれを正常に実行しましたが、bounds_changed がトリガーされるのに 100 ミリ秒以上かかると、ハッキーでエラーが発生する可能性があります。
例を参照してください: http://jsbin.com/sosurexuke/1/edit?js,console,output
より良い解決策はありますか?
編集: map.getBounds() が fitBounds() を送信しているものと同じかどうかを確認するだけだと思う場合、境界へのフィッティングの結果が通常、送信した境界に近くないことを知ってがっかりするでしょう. これが可能かもしれないと思ってこの関数を書きました
function boundsAreIdentical(bounds1, bounds2) {
if (!bounds1 || !bounds2) return false;
var tolerance = 0.00001;
console.log(bounds1.getNorthEast().lat(), bounds2.getNorthEast().lat());
console.log(bounds1.getNorthEast().lng(), bounds2.getNorthEast().lng());
console.log(bounds1.getSouthWest().lat(), bounds2.getSouthWest().lat());
console.log(bounds1.getSouthWest().lng(), bounds2.getSouthWest().lng());
if (
(Math.abs(bounds1.getNorthEast().lat() - bounds2.getNorthEast().lat()) <= tolerance) &&
(Math.abs(bounds1.getNorthEast().lng() - bounds2.getNorthEast().lng()) <= tolerance) &&
(Math.abs(bounds1.getSouthWest().lat() - bounds2.getSouthWest().lat()) <= tolerance) &&
(Math.abs(bounds1.getSouthWest().lng() - bounds2.getSouthWest().lng()) <= tolerance)) {
return true;
}
return false;
}
2年後に編集:
Google マップの最新の実験的バージョン (3.32) ではbounds_changed
、境界が現在の境界と同じ場合でも起動されるようです。
元の問題をまだ示しているバージョン 3.31 に元の例を更新しました。