我知道有一個bounds_changed
事件,如果邊界已經改變,則觸發,但是我需要知道fitBounds何時完成(當邊界已更改或邊界保持不變)。谷歌地圖fitBounds回調
谷歌有某種寬容,如果邊界變化很小,它實際上不會改變邊界/調用bounds_changed。我需要知道這是什麼時候發生的。
我已經用超時功能成功完成了這項工作,但它似乎很難做,而且在bounds_changed需要超過100ms觸發時可能會出現一些錯誤。
見例如:http://jsbin.com/hipavurilo/3/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;
}
調用'fitBounds'不能修改地圖的邊界,這就是這個問題的關鍵所在 –
嗯,我知道,當fitBounds()不能成功移動地圖時。我用一個確定的失敗案例更新了小提琴,將界限定爲當前界限。然後我用另一個屬性 - 中心 - 來檢查邊界是否總是改變它。事實證明它確實!編輯我的答案以反映新的解決方案。 – tempranova
擬合電流界限按鈕無法正常工作,去海洋。當我使它工作時,它從不觸發bounds_changed。值得注意的是,getCenter會立即觸發,而不會在邊界可能發生變化之後觸發。也就是說,getCenter會在fitBounds之後0.1毫秒觸發,但邊界的更改通常在10毫秒內發生。爲了使中心技巧正常工作,您需要知道fitBounds何時完成(您需要回調),以回到原始問題。 – ParoX