Le geocoding est le processus qui consiste à convertir des adresses (1600 Amphitheatre Parkway, Mountain View, CA, États-Unis) 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 offrent deux approches pour le géocodage:
- 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éocoder. L'API Geocoding est le service Web qui fournit cette fonctionnalité. En général, vous intégrez ce service dans 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 extrait une adresse, la géocode, déplace le centre de la carte vers cet emplacement et y ajoute un repère:
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 plus d'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 fournit également un format XML au lieu de JSON. Pour plus d'exemples, consultez la documentation de l'API Geocoding et les bibliothèques clientes pour Python et d'autres langages.
Considérations sur les quotas et les coûts
Les coûts de géocodage, les quotas et les limites de débit sont à l'origine des 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. Au lieu de cela, chaque requête de geocoding, côté client via le navigateur ou côté serveur via le service Web de l'API Geocoding, est facturée pour chaque prix. Pour gérer votre coût d'utilisation, envisagez de limiter votre quota quotidien.
Limites de débit
Le service de geocoding est limité à 50 RPS (requêtes par seconde), qui correspond à la somme des 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, elles peuvent renvoyer des erreurs si tous vos utilisateurs effectuent des requêtes en même temps (à la même seconde de chaque minute, par exemple). 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 dans toute votre base d'utilisateurs.
- Si vous développez pour Android, utilisez une alarme répétitive 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 pour en savoir plus sur la mise en cache.
Dans quels cas utiliser le géocodage côté client
La réponse courte est "presque toujours". En effet :
- Les requêtes et les réponses côté client offrent une expérience plus rapide et plus interactive aux utilisateurs.
- Une requête côté client peut inclure des informations qui améliorent la qualité du geocoding: la langue de l'utilisateur, la région et la fenêtre d'affichage.
Le geocoding côté client est particulièrement adapté au geocoding des adresses en fonction des entrées de 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, l'utilisateur saisit une adresse sur votre page. Votre application la géocode. Votre page utilise ensuite le géocode pour créer un repère sur la carte. Ou votre application effectue une analyse simple à l'aide du géocode. 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 le 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 géocodage côté serveur est particulièrement adapté aux applications qui vous demandent 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 des entrées utilisateur, par exemple si vous disposez d'un ensemble fixe, limité et connu d'adresses à géocoder. Le geocoding côté serveur peut également servir de solution de secours en cas d'échec du geocoding côté client.
Il peut s'agir, par exemple, d'une augmentation inutile de la latence pour l'utilisateur ou d'une baisse de la qualité des résultats de géocodage par rapport à l'utilisation côté client, car la requête fournit moins d'informations.