Introduction
L'API Geolocation renvoie une position et un rayon précis à partir des données des antennes-relais et des nœuds Wi-Fi détectés par le client mobile. Ce document décrit le protocole utilisé pour envoyer ces données au serveur et renvoyer une réponse au client.
La communication est assurée via la méthode POST du protocole HTTPS. Les requêtes et les réponses sont au format JSON, et le type de contenu de ces deux éléments est application/json
.
Avant de commencer
Avant de commencer à développer avec l'API Geolocation, vérifiez les exigences d'authentification (vous avez besoin d'une clé API) et les informations sur l'utilisation et la facturation de l'API (vous devez activer la facturation sur votre projet).
Requêtes de géolocalisation
Les requêtes de géolocalisation sont envoyées à l'aide de la méthode POST à l'URL suivante :
https://www.googleapis.com/geolocation/v1/geolocate?key=YOUR_API_KEY
Vous devez spécifier une clé dans votre requête, en tant que valeur d'un paramètre key
. Un key
correspond à la clé API de votre application. Cette clé identifie votre application à des fins de gestion des quotas. Découvrez comment obtenir une clé.
Corps de la requête
Le corps de la requête doit être mis en forme en JSON. Si le corps de la requête n'est pas inclus, les résultats sont renvoyés en fonction de l'adresse IP de l'emplacement de la requête. Sauf indication contraire, les champs suivants sont acceptés et tous les champs sont facultatifs:
Champ | Type JSON | Description | Remarques |
---|---|---|---|
homeMobileCountryCode |
number (uint32 ) |
Code pays (CM) du réseau domicile de l'appareil. | Compatible pour radioType gsm (par défaut), wcdma , lte et nr ; non utilisé pour cdma .Plage valide: 0–999. |
homeMobileNetworkCode |
number (uint32 ) |
Code de réseau mobile du réseau home de l'appareil.
Il s'agit du MNC pour GSM, WCDMA, LTE et NR. CDMA utilise l'ID système (SID) |
Plage valide pour MNC: 0–999. Plage valide pour le SID: 0–32767. |
radioType |
string |
Type du réseau de téléphonie mobile. Les valeurs acceptées sont gsm , cdma , wcdma , lte et nr . |
Bien que ce champ soit facultatif, il devrait toujours être inclus si le type d'option est connu du client. Si ce champ est omis, l'API Geolocation utilise la valeur gsm par défaut, ce qui ne donne pas de résultats non valides ou zéro si le type de case à cocher est incorrect. |
carrier |
string |
Nom de l'opérateur. | |
considerIp |
boolean |
Indique s'il faut utiliser la géolocalisation IP si les signaux Wi-Fi et émis par les antennes-relais sont manquants, vides ou insuffisants pour estimer la position de l'appareil. | La valeur par défaut est true . Définissez considerIp sur false pour désactiver la fonctionnalité de remplacement. |
cellTowers |
array |
Tableau d'objets antenne-relais. | Consultez la section Objets antenne-relais ci-dessous. |
wifiAccessPoints |
array |
Tableau d'objets point d'accès Wi-Fi. | Consultez la section Objets de point d'accès Wi-Fi ci-dessous. |
Vous trouverez ci-dessous un exemple de corps de requête pour l'API Geolocation.
{ "homeMobileCountryCode": 310, "homeMobileNetworkCode": 410, "radioType": "gsm", "carrier": "Vodafone", "considerIp": true, "cellTowers": [ // See the Cell Tower Objects section below. ], "wifiAccessPoints": [ // See the WiFi Access Point Objects section below. ] }
Objets antenne-relais
Le tableau cellTowers
du corps de la requête contient zéro, un ou plusieurs objets d'antennes-relais.
Champ | Type JSON | Description | Remarques |
---|---|---|---|
cellId |
number (uint32 ) |
Identifiant cellulaire unique. | Obligatoire pour radioType gsm (par défaut), cdma , wcdma et lte ; refusé pour nr .Reportez-vous à la section Calcul de l'ID de cellule ci-dessous, qui répertorie également les plages de valeurs valides pour chaque type de signal radio. |
newRadioCellId |
number (uint64 ) |
Identifiant unique de la cellule NR (5G). | Obligatoire pour radioType nr ; refusé pour les autres types.Consultez la section Calcul de newRadioCellId ci-dessous, qui indique également la plage de valeurs valide pour le champ. |
locationAreaCode |
number (uint32 ) |
Code LAC (Location Area Code) des réseaux GSM et WCDMA. Identifiant réseau pour les réseaux CDMA. L'indicatif de suivi (TAC) des réseaux LTE et NR. |
Obligatoire pour radioType gsm (par défaut) et cdma , facultatif pour les autres valeurs.Plage valide avec gsm , cdma , wcdma et lte : entre 0 et 65 535.Plage valide avec nr : 0–16777215. |
mobileCountryCode |
number (uint32 ) |
Code CM (Mobile Country Code) de l'antenne-relais. | Obligatoire pour radioType gsm (par défaut), wcdma , lte et nr ; non utilisé pour cdma .Plage valide: 0–999. |
mobileNetworkCode |
number (uint32 ) |
Code du réseau mobile de l'antenne-relais.
Il s'agit du MNC pour GSM, WCDMA, LTE et NR. CDMA utilise l'ID système (SID). |
Obligatoire. Plage valide pour MNC: 0–999. Plage valide pour le SID: 0–32767. |
Les champs facultatifs suivants ne sont pas utilisés actuellement, mais peuvent être inclus si des valeurs sont disponibles.
Champ | Type JSON | Description | Remarques |
---|---|---|---|
age |
number (uint32 ) |
Temps écoulé en millisecondes depuis que cette cellule est la cellule principale. | Si l'âge est de 0, cellId ou newRadioCellId représente une mesure actuelle. |
signalStrength |
number (double ) |
Puissance du signal radio mesurée en dBm. | |
timingAdvance |
number (double ) |
Valeur d'avance temporelle. |
Calcul de cellId
Les types de radio antérieurs à la NR (5G) utilisent le champ cellId
32 bits pour transmettre l'ID de la cellule réseau à l'API Geolocation.
- Les réseaux GSM (2G) utilisent l'ID de cellule 16 bits (CID) tel quel. Plage valide: 0–65535.
- Les réseaux CDMA (2G) utilisent l'ID de la station de base (16 bits) telle quelle. Plage valide: 0–65535.
- Les réseaux WCDMA (3G) utilisent l'identité de cellule UTRAN/GERAN (UC-ID), qui est une valeur entière de 28 bits combinant l'identifiant de contrôleur de réseau radio (RNC-ID) 12 bits et l'ID de cellule (CID) 16 bits.
Formule :rnc_id << 16 | cid
.
Plage valide: 0–268435455.
Remarque : Si vous ne spécifiez que l'ID de cellule 16 bits des réseaux WCDMA, les résultats sont incorrects ou nuls. - Les réseaux LTE (4G) utilisent l'ECI (E-UTRAN Cell Identity), une valeur entière de 28 bits qui combine l'identifiant e-UTRAN du nœud B (eNBId) de 20 bits et l'ID de la cellule (CID) 8 bits.
Formule:enb_id << 8 | cid
.
Plage valide: 0–268435455.
Remarque : Si vous ne spécifiez que l'ID de cellule 8 bits des réseaux LTE, les résultats seront incorrects ou nuls.
Le fait de placer des valeurs en dehors de ces plages dans la requête API peut avoir un comportement indéfini. L'API peut, à la discrétion de Google, tronquer le nombre afin qu'il corresponde à la plage documentée, déduire une correction à radioType
ou renvoyer un résultat NOT_FOUND
sans aucun indicateur dans la réponse.
Vous trouverez ci-dessous un exemple d'objet d'antenne-relais LTE.
{ "cellTowers": [ { "cellId": 170402199, "locationAreaCode": 35632, "mobileCountryCode": 310, "mobileNetworkCode": 410, "age": 0, "signalStrength": -60, "timingAdvance": 15 } ] }
Calcul de newRadioCellId
Les réseaux plus récents, dont les ID de cellule font plus de 32 bits, utilisent le champ newRadioCellId
64 bits pour transmettre l'ID de cellule du réseau à l'API Geolocation.
- Les réseaux NR (5G) utilisent tel quel l'identité de la cellule radio 36 bits (NCI, New Radio Cell Identity) en l'état.
Plage valide: 0–68719476735.
Vous trouverez ci-dessous un exemple d'objet d'antenne-relais NR.
{ "cellTowers": [ { "newRadioCellId": 68719476735, "mobileCountryCode": 310, "mobileNetworkCode": 410, "age": 0, "signalStrength": -60, } ] }
Objets point d'accès Wi-Fi
Le tableau wifiAccessPoints
du corps de la requête doit contenir au moins deux objets de point d'accès Wi-Fi. macAddress
est obligatoire. Tous les autres champs sont facultatifs.
Champ | Type JSON | Description | Remarques |
---|---|---|---|
macAddress |
string |
Adresse MAC du nœud Wi-Fi. Elle est généralement appelée "adresse BSS", "BSSID" ou "MAC". | Obligatoire. Chaîne hexadécimale séparée par : (deux-points). |
signalStrength |
number (double ) |
Puissance actuelle du signal, mesurée en dBm. | Pour les points d'accès Wi-Fi, les valeurs DBM sont généralement inférieures ou égales à -35, et comprises entre -128 et -10 dBm. Veillez à inclure le signe moins. |
age |
number (uint32 ) |
Temps écoulé en millisecondes depuis que ce point d'accès a été détecté. | |
channel |
number (uint32 ) |
Canal sur lequel le client communique avec le point d'accès. | |
signalToNoiseRatio |
number (double ) |
Rapport signal/bruit actuel, mesuré en dB. |
Voici un exemple d'objet point d'accès Wi-Fi.
{ "macAddress": "9c:1c:12:b0:45:f1", "signalStrength": -43, "signalToNoiseRatio": 0, "channel": 11, "age": 0 }
Réponses de géolocalisation
Une requête de géolocalisation réussie renvoie une réponse au format JSON définissant un emplacement et un rayon.
location
: latitude et longitude estimées de l'utilisateur, en degrés. Contient un sous-champlat
et un sous-champlng
.accuracy
: précision de la position estimée, en mètres. Représente le rayon d'un cercle autour dulocation
donné.
{ "location": { "lat": 37.421875199999995, "lng": -122.0851173 }, "accuracy": 120 }
Erreurs
En cas d'erreur, un corps de réponse d'erreur de format standard est renvoyé et le code d'état HTTP est défini sur un état d'erreur.
La réponse contient un objet avec un seul objet error
doté des clés suivantes:
code
: identique à l'état HTTP de la réponse.message
: brève description de l'erreur.errors
: liste des erreurs qui se sont produites. Chaque erreur contient un identifiant pour le type d'erreur (reason
) et une brève description (message
).
Par exemple, l'envoi d'une requête JSON non valide génèrera l'erreur suivante :
{ "error": { "errors": [ { "domain": "global", "reason": "parseError", "message": "Parse Error", } ], "code": 400, "message": "Parse Error" } }
Voici les erreurs possibles :
Motif | Domaine | HTTP Status Code | Description |
---|---|---|---|
dailyLimitExceeded |
usageLimits |
403 | Vous avez dépassé votre limite quotidienne. |
keyInvalid |
usageLimits |
400 | Votre clé API n'est pas valide pour l'API Geolocation. Veuillez vérifier que vous avez inclus la clé complète, et que vous avez acheté l'API ou activé la facturation et l'API pour obtenir le quota sans frais. |
userRateLimitExceeded |
usageLimits |
403 | Vous avez dépassé la limite de requêtes que vous avez configurée dans Google Cloud Console. Cette limite est généralement définie sur le nombre de requêtes par jour, le nombre de requêtes pour 100 secondes et le nombre de requêtes pour 100 secondes par utilisateur. Cette limite doit être configurée pour éviter qu'un seul ou un petit groupe d'utilisateurs n'épuise votre quota quotidien, tout en permettant un accès raisonnable à tous les utilisateurs. Consultez la section Limiter l'utilisation des API pour configurer ces limites. |
notFound |
geolocation |
404 | La requête était valide, mais n'a renvoyé aucun résultat. |
parseError |
global |
400 | Le corps de la requête ne présente pas un format JSON valide. Pour en savoir plus sur chaque champ, reportez-vous à la section Corps de la requête. |
Exemples de requête
Si vous souhaitez essayer l'API Geolocation avec des exemples de données, enregistrez le fichier JSON suivant dans un fichier:
{ "considerIp": "false", "wifiAccessPoints": [ { "macAddress": "3c:37:86:5d:75:d4", "signalStrength": -35, "signalToNoiseRatio": 0 }, { "macAddress": "94:b4:0f:fd:c1:40", "signalStrength": -35, "signalToNoiseRatio": 0 } ] }
Vous pouvez ensuite utiliser cURL pour effectuer votre requête à partir de la ligne de commande:
$ curl -d @your_filename.json -H "Content-Type: application/json" -i "https://www.googleapis.com/geolocation/v1/geolocate?key=YOUR_API_KEY"
Pour les adresses Mac ci-dessus, la réponse est semblable à ce qui suit :
{ "location": { "lat": 37.4241876, "lng": -122.0917381 }, "accuracy": 32.839 }
(Si vous ne disposez pas de clé API, consultez Obtenir une clé API.)
Pour effectuer des tests supplémentaires, vous pouvez collecter des informations sur votre appareil Android à l'aide du SDK Places pour Android et des API de localisation Android, et de votre appareil iOS à l'aide du SDK Places pour iOS.
Questions fréquentes
Pourquoi ma réponse de géolocalisation apparaît-elle avec un très grand rayon accuracy
?
Si votre réponse de géolocalisation affiche une valeur très élevée dans le champ accuracy
, le service peut procéder à la géolocalisation en fonction de l'adresse IP de la requête, et non des points d'accès Wi-Fi ou des antennes-relais. Cela peut se produire si aucune antenne-relais ni aucun point d'accès n'est valide ni reconnu.
Pour confirmer qu'il s'agit du problème, définissez considerIp
sur false
dans votre requête. Si la réponse est un 404
, vous avez vérifié que vos objets wifiAccessPoints
et cellTowers
n'étaient pas géolocalisés.