Ce service est également disponible dans le cadre de l’API JavaScript de Cartes côté client, ou pour une utilisation côté serveur avec le Client Java, le Client Python, le Client Go et le Nœud.client js pour les services Google Maps.
- Introduction
- Avant de commencer
- Demandes de Matrice de distance
- HTTPS ou HTTP
- Paramètres de requête
- Paramètres requis
- Paramètres optionnels
- Modes de déplacement
- Informations sur le trafic
- Restrictions
- Systèmes unitaires
- Réponses de matrice de distance
- Éléments de réponse de la matrice de distance
- Codes d’état
- Codes d’état de niveau supérieur
- Codes d’état au niveau de l’élément
- Messages d’erreur
- Lignes
- Elements
- Le paramètre sensor
Introduction
L’API Distance Matrix est un service qui fournit la distance et le temps de trajet pour une matrice d’origines et de destinations. L’API renvoie des informations basées sur l’itinéraire recommandé entre les points de début et de fin, calculé par l’API Google Maps, et se compose de lignes contenant des valeurs duration
et distance
pour chaque paire.
Remarque: Ce service ne renvoie pas d’informations détaillées sur l’itinéraire. Les informations d’itinéraire peuvent être obtenues en transmettant l’origine et la destination uniques souhaitées à l’API Directions.
Avant de commencer
Ce document est destiné aux développeurs qui souhaitent calculer la distance et le temps de parcours entre un certain nombre de points dans les cartes fournies par l’une des API Google Maps. Il fournit une introduction à l’utilisation de l’API et du matériel de référence sur les paramètres disponibles.
Avant de commencer à développer avec l’API Distance Matrix, passez en revue les exigences d’authentification (vous avez besoin d’une clé API) et les informations d’utilisation et de facturation de l’API (vous devez activer la facturation sur votre projet).
Demandes de Matrice de distance
Une demande d’API de Matrice de distance prend la forme suivante :
où outputFormat
peut être l’une des valeurs suivantes :
-
json
(recommandé), indique sortie en notation d’objet JavaScript (JSON) ; ou -
xml
, indique la sortie en XML.
Remarque : Les URL doivent être correctement encodées pour être valides et sont limitées à 8192 caractères pour tous les services Web. Soyez conscient de cette limite lors de la construction de vos URL. Notez que différents navigateurs, proxys et serveurs peuvent également avoir des limites de caractères d’URL différentes.
HTTPS ou HTTP
La sécurité est importante et HTTPS est recommandé dans la mesure du possible, en particulier pour les applications qui incluent des données utilisateur sensibles, telles que l’emplacement d’un utilisateur, dans les requêtes. L’utilisation du cryptage HTTPS rend votre application plus sécurisée et plus résistante à l’espionnage ou à la falsification.
Si HTTPS n’est pas possible, pour accéder à l’API Distance Matrix via HTTP, utilisez:
Paramètres de requête
Certains paramètres sont requis tandis que d’autres sont facultatifs. Comme c’est la norme dans les URL, tous les paramètres sont séparés à l’aide du caractère esperluette (&
). Tous les caractères réservés (par exemple le signe plus « + ») doivent être encodés en URL.La liste des paramètres et leurs valeurs possibles sont énumérées ci-dessous.
Paramètres requis
-
origins
— Le point de départ pour calculer la distance et le temps de déplacement. Vous pouvez fournir un ou plusieurs emplacements séparés par le caractère de tuyau (|
), sous la forme d’un identifiant de lieu, d’une adresse ou de coordonnées de latitude/longitude :- Si vous fournissez un identifiant de lieu, vous devez le préfixer par
place_id:
. Vous ne pouvez spécifier un ID de lieu que si la demande inclut une clé API ou un ID client du plan Premium de Google Maps Platform. Vous pouvez récupérer les IDENTIFIANTS de lieu à partir de l’API de géocodage et de l’API de Lieux (y compris la saisie semi-automatique des lieux). Pour un exemple d’utilisation des IDENTIFIANTS de lieu à partir de la saisie semi-automatique de lieu, voir Saisie semi-automatique de lieu et Directions. Pour en savoir plus sur les identifiants de lieu, consultez la vue d’ensemble des identifiants de lieu. - Si vous passez une adresse, le service géocode la chaîne et la convertit en coordonnées de latitude/longitude pour calculer la distance. Cette coordonnée peut être différente de celle renvoyée par l’API de géocodage, par exemple une entrée de bâtiment plutôt que son centre.
origins=Bobcaygeon+ON|24+Sussex+Drive+Ottawa+ON
Remarque : il est préférable d’utiliser des identifiants de lieu plutôt que d’utiliser des adresses ou des coordonnées de latitude /longitude. L’utilisation des coordonnées entraînera toujours l’accrochage du point à la route la plus proche de ces coordonnées – qui peut ne pas être un point d’accès à la propriété, ou même une route qui mènera rapidement ou en toute sécurité à la destination. - Si vous passez les coordonnées de latitude / longitude, elles s’accrocheront à la route la plus proche. Il est préférable de passer un identifiant de lieu. Si vous transmettez des coordonnées, assurez-vous qu’il n’y a pas d’espace entre les valeurs de latitude et de longitude.
origins=41.43206,-81.38992|-33.86748,151.20699
origins=place_id:ChIJ3S-JXmauEmsRUcIaWtf4MzE
- Les codes Plus doivent être formatés en tant que code global ou code composé. Formatez les codes plus comme indiqué ici (les signes plus sont échappés à l’URL vers
%2B
et les espaces sont échappés à l’url vers%20
):- le code global est un indicatif régional à 4 caractères et un code local à 6 caractères ou plus (849VCWC8 + R9 est
849VCWC8%2BR9
).Le code composé - est un code local de 6 caractères ou plus avec un emplacement explicite (CWC8 + R9 Mountain View, CA, USA est
CWC8%2BR9%20Mountain%20View%20CA%20USA
).
- le code global est un indicatif régional à 4 caractères et un code local à 6 caractères ou plus (849VCWC8 + R9 est
- Vous pouvez également fournir un ensemble codé de coordonnées à l’aide de l’algorithme de polyligne codé. Ceci est particulièrement utile si vous avez un grand nombre de points d’origine, car l’URL est nettement plus courte lorsque vous utilisez une polyligne codée. Les polylignes codées
- doivent être préfixées par
enc:
et suivies d’un deux-points (:
).Par exemple :origins=enc:gfo}EtohhU:
- Vous pouvez également inclure plusieurs polylignes codées, séparées par le caractère pipe (
|
). Exemple:origins=enc:wc~oAwquwMdlTxiKtqLyiK:|enc:c~vnAamswMvlTor@tjGi}L:|enc:udymA{~bxM:
- doivent être préfixées par
- Si vous fournissez un identifiant de lieu, vous devez le préfixer par
-
destinations
— Un ou plusieurs emplacements à utiliser comme point d’arrivée pour calculer la distance et le temps de déplacement. Les options pour le paramètredestinations
sont les mêmes que pour le paramètreorigins
, décrit ci-dessus. -
key
– La clé API de votre application. Cette clé identifie votre demande à des fins de gestion des quotas. Apprenez à obtenir une clé.Note: Les clients du plan Premium de la plateforme Google Maps peuvent utiliser une clé API ou un identifiant client valide et une signature numérique dans vos demandes de matrice de distance. Obtenez plus d’informations sur les paramètres d’authentification pour les clients du plan Premium.
L’exemple suivant utilise les coordonnées de latitude/longitude pour spécifier les coordonnées de destination :
L’exemple suivant utilise des codes plus pour spécifier les coordonnées de destination :
L’exemple suivant montre la même requête en utilisant une polyligne codée:
Paramètres optionnels
-
mode
(par défautdriving
) – Spécifie le mode de transport à utiliser lors du calcul de la distance. Les valeurs valides et les autres détails de la demande sont spécifiés dans la section Modes de déplacement de ce document. -
language
– La langue dans laquelle retourner les résultats.- Voir la liste des langues prises en charge. Google met souvent à jour les langues prises en charge, cette liste peut donc ne pas être exhaustive.
- Si
language
n’est pas fourni, l’API tente d’utiliser la langue préférée spécifiée dans l’en-têteAccept-Language
, ou la langue maternelle du domaine à partir duquel la requête est envoyée. - L’API fait de son mieux pour fournir une adresse postale lisible à la fois pour l’utilisateur et les locaux. Pour atteindre cet objectif, il renvoie des adresses de rue dans la langue locale, translittérées dans un script lisible par l’utilisateur si nécessaire, en respectant la langue préférée. Toutes les autres adresses sont renvoyées dans la langue de votre choix. Les composants d’adresse sont tous renvoyés dans la même langue, qui est choisie parmi le premier composant.
- Si un nom n’est pas disponible dans la langue préférée, l’API utilise la correspondance la plus proche.
- La langue préférée a une petite influence sur l’ensemble des résultats que l’API choisit de renvoyer et sur l’ordre dans lequel ils sont renvoyés. Le géocodeur interprète les abréviations différemment selon la langue, comme les abréviations pour les types de rues, ou des synonymes qui peuvent être valides dans une langue mais pas dans une autre. Par exemple, utca et tér sont synonymes de rue en hongrois.
-
region
– Le code de région, spécifié comme une valeur de deux caractères ccTLD (country code top-level domain). La plupart des codes ccTLD sont identiques aux codes ISO 3166-1, à quelques exceptions près. Ce paramètre n’influencera que les résultats du géocodeur, et non les limitera complètement. Si des résultats plus pertinents existent en dehors de la région spécifiée, ils peuvent être inclus. -
avoid
— – Introduit des restrictions à la route. Les valeurs valides sont spécifiées dans la section Restrictions de ce document. Une seule restriction peut être spécifiée. -
units
— Spécifie le système d’unités à utiliser lors de l’expression de la distance sous forme de texte. Voir la section Systèmes d’unités de ce document pour plus d’informations. -
arrival_time
— – Spécifie l’heure d’arrivée souhaitée pour les demandes de transit, en secondes depuis minuit, le 1er janvier 1970 UTC. Vous pouvez spécifierdeparture_time
ouarrival_time
, mais pas les deux. Notez quearrival_time
doit être spécifié comme un entier. -
departure_time
— L’heure de départ souhaitée. Vous pouvez spécifier l’heure sous forme d’entier en secondes depuis minuit, le 1er janvier 1970 UTC. Si undeparture_time
plus tard que 9999-12-31T23:59:59.9999999999 Z est spécifié, l’API ramènera ledeparture_time
à 9999-12-31T23:59:59.9999999999 Z. Alternativement, vous pouvez spécifier une valeur denow
, qui définit l’heure de départ à l’heure actuelle (correcte à la seconde la plus proche). L’heure de départ peut être spécifiée dans deux cas:- Pour les demandes où le mode de voyage est le transit: Vous pouvez éventuellement spécifier l’un des
departure_time
ouarrival_time
. Si aucune heure n’est spécifiée, la valeur par défaut dedeparture_time
est maintenant (c’est-à-dire que l’heure de départ est par défaut l’heure actuelle). - Pour les demandes où le mode voyage est en cours de conduite : Vous pouvez spécifier le
departure_time
pour recevoir un itinéraire et une durée de trajet (champ de réponse:duration_in_traffic
) qui tiennent compte des conditions de circulation. Cette option n’est disponible que si la demande contient une clé API valide ou un identifiant et une signature de client du plan Premium de Google Maps Platform valides. Ledeparture_time
doit être réglé sur l’heure actuelle ou quelque temps dans le futur. Cela ne peut pas être dans le passé.Remarque: Si l’heure de départ n’est pas spécifiée, le choix de l’itinéraire et la durée sont basés sur le réseau routier et les conditions de circulation moyennes indépendantes du temps. Les résultats pour une demande donnée peuvent varier dans le temps en raison des changements dans le réseau routier, des conditions de circulation moyennes actualisées et de la nature distribuée du service. Les résultats peuvent également varier entre des itinéraires presque équivalents à tout moment ou à toute fréquence.
Remarque : Les demandes de matrice de distance spécifiant
departure_time
lorsquemode=driving
sont limitées à un maximum de 100 éléments par requête. Le nombre d’origines multiplié par le nombre de destinations définit le nombre d’éléments.
- Pour les demandes où le mode de voyage est le transit: Vous pouvez éventuellement spécifier l’un des
-
traffic_model
(par défautbest_guess
) — Spécifie les hypothèses à utiliser lors du calcul du temps dans le trafic. Ce paramètre affecte la valeur renvoyée dans le champduration_in_traffic
de la réponse, qui contient le temps prévu dans le trafic en fonction des moyennes historiques. Le paramètretraffic_model
ne peut être spécifié que pour les demandes dont le mode de déplacement estdriving
, et où la demande inclut undeparture_time
, et uniquement si la demande inclut une clé API ou un identifiant client de plan Premium Google Maps Platform. Les valeurs disponibles pour ce paramètre sont:-
best_guess
(par défaut) indique que leduration_in_traffic
retourné doit être la meilleure estimation du temps de trajet compte tenu de ce que l’on sait à la fois des conditions de trafic historiques et du trafic en direct. Le trafic en direct devient plus important plus ledeparture_time
est proche de maintenant. -
pessimistic
indique que leduration_in_traffic
retourné doit être plus long que le temps de trajet réel la plupart du temps, bien que des jours occasionnels avec des conditions de circulation particulièrement mauvaises puissent dépasser cette valeur. -
optimistic
indique que leduration_in_traffic
retourné doit être plus court que le temps de trajet réel la plupart du temps, bien que des jours occasionnels avec des conditions de circulation particulièrement bonnes puissent être plus rapides que cette valeur.
-
-
transit_mode
— Spécifie un ou plusieurs modes de transit préférés. Ce paramètre ne peut être spécifié que pour les requêtes oùmode
esttransit
. Le paramètre prend en charge les arguments suivants:-
bus
indique que l’itinéraire calculé devrait préférer voyager en bus. -
subway
indique que l’itinéraire calculé devrait préférer voyager en métro. -
train
indique que l’itinéraire calculé devrait préférer voyager en train. -
tram
indique que l’itinéraire calculé devrait préférer le tramway et le train léger. -
rail
indique que l’itinéraire calculé devrait préférer voyager en train, tram, train léger sur rail et métro. Ceci est équivalent àtransit_mode=train|tram|subway
.
-
-
transit_routing_preference
— Spécifie les préférences pour les demandes de transit. En utilisant ce paramètre, vous pouvez biaiser les options renvoyées, plutôt que d’accepter la meilleure route par défaut choisie par l’API. Ce paramètre ne peut être spécifié que pour les requêtes oùmode
esttransit
. Le paramètre prend en charge les arguments suivants:-
less_walking
indique que l’itinéraire calculé doit préférer des quantités limitées de marche. -
fewer_transfers
indique que la route calculée doit préférer un nombre limité de transferts.
-
Modes de déplacement
Pour le calcul des distances, vous pouvez spécifier le transport mode
à utiliser. Par défaut, les distances sont calculées pour le mode de conduite. Les modes de déplacement suivants sont pris en charge :
-
driving
(par défaut) indique le calcul de la distance en utilisant le réseau routier. -
walking
demande le calcul de la distance pour la marche via les chemins piétonniers & trottoirs (le cas échéant). -
bicycling
demande le calcul de la distance pour le vélo via les pistes cyclables &rues préférées (le cas échéant). -
transit
demande le calcul de la distance via les itinéraires de transport en commun (le cas échéant). Cette valeur ne peut être spécifiée que si la demande comprend une clé API ou un identifiant client du plan Premium de Google Maps Platform. Si vous définissez le mode surtransit
vous pouvez éventuellement spécifier undeparture_time
ou unarrival_time
. Si aucune heure n’est spécifiée, la valeur par défaut dedeparture_time
est maintenant (c’est-à-dire que l’heure de départ est par défaut l’heure actuelle). Vous pouvez également éventuellement inclure untransit_mode
et/ou untransit_routing_preference
.
Informations sur le trafic
Les informations sur le trafic sont utilisées lorsque toutes les conditions suivantes s’appliquent (ce sont les conditions requises pour recevoir le champ duration_in_traffic
dans la réponse de la matrice de distance) :
- Le paramètre travel
mode
estdriving
, ou n’est pas spécifié (driving
est le mode de déplacement par défaut). - La requête inclut un paramètre
departure_time
valide. Ledeparture_time
peut être réglé sur l’heure actuelle ou quelque temps dans le futur. Cela ne peut pas être dans le passé.
En option, vous pouvez inclure le paramètre traffic_model
dans votre requête pour spécifier les hypothèses à utiliser lors du calcul du temps dans le trafic.
L’URL suivante initie une demande de Matrice de distance pour les distances de conduite entre Boston, MA ou Charlestown, MA, et Lexington, MA et Concord, MA. La demande comprend une heure de départ, répondant à toutes les exigences pour renvoyer le champ duration_in_traffic
dans la réponse de la matrice de distance.
Restrictions
Des distances peuvent être calculées qui respectent certaines restrictions. Les restrictions sont indiquées par l’utilisation du paramètre avoid
, et un argument de ce paramètre indiquant la restriction à éviter. Les restrictions suivantes sont prises en charge :
-
avoid=tolls
-
avoid=highways
-
avoid=ferries
-
avoid=indoor
* Remarque : l’ajout de restrictions n’exclut pas les itinéraires qui incluent la fonctionnalité restreinte ; il biaisera le résultat vers des itinéraires plus favorables.
Systèmes unitaires
Les résultats de la matrice de distance contiennent des champs text
dans les champs distance
pour indiquer la distance de l’itinéraire calculé. Le système d’unités à utiliser peut être spécifié :
-
units=metric
(par défaut) renvoie les distances en kilomètres et en mètres. -
units=imperial
renvoie les distances en miles et en pieds.
*Remarque : ce paramètre du système d’unités n’affecte que les champs text
affichés dans les champs distance
. Les champs distance
contiennent également values
qui sont toujours exprimés en mètres.
Réponses de matrice de distance
Les réponses aux requêtes d’API de matrice de distance sont renvoyées dans le format indiqué par l’indicateur output
dans le chemin de la requête d’URL.
Deux exemples de requêtes HTTP sont présentés ci-dessous, demandant la distance et la durée de Vancouver, BC, Canada et de Seattle, WA, États-Unis, à San Francisco, CA, États-Unis et à Victoria, BC, Canada.
Cette requête démontre l’utilisation de l’indicateur JSON output
:
Cette requête démontre en utilisant le drapeau XML output
:
Cette requête renverra quatre éléments – deux origines fois deux destinations :
Vancouver à San Francisco | Vancouver à Victoria |
Seattle à San Francisco | Seattle to Victoria |
Les résultats sont renvoyés en lignes, chaque ligne contenant une origine associée à chaque destination.
Vous pouvez le tester en entrant l’URL dans votre navigateur Web (assurez-vous de remplacer YOUR_API_KEY
par votre clé API réelle).
Sélectionnez les onglets ci-dessous pour voir les exemples de réponses JSON et XML.
Le reste de cette documentation utilisera la syntaxe JSON.
Éléments de réponse de la matrice de distance
Les réponses de la matrice de distance contiennent les éléments racine suivants :
-
status
contient des métadonnées sur la requête. Voir les codes d’état ci-dessous. -
origin_addresses
contient un tableau d’adresses renvoyées par l’API à partir de votre requête d’origine. Ceux-ci sont formatés par le géocodeur et localisés selon le paramètrelanguage
passé avec la requête. -
destination_addresses
contient un tableau d’adresses renvoyées par l’API à partir de votre requête d’origine. Comme avecorigin_addresses
, ceux-ci sont localisés le cas échéant. -
rows
contient un tableau deelements
, qui à leur tour contiennent chacun unstatus
duration
, etdistance
élément.
Codes d’état
Les champs status
de l’objet response contiennent l’état de la requête et peuvent contenir des informations de débogage utiles. L’API Distance Matrix renvoie un champ d’état de niveau supérieur, avec des informations sur la demande en général, ainsi qu’un champ d’état pour chaque champ d’élément, avec des informations sur ce couplage origine-destination particulier.
Codes d’état de niveau supérieur
-
OK
indique que la réponse contient unresult
valide. -
INVALID_REQUEST
indique que la requête fournie n’était pas valide. -
MAX_ELEMENTS_EXCEEDED
indique que le produit des origines et des destinations dépasse la limite par requête. -
MAX_DIMENSIONS_EXCEEDED
indique que le nombre d’origines ou de destinations dépasse la limite par requête. -
OVER_DAILY_LIMIT
indique l’un des éléments suivants :- La clé API est manquante ou invalide.
- La facturation n’a pas été activée sur votre compte.
- Un plafond d’utilisation auto-imposé a été dépassé.
- Le mode de paiement fourni n’est plus valide (par exemple, une carte de crédit a expiré).
Consultez la FAQ Maps pour savoir comment résoudre ce problème.
-
OVER_QUERY_LIMIT
indique que le service a reçu trop de demandes de votre application dans le délai imparti. -
REQUEST_DENIED
indique que le service a refusé l’utilisation du service de matrice de distance par votre application. -
UNKNOWN_ERROR
indique qu’une requête de matrice de distance n’a pas pu être traitée en raison d’une erreur de serveur. La demande peut aboutir si vous réessayez.
Codes d’état au niveau de l’élément
-
OK
indique que la réponse contient unresult
valide. -
NOT_FOUND
indique que l’origine et/ou la destination de ce couplage n’ont pas pu être géocodées. -
ZERO_RESULTS
indique qu’aucun itinéraire n’a pu être trouvé entre l’origine et la destination. -
MAX_ROUTE_LENGTH_EXCEEDED
indique que la route demandée est trop longue et ne peut pas être traitée.
Messages d’erreur
Lorsque le code d’état de niveau supérieur est autre que OK
, il peut y avoir un champ error_message
supplémentaire dans l’objet de réponse de la matrice de distance. Ce champ contient des informations plus détaillées sur les raisons du code d’état donné.
Remarque: Ce champ n’est pas garanti pour être toujours présent, et son contenu est sujet à changement.
Lignes
Lorsque l’API Distance Matrix renvoie des résultats, elle les place dans un tableau JSON rows
. Même si aucun résultat n’est renvoyé (par exemple lorsque les origines et / ou les destinations n’existent pas), il renvoie toujours un tableau vide. Les réponses XML se composent de zéro ou plusieurs éléments <row>
.
Les lignes sont ordonnées en fonction des valeurs du paramètre origin
de la requête. Chaque ligne correspond à une origine, et chaque element
dans cette ligne correspond à un appariement de l’origine avec une valeur destination
.
Chaque tableau row
contient une ou plusieurs entrées element
, qui à leur tour contiennent les informations sur un seul appariement origine-destination.
Elements
Les informations sur chaque appariement origine-destination sont renvoyées dans une entrée element
. Un element
contient les champs suivants :
-
status
: Voir Codes d’état pour une liste des codes d’état possibles. -
duration
: Le temps qu’il faut pour parcourir cet itinéraire, exprimé en secondes (le champvalue
) et en tant quetext
. La représentation textuelle est localisée en fonction du paramètrelanguage
de la requête. -
duration_in_traffic
: Le temps nécessaire pour parcourir cet itinéraire, en fonction des conditions de circulation actuelles et historiques. Voir le paramètre de requêtetraffic_model
pour les options que vous pouvez utiliser pour demander que la valeur renvoyée soit optimiste, pessimiste ou une estimation optimale. La durée est exprimée en secondes (le champvalue
) et en tant quetext
. La représentation textuelle est localisée en fonction du paramètrelanguage
de la requête. La durée dans le trafic n’est renvoyée que si toutes les valeurs suivantes sont vraies :- La requête inclut un paramètre
departure_time
. - La demande comprend une clé API valide ou un identifiant et une signature de client Google Maps Platform Premium.
- Les conditions de circulation sont disponibles pour l’itinéraire demandé.
- Le paramètre
mode
est défini surdriving
.
- La requête inclut un paramètre
-
distance
: La distance totale de cet itinéraire, exprimée en mètres (value
) et entext
. La valeur textuelle utilise le système d’unités spécifié avec le paramètreunit
de la requête d’origine ou de la région d’origine. -
fare
: S’il est présent, contient le tarif total (c’est-à-dire le coût total du billet) sur cet itinéraire. Cette propriété n’est retournée que pour les demandes de transport en commun et uniquement pour les fournisseurs de transport en commun où des informations sur les tarifs sont disponibles. Les informations comprennent:-
currency
: Un code de devise ISO 4217 indiquant la devise dans laquelle le montant est exprimé. -
value
: Le montant total du tarif, dans la devise spécifiée ci-dessus. -
text
: Le montant total du tarif, formaté dans la langue demandée.
-
Voici un exemple d’un element
contenant des informations sur les tarifs :
Le paramètre sensor
L’API Google Maps exigeait auparavant que vous incluiez le paramètre sensor
pour indiquer si votre application utilisait asensor pour déterminer l’emplacement de l’utilisateur. Ce paramètre n’est plus requis.