Если вы только перетаскиваете карту, вы пробовали событие dragend ?
В противном случае, я думаю, что использование общего таймера является обычным способом преодоления этого. Возможно, у вас правильная идея, читая фрагмент кода.
Каждый триггер события bounds_changed сбрасывает таймер, когда время истекает, таймер запускает желаемую функцию. Вам просто нужно убрать таймер и поделиться им среди всех bounds_changed событий.
ссылка APIv3
Обновление
Вы можете попробовать:
function fireEvent()
{
if (lastEvent.getTime() + 500 <= new Date().getTime())
{
//your event
}
}
function DelayedCallback()
{
lastEvent = new Date();
setTimeout(fireEvent, 500);
}
event.addListener(map, "bounds_changed", DelayedCallback);
взято из здесь