OVER_QUERY_LIMIT in Google Maps API v3: How do I pause/delay in Javascript to slow it down?

前端 未结 6 1922
暖寄归人
暖寄归人 2020-11-22 08:49

I\'m hitting an issue that is WELL discussed in these forums, but none of the recommendations seem to be working for me so I\'m looking for some full javascript that works w

6条回答
  •  清酒与你
    2020-11-22 09:19

    You are using setTimeout wrong way. The (one of) function signature is setTimeout(callback, delay). So you can easily specify what code should be run after what delay.

    var codeAddress = (function() {
        var index = 0;
        var delay = 100;
    
        function GeocodeCallback(results, status) {
            if (status == google.maps.GeocoderStatus.OK) {
                map.setCenter(results[0].geometry.location);
                new google.maps.Marker({ map: map, position: results[0].geometry.location, animation: google.maps.Animation.DROP });
                console.log(results);
            }
            else alert("Geocode was not successful for the following reason: " + status);
        };
    
        return function(vPostCode) {
            if (geocoder) setTimeout(geocoder.geocode.bind(geocoder, { 'address': "'" + vPostCode + "'"}, GeocodeCallback), index*delay);
            index++;
        };
    })();
    

    This way, every codeAddress() call will result in geocoder.geocode() being called 100ms later after previous call.

    I also added animation to marker so you will have a nice animation effect with markers being added to map one after another. I'm not sure what is the current google limit, so you may need to increase the value of delay variable.

    Also, if you are each time geocoding the same addresses, you should instead save the results of geocode to your db and next time just use those (so you will save some traffic and your application will be a little bit quicker)

提交回复
热议问题