我知道bounds_changed
如果边界发生变化会触发一个事件,但是我需要知道 fitBounds 何时完成(当边界发生变化或边界保持不变时)。
谷歌有某种容忍度,如果边界变化很小,它实际上不会改变边界/调用 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年后编辑:
bounds_changed
即使边界与当前边界相同,谷歌地图(3.32)的最新实验版本似乎也会被触发。
我将原始示例更新为版本 3.31,它仍然显示原始问题。