【发布时间】:2016-06-16 03:27:09
【问题描述】:
我知道有一个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 年后编辑:
似乎在谷歌地图 (3.32) 的最新实验版本中,bounds_changed 被触发,即使边界与当前边界相同。
我将原始示例更新为 3.31 版,它仍然显示原始问题。
【问题讨论】:
标签: javascript google-maps google-maps-api-3 fitbounds