javascript - 谷歌地图 fitBounds 回调

标签 javascript google-maps google-maps-api-3 fitbounds

我知道如果边界发生变化,就会触发一个 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年后编辑:

似乎在最新的谷歌地图实验版本 (3.32) 中,即使边界与当前边界相同,bounds_changed 也会被触发。

我将原始示例更新为版本 3.31,但仍然显示原始问题。

最佳答案

解决此问题第一部分(了解边界何时完成更改)的最简单方法是使用 idle event listener .

无论您如何更改边界,请在即将更改边界之前设置此事件。这样,当边界全部确定后, map 将注册为空闲状态并触发空闲事件,您可以在其中执行您的操作。为了防止事件相互堆积,请同时清除它。

你可能需要稍微摆弄它。说到 fiddle ,这里有一个 fiddle 。在这个 fiddle 中,我只是将警报设置为每次都发生:

https://jsbin.com/kapimov/edit?js,output单击“更改边界”,您会看到它一遍又一遍地发生:)

编辑:要检查 fitBounds() 失败时是否触发,请比较触发 fitBounds() 之前和之后的中心。

即使尝试将边界设置为同一坐标两次,中心也会发生变化并且可以进行比较。中心检查似乎发生在 map 实际移动边界之前,但在调用该函数时总是会发生变化。

点击“Fit Current Bounds”按钮两次以查看其实际效果;第一次“bounds_changed”触发,第二次则不触发,但中心仍然检查正确。注释掉 fitBounds() 函数,看看中心在没有它的情况下如何不会改变。

关于javascript - 谷歌地图 fitBounds 回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35761416/

相关文章:

.net - GMAP.Net 是否有谷歌地图限制,每天有 1500 个查询?

javascript - 如何将 JavaScript += 与 switch 语句一起使用

javascript - YUIDoc/javascript - 如何记录模块属性

javascript - 如何使用 $.Ajax 将 Windows 身份验证凭据传递给 Web API 服务

android - Android map 的奇怪行为

android - 将 map 缩放到某个位置并将其向右 move

php - 评论专家意见的jquery动态分页

android - Android 谷歌地图中未启用位置按钮

javascript - 如何在点击路线服务中的标记时打开弹出窗口?

javascript - 我们可以让 Google Maps Javascript Geocoding API v3 在响应中返回自定义标识符吗?