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 pour le 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 Google pour les géocoder. 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 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 obtenir 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 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 relatives aux quotas et aux coûts
Les coûts, les quotas et les limites de geocoding jouent le rôle de stratégies pour 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. 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 à 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é à 3 000 RPM (requêtes par minute), calculé comme 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 (par exemple, à 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 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
Pour faire court, la réponse est "presque toujours". Pour les raisons suivantes :
- 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: langue de l'utilisateur, région et 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 geocode pour créer un repère sur la carte. Votre application peut également effectuer une analyse simple à l'aide du geocoding. 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 géocode les données dans le navigateur. L'application envoie ensuite les données à votre serveur. Le serveur répond avec des 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 entrée d'un client. C'est par exemple le cas lorsque vous obtenez un ensemble de données indépendamment de l'entrée utilisateur, par exemple si vous avez un ensemble fixe, limité et connu d'adresses devant être géocodées. Le geocoding côté serveur peut également servir de sauvegarde en cas d'échec du geocoding côté client.
Parmi les problèmes possibles, citons l'augmentation inutile de la latence pour l'utilisateur et les résultats du geocoding de moins bonne qualité que côté client, car la requête comporte moins d'informations.