Google maps fitBounds callback

Я знаю, что есть событие bounds_changed, которое запускается, если границы были изменены, однако мне нужно знать, когда завершилось fitBounds (когда границы изменились или границы остались прежними). ​​

У Google есть своего рода допуск, где, если границы изменились очень мало, это фактически не изменит границы /call bounds_changed. Мне нужно знать, когда это произойдет.

Я сделал это успешно с тайм-аутами, но он кажется взломанным и, возможно, подвержен некоторым ошибкам, когда bounds_changed запускает более 100 мс для запуска.

См. пример: http://jsbin.com/hipavurilo/3/edit?js,console,output

Любые лучшие решения?

Изменить: Если вы считаете, что просто проверка, что map.getBounds() совпадает с тем, что вы отправляете fitBounds(), тогда вы будете разочарованы тем, что результат привязки к границам обычно не близок к которые вы отправляете. Я написал эту функцию, думая, что это возможно [/p >

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;
    }

Ответ 1

Самый простой способ решить первую часть этого вопроса (зная, когда границы закончены) - использовать прослушиватель событий бездействия.

Как бы вы ни изменяли границы, установите это событие незадолго до того, как вы их измените. Таким образом, когда границы будут полностью урегулированы, карта будет регистрироваться как незанятая, а простаивающее событие срабатывает, внутри которого вы можете сделать свою шизну. Чтобы предотвратить наложение событий друг на друга, очистите его одновременно.

Возможно, вам придется немного поиграть с ним. Говоря о вождении, здесь скрипка. В этой скрипте я просто устанавливал предупреждение каждый раз:

https://jsbin.com/kapimov/edit?js,output Нажмите "Изменить границы", и вы увидите, что это происходит снова и снова:)

РЕДАКТИРОВАТЬ: Чтобы проверить, не срабатывает ли флажок fitBounds() при его отсутствии, сравните центр до и после стрельбы fitBounds().

Даже при попытке дважды установить границы на одни и те же координаты, центр, похоже, изменится и может быть сравнен. Кажется, что проверка центра происходит до фактического перемещения карты для границ, но всегда меняется при вызове этой функции.

Дважды нажмите кнопку "Установить текущие границы", чтобы увидеть ее в действии; первый раз "bounds_changed" срабатывает, а второй - нет, но центр по-прежнему правильно проверяет. Прокомментируйте функцию fitBounds(), чтобы увидеть, как центр не изменится без него.