我知道有一个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