web-dev-qa-db-fra.com

Géocodage de l'API sur la limite de requête

J'utilise l'API de géocodage côté serveur pour traduire les adresses en caractères latéraux . J'ai rencontré un statut OVER_QUERY_LIMIT même si: - il n'a pas fait beaucoup de demandes simultanément (une seule demande à la fois)

comment est-ce possible ? le lendemain, le géocodage fonctionnait bien, mais je crains que mon application ne fonctionne correctement à long terme.

Merci d'avance.

18
user1283452

C’est ainsi que j’ai traité ce problème par le passé. Je vérifie l'état du résultat et si j'obtiens et que je dépasse l'erreur limite, je réessaye après un léger retard. 

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);
        }
    });
}

Mise à jour: whoops, glissé accidentellement sur la partie serveur. Voici une version 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;
}
34
Bryan Weaver

Nous avions également ce problème et la solution consistait à abandonner l'API de Google. Si vous avez seulement besoin de géocodage, il existe de nombreuses alternatives tout aussi efficaces sans les limitations. Nous avons choisi l'API mapquest. Il a été plus rapide et plus fiable, sans limitation du nombre d'appels de géocodage et j'aime beaucoup leur API permettant de regrouper des demandes de géocodage en un seul appel.

Si vous avez besoin d'autres fonctionnalités, vous devez évidemment les prendre en compte, mais dans le cas d'une fonctionnalité unique, l'utilisation de la plus grande API du bloc n'est pas nécessairement le meilleur choix.

developer.mapquest.com

4
NSProgrammer

Vous pouvez également effectuer le géocodage côté client. Voici un article comparant l'approche consistant à faire quelque chose côté client et quelque chose de site serveur.

2
Mano Marks

Google renvoie également cette même réponse si aucune adresse ne correspond ont été trouvés. Cela ne signifie pas nécessairement que vous avez dépassé le quota. Dans tous les cas, vous ferez mieux d'attraper l'exception et de mettre en œuvre un sauvetage autour d'elle.

1
svilenv

Même problème que user276648 ici. Résolu en ajoutant la clé API et en modifiant http en https.

1
jhondel

Google, Bing, MapQuest et Yahoo! Les cartes (cette API existe-t-elle toujours?) Sont des outils extrêmement puissants. Ils ont beaucoup de puissance pour interpréter l'adresse que vous fournissez et faire tout leur possible pour en faire une adresse correctement formatée pour le géocodage. Dans une certaine mesure, ils sont libres. Ils ont des limites de volume et des conditions de service assez strictes qui pourraient être un facteur si vous commencez à utiliser leur service à des fins commerciales et en particulier si vous l'intégrez à un autre produit.

Gardez à l'esprit que tous ne font "approximation d'adresse" PAS la vérification d'adresse. Ils pourront vous dire approximativement où une adresse serait située dans une rue donnée SI l'adresse existe. Ils ne peuvent pas vous dire que l'adresse que vous recherchez existe. Une façon de vérifier cela consiste à consulter votre propre adresse dans Google Maps. Effectuez un zoom avant jusqu'à la vue sur la rue et vous verrez qu'ils indiquent «l'adresse est approximative», même si l'emplacement peut être localisé avec précision. Ils n'ont tout simplement pas la liste principale d'adresses à comparer et savent quelles adresses sont réelles. Pour cela, vous aurez besoin d'une sorte de vérification d'adresse.

La vérification d'adresse normalise et nettoie une adresse donnée de la même manière que les services de cartographie gratuits, mais elle compare également les adresses à la base de données USPS d'adresses livrables pour confirmer si l'adresse existe réellement. L'adresse confirmée peut ensuite être géocodée avec une précision améliorée.

Il existe de nombreux bons services de vérification d'adresses. Dans l'intérêt d'une divulgation complète, je suis le fondateur d'un - SmartyStreets .

0
Jonathan Oliver