Ralentizar las consultas para evitar OVER_QUERY_LIMIT en Google Maps API v3
Al usar Google Maps API v3, es importante estar al tanto de las límite de consultas y límites de velocidad. Exceder estos límites puede provocar el error OVER_QUERY_LIMIT. Para evitar esto, es esencial implementar retrasos entre consultas.
Implementar retrasos en JavaScript
Un enfoque para implementar retrasos en JavaScript es a través de la función setTimeout(). Aquí hay un ejemplo:
function codeAddress(vPostCode) {
if (geocoder) {
setTimeout(function() {
geocoder.geocode({ 'address': "'" vPostCode "'"}, function(results, status) {
// Code for handling the geocoding result
});
}, 2000);
}
}
En este ejemplo, se introduce un retraso de 2 segundos usando setTimeout() antes de enviar cada solicitud de geocodificación. Ajuste el valor de retraso según sea necesario para cumplir con los límites de velocidad establecidos por la API de Google Maps.
Puerto de la versión 3 de Mike Williams
Mike Williams ha proporcionado un puerto de la versión 3 de su tutorial original que maneja eficazmente los retrasos y evita el error OVER_QUERY_LIMIT. Este puerto se puede encontrar aquí:
http://acleach.me.uk/gmaps/v3/plotaddresses.htm
Código relevante del puerto versión 3 de Mike Williams
El siguiente fragmento de código del port de la versión 3 de Mike Williams ilustra la implementación de retrasos:
function getAddress(search, next) {
geo.geocode({address:search}, function (results,status)
{
// If that was successful
if (status == google.maps.GeocoderStatus.OK) {
// Lets assume that the first marker is the one we want
var p = results[0].geometry.location;
var lat=p.lat();
var lng=p.lng();
// Output the data
var msg = 'address="' search '" lat=' lat ' lng=' lng '(delay=' delay 'ms)<br>';
document.getElementById("messages").innerHTML = msg;
// Create a marker
createMarker(search,lat,lng);
}
// ====== Decode the error status ======
else {
// === if we were sending the requests to fast, try this one again and increase the delay
if (status == google.maps.GeocoderStatus.OVER_QUERY_LIMIT) {
nextAddress--;
delay ;
} else {
var reason="Code " status;
var msg = 'address="' search '" error=' reason '(delay=' delay 'ms)<br>';
document.getElementById("messages").innerHTML = msg;
}
}
next();
}
);
}
Este código implementa un mecanismo de retraso dinámico. Si se encuentra el error google.maps.GeocoderStatus.OVER_QUERY_LIMIT, el código ajusta el retraso entre solicitudes en consecuencia para evitar errores futuros.
Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.
Copyright© 2022 湘ICP备2022001581号-3