Ecco come ho gestito questo problema in passato. Controllo lo stato dei risultati e, se ottengo e oltre l'errore del limite, lo provo di nuovo dopo un leggero ritardo.
function Geocode(address) {
geocoder.geocode({
'address': address
}, function(results, status) {
if (status === google.maps.GeocoderStatus.OK) {
var result = results[0].geometry.location;
var marker = new google.maps.Marker({
position: result,
map: map
});
} else if (status === google.maps.GeocoderStatus.OVER_QUERY_LIMIT) {
setTimeout(function() {
Geocode(address);
}, 200);
} else {
alert("Geocode was not successful for the following reason:"
+ status);
}
});
}
Aggiornamento: whoops, ha accidentalmente nascosto la parte del lato server. Ecco una versione C#:
public XElement GetGeocodingSearchResults(string address)
{
var url = String.Format(
"https://maps.google.com/maps/api/geocode/xml?address={0}&sensor=false",
Uri.EscapeDataString(address));
var results = XElement.Load(url);
// Check the status
var status = results.Element("status").Value;
if(status == "OVER_QUERY_LIMIT")
{
Thread.Sleep(200);
GetGeocodingSearchResults(address);
}else if(status != "OK" && status != "ZERO_RESULTS")
{
// Whoops, something else was wrong with the request...
}
return results;
}
fonte
2012-03-21 14:22:29
Abbiamo ottenuto lo stesso errore OVER_QUERY_LIMIT per le persone in 3G, mentre quando stavano usando WiFi stava funzionando correttamente. Il problema con 3G è che da quello che ho letto, la maggior parte delle volte viene utilizzato NAT, quindi tutti gli utenti di uno stesso provider potrebbero avere lo stesso indirizzo pubblico e quindi questo indirizzo IP supererebbe facilmente la limitazione. – user276648