Optimisation de l'utilisation des quotas lors du géocodage

Le geocoding est le processus qui consiste à convertir des adresses ("1600 Amphitheatre Parkway, Mountain View, CA") en coordonnées géographiques (37.423021, -122.083739), que vous pouvez utiliser pour placer des repères ou positionner la carte. Les API Google Maps Platform proposent deux approches du geocoding:

  • Le geocoding côté client, qui s'exécute dans le navigateur, généralement en réponse à une action de l'utilisateur. L'API Maps JavaScript fournit des classes qui effectuent les requêtes à votre place. Cette approche est décrite dans la documentation de l'API Maps JavaScript.
  • Le geocoding HTTP côté serveur, qui permet à votre serveur d'interroger directement les serveurs de Google pour les géocodes. L'API Geocoding est le service Web qui fournit cette fonctionnalité. En règle générale, vous intégrez ce service à un autre code qui s'exécute côté serveur. Le geocoding côté serveur est décrit dans la documentation de l'API Geocoding.

Exemples de géocodage côté client et côté serveur

Voici un exemple de geocoding côté client qui prend une adresse, la géocode, déplace le centre de la carte vers ce lieu et y ajoute un repère sur la carte:

geocoder = new google.maps.Geocoder();
geocoder.geocode({ 'address': address }, function(results, status) {
  if (status == google.maps.GeocoderStatus.OK) {
    map.setCenter(results[0].geometry.location);
    var marker = new google.maps.Marker({
      map: map,
      position: results[0].geometry.location
    });
  }
});

Pour voir d'autres exemples, consultez la documentation de l'API Maps JavaScript.

Voici un exemple d'utilisation de Python pour effectuer une requête de geocoding côté serveur:

import urllib2

address="1600+Amphitheatre+Parkway,+Mountain+View,+CA"
key="my-key-here"
url="https://maps.googleapis.com/maps/api/geocode/json?address=%s&key=%s" % (address, key)

response = urllib2.urlopen(url)

jsongeocode = response.read()

Cela crée un objet JSON avec le contenu suivant :

{
  "status": "OK",
  "results": [ {
    "types": street_address,
    "formatted_address": "1600 Amphitheatre Pkwy, Mountain View, CA 94043, USA",
    "address_components": [ {
      "long_name": "1600",
      "short_name": "1600",
      "types": street_number
    }, {
      "long_name": "Amphitheatre Pkwy",
      "short_name": "Amphitheatre Pkwy",
      "types": route
    }, {
      "long_name": "Mountain View",
      "short_name": "Mountain View",
      "types": [ "locality", "political" ]
    }, {
      "long_name": "San Jose",
      "short_name": "San Jose",
      "types": [ "administrative_area_level_3", "political" ]
    }, {
      "long_name": "Santa Clara",
      "short_name": "Santa Clara",
      "types": [ "administrative_area_level_2", "political" ]
    }, {
      "long_name": "California",
      "short_name": "CA",
      "types": [ "administrative_area_level_1", "political" ]
    }, {
      "long_name": "United States",
      "short_name": "US",
      "types": [ "country", "political" ]
    }, {
      "long_name": "94043",
      "short_name": "94043",
      "types": postal_code
    } ],
    "geometry": {
      "location": {
        "lat": 37.4220323,
        "lng": -122.0845109
      },
      "location_type": "ROOFTOP",
      "viewport": {
        "southwest": {
          "lat": 37.4188847,
          "lng": -122.0876585
        },
        "northeast": {
          "lat": 37.4251799,
          "lng": -122.0813633
        }
      }
    }
  } ]
}

Le geocoder côté serveur propose également un format XML comme alternative au JSON. Pour plus d'exemples, consultez la documentation de l'API Geocoding, ainsi que les bibliothèques clientes pour Python et d'autres langages.

Considérations sur les quotas et les coûts

Les coûts du geocoding, les quotas et les limites de débit déterminent les stratégies décrites dans ce document.

Coût

Les limites de quota par jour (QPD) ne sont plus utilisées pour les requêtes de geocoding. En revanche, chaque requête de geocoding, qu'elle soit côté client via le navigateur ou côté serveur via le service Web de l'API Geocoding, est facturée à un prix par unité. Pour gérer vos coûts d'utilisation, pensez à plafonner votre quota quotidien.

Limites de débit

Le débit du service de geocoding est limité à 3 000 RPM (requêtes par minute), calculé en additionnant les requêtes côté client et côté serveur.

Lorsque vous exécutez des requêtes de geocoding côté client à intervalles réguliers, par exemple dans une application mobile, vos requêtes peuvent renvoyer des erreurs si tous vos utilisateurs effectuent des requêtes en même temps (par exemple, tous à la même seconde de chaque minute). Pour éviter cela, vous avez le choix entre les solutions suivantes :

  • Introduisez des intervalles aléatoires dans vos requêtes (gigue). Assurez-vous que les requêtes sont aléatoires sur l'ensemble de votre base d'utilisateurs.
  • Si vous développez pour Android, utilisez une alarme récurrente inexacte.
  • Si vous développez pour Android, sélectionnez une stratégie de localisation appropriée.

Mise en cache

Consultez les Règles de l'API Geocoding sur la mise en cache.

Dans quels cas utiliser le géocodage côté client

La réponse courte est presque toujours. Pour les raisons suivantes :

  • Les requêtes et les réponses côté client offrent une expérience plus rapide et interactive aux utilisateurs.
  • Une requête côté client peut inclure des informations améliorant la qualité du geocoding (langue de l'utilisateur, région et fenêtre d'affichage).

En particulier, le geocoding côté client est préférable pour le geocoding d'adresses en fonction des données saisies par l'utilisateur.

Le géocodage côté client présente deux architectures de base :

  • Réalisation de tout le géocodage et l'affichage dans le navigateur. Par exemple, il saisit une adresse sur votre page. Votre application la géocode. Votre page utilise ensuite le geocoding pour créer un repère sur la carte. Votre application peut également effectuer une analyse simple à l'aide du geocode. Aucune donnée n'est envoyée à votre serveur. Cela réduit la charge du serveur.
  • Réalisation du géocodage dans le navigateur, puis envoi du résultat au serveur. Par exemple, l'utilisateur saisit une adresse sur votre page. Votre application la géocode dans le navigateur. L'application envoie ensuite les données à votre serveur. Le serveur répond avec certaines données, telles que les points d'intérêt à proximité. Cela vous permet de personnaliser une réponse en fonction de vos propres données.

Dans quels cas utiliser le géocodage côté serveur

Le geocoding côté serveur est particulièrement adapté aux applications qui nécessitent de géocoder des adresses sans intervention d'un client. C'est par exemple le cas lorsque vous obtenez un ensemble de données indépendant de l'entrée utilisateur (par exemple, si vous disposez d'un ensemble d'adresses fixe, fini et connu qui nécessite un geocoding). Le geocoding côté serveur peut également servir de solution de secours en cas d'échec du geocoding côté client.

Parmi les problèmes possibles, citons une augmentation inutile de la latence pour l'utilisateur et des résultats de geocoding de moins bonne qualité que côté client, car moins d'informations sont disponibles dans la requête.