When wanting to capture a change in the viewport (e.g. zoom, pan), when using the Google Maps API v3, the obvious event to listen for seems to be “bounds_changed”. However, when dragging the map to pan, this event is fired repeatedly, which, in our case, meant that there hundreds of requests being sent when a user panned.
The solution is to listen for the “idle” event instead, which is only fired when the user has stopped panning/zooming:
google.maps.event.addListener(map, 'idle', function() { //Do something when the user has stopped zooming/panning });