Présentation
Vous pouvez calculer un itinéraire (avec différents modes de transport) à l'aide de l'objet DirectionsService
. Cet objet communique avec le service Directions de l'API Google Maps, qui reçoit les requêtes d'itinéraire et renvoie un chemin efficace.
Le temps de trajet est le principal facteur optimisé, mais d'autres critères tels que la distance, le nombre de changements de direction et bien d'autres peuvent être pris en compte.
Vous pouvez gérer ces résultats d'itinéraire vous-même ou utiliser l'objet DirectionsRenderer
pour les afficher.
Lorsque vous spécifiez le point de départ ou la destination dans une requête d'itinéraire, vous pouvez spécifier une chaîne de requête (par exemple, "Chicago, Illinois, États-Unis" ou "Darwin, Territoire du Nord, Australie"), une valeur LatLng
ou un objet Place.
Le service Directions peut renvoyer des itinéraires multi-segments passant par une série de points de cheminement. L'itinéraire s'affiche sous la forme d'une polyligne sur la carte et d'une série de descriptions textuelles dans un élément <div>
(par exemple, "Prendre à droite sur Rue Charles Dickens").
Premiers pas
Avant d'utiliser le service Directions dans l'API Maps JavaScript, assurez-vous d'abord que l'API Directions est activée dans la console Google Cloud, dans le même projet que celui configuré pour l'API Maps JavaScript.
Pour afficher la liste des API activées :
- Accédez à la console Google Cloud.
- Cliquez sur le bouton Sélectionner un projet, sélectionnez le projet que vous avez configuré pour l'API Maps JavaScript, puis cliquez sur Ouvrir.
- Dans la liste des API du tableau de bord, repérez l'API Directions.
- Si vous trouvez l'API dans la liste, vous pouvez continuer. Si l'API ne figure pas dans la liste, activez-la :
- En haut de la page, sélectionnez ACTIVER L'API pour afficher l'onglet Bibliothèque. Vous pouvez également sélectionner Bibliothèque dans le menu de gauche.
- Recherchez l'API Directions, puis sélectionnez-la dans la liste des résultats.
- Sélectionnez ACTIVER. Une fois le processus terminé, l'API Directions apparaît dans la liste des API du tableau de bord.
Tarifs et règles
Tarifs
Le 16 juillet 2018, un nouveau forfait de type paiement à l'usage est entré en vigueur pour les services Maps, Routes et Places. Pour en savoir plus sur les nouveaux tarifs et les nouvelles limites d'utilisation du service JavaScript Directions, consultez la page Utilisation et facturation de l'API Directions.
Règles
Le service Directions doit être utilisé conformément aux Règles de l'API Directions.
Requêtes d'itinéraires
Étant donné que l'API Google Maps doit appeler un serveur externe, l'accès au service Directions est asynchrone. Pour cette raison, vous devez transmettre une méthode de rappel à exécuter à la fin de la requête. Cette méthode de rappel doit traiter le ou les résultats. Notez que le service Directions peut afficher plusieurs itinéraires possibles sous la forme d'un tableau routes[]
d'éléments distincts.
Pour utiliser un itinéraire dans l'API Maps JavaScript, créez un objet de type DirectionsService
et appelez DirectionsService.route()
pour envoyer une requête au service Directions, en lui transmettant un littéral d'objet DirectionsRequest
contenant les termes d'entrée et une méthode de rappel à exécuter dès réception de la réponse.
Le littéral d'objet DirectionsRequest
contient les champs suivants :
{ origin: LatLng | String | google.maps.Place, destination: LatLng | String | google.maps.Place, travelMode: TravelMode, transitOptions: TransitOptions, drivingOptions: DrivingOptions, unitSystem: UnitSystem, waypoints[]: DirectionsWaypoint, optimizeWaypoints: Boolean, provideRouteAlternatives: Boolean, avoidFerries: Boolean, avoidHighways: Boolean, avoidTolls: Boolean, region: String }
Ces champs sont décrits ci-dessous :
origin
(obligatoire) spécifie le lieu de départ à partir duquel l'itinéraire doit être calculé. Cette valeur peut être spécifiée en tant queString
(par exemple, "Paris Île-de-France"), en tant que valeurLatLng
ou en tant qu'objet Place. Si vous utilisez un objet Place, vous pouvez spécifier un ID de lieu, une chaîne de requête ou un emplacementLatLng
. Vous pouvez obtenir les ID de lieu via les services Geocoding, Place Search et Place Autocomplete dans l'API Maps JavaScript. Pour obtenir un exemple d'utilisation des ID de lieu de Place Autocomplete, consultez Place Autocomplete et Directions.destination
(obligatoire) indique la destination vers laquelle l'itinéraire est calculé. Les options sont identiques à celles du champorigin
décrit ci-dessus.travelMode
(obligatoire) spécifie le mode de transport à utiliser pour calculer l'itinéraire. Les valeurs valides sont spécifiées dans la section Modes de transport ci-dessous.transitOptions
(facultatif) spécifie les valeurs qui ne s'appliquent qu'aux requêtes pour lesquellestravelMode
correspond àTRANSIT
. Les valeurs valides sont décrites dans la section Options de transports en commun ci-dessous.drivingOptions
(facultatif) spécifie les valeurs qui ne s'appliquent qu'aux requêtes pour lesquellestravelMode
correspond àDRIVING
. Les valeurs valides sont décrites dans la section Options d'itinéraire en voiture ci-dessous.unitSystem
(facultatif) spécifie le système d'unités à utiliser pour afficher les résultats. Les valeurs valides sont spécifiées dans la section Systèmes d'unités ci-dessous.waypoints[]
(facultatif) spécifie un tableau deDirectionsWaypoint
. Les points de cheminement modifient un itinéraire en le faisant passer par le ou les lieux indiqués. Un point de cheminement est spécifié en tant que littéral d'objet avec les champs présentés ci-dessous :location
spécifie l'emplacement du point de cheminement sous forme deLatLng
, d'objet Place ou deString
qui sera géocodé.stopover
est un booléen qui indique que le point de cheminement est un arrêt sur l'itinéraire qui est alors divisé en deux.
(Pour plus d'informations sur les points de cheminement, consultez Utiliser des points de cheminement dans les itinéraires ci-dessous.)
optimizeWaypoints
(facultatif) spécifie que l'itinéraire utilisant les (waypoints
) fournis peut être optimisé en réorganisant les points de cheminement dans un ordre plus judicieux. Si la valeur esttrue
, le service Directions renvoie leswaypoints
réorganisés dans un champwaypoint_order
. (Pour en savoir plus, consultez Utiliser des points de cheminement dans les itinéraires ci-dessous.)provideRouteAlternatives
(facultatif) défini surtrue
indique que le service Directions peut fournir plusieurs itinéraires alternatifs dans la réponse. Notez que le calcul d'itinéraires alternatifs peut augmenter le temps de réponse du serveur. Cette option n'est disponible que pour les requêtes sans points de cheminement intermédiaires.avoidFerries
(facultatif) défini surtrue
indique que le ou les itinéraires calculés doivent éviter les ferries, si possible.avoidHighways
(facultatif) défini surtrue
indique que le ou les itinéraires calculés doivent, si possible, éviter les grands axes.avoidTolls
(facultatif) défini surtrue
indique que le ou les itinéraires calculés doivent éviter les routes à péage, si possible.region
(facultatif) spécifie le code régional sous la forme d'une valeur ccTLD (TLD pour top-level domain, domaine de premier niveau) à deux caractères. (Pour en savoir plus, consultez Ajuster l'itinéraire en fonction de la région ci-dessous.)
Voici un exemple de DirectionsRequest
:
{ origin: 'Chicago, IL', destination: 'Los Angeles, CA', waypoints: [ { location: 'Joplin, MO', stopover: false },{ location: 'Oklahoma City, OK', stopover: true }], provideRouteAlternatives: false, travelMode: 'DRIVING', drivingOptions: { departureTime: new Date(/* now, or future date */), trafficModel: 'pessimistic' }, unitSystem: google.maps.UnitSystem.IMPERIAL }
Modes de transport
Lorsque vous calculez un itinéraire, vous devez spécifier le mode de transport à utiliser. Actuellement, les modes de transport suivants sont pris en charge :
DRIVING
(par défaut) indique un itinéraire en voiture standard via le réseau routier.BICYCLING
demande un itinéraire à vélo via les pistes cyclables et les rues à privilégier.TRANSIT
demande un itinéraire via les réseaux de transports en commun.WALKING
demande un itinéraire à pied via les voies piétonnes et les trottoirs.
Consultez les détails de la couverture Google Maps Platform pour savoir dans quelle mesure les itinéraires sont disponibles dans un pays. Si vous demandez un type d'itinéraire qui n'est pas disponible dans la région, la réponse renvoie DirectionsStatus
="ZERO_RESULTS
".
Remarque : Les itinéraires à pied n'incluront peut-être pas de voies piétonnes claires. Ils renvoient donc des avertissements dans le DirectionsResult
. Ces avertissements doivent toujours s'afficher. Si vous n'utilisez pas la valeur par défaut DirectionsRenderer
, vous devez vérifier que les avertissements s'affichent.
Options de transports en commun
Les options disponibles pour les requêtes d'itinéraire dépendent du mode de transport.
Lorsque vous demandez un itinéraire en transports en commun, les options avoidHighways
, avoidTolls
, waypoints[]
et optimizeWaypoints
sont ignorées. Vous pouvez spécifier des options d'itinéraire spécifiques aux transports en commun via le littéral d'objet TransitOptions
.
Les itinéraires en transports en commun dépendent du facteur temps. Les itinéraires ne sont renvoyés que pour des horaires futurs.
Le littéral d'objet TransitOptions
contient les champs suivants :
{ arrivalTime: Date, departureTime: Date, modes[]: TransitMode, routingPreference: TransitRoutePreference }
Ces champs sont décrits ci-dessous :
arrivalTime
(facultatif) spécifie l'heure d'arrivée souhaitée en tant qu'objetDate
. Si l'heure d'arrivée est spécifiée, l'heure de départ est ignorée.departureTime
(facultatif) spécifie l'heure de départ souhaitée en tant qu'objetDate
.departureTime
sera ignoré siarrivalTime
est spécifié. La valeur par défaut est "now" (c'est-à-dire l'heure actuelle) si aucune valeur n'est spécifiée pourdepartureTime
niarrivalTime
.modes[]
(facultatif) est un tableau contenant un ou plusieurs littéraux d'objetTransitMode
. Vous ne pouvez inclure ce champ que si la requête comprend une clé API. ChaqueTransitMode
spécifie un mode de transport à privilégier. Les valeurs suivantes sont autorisées :BUS
indique que l'itinéraire calculé doit privilégier les trajets en bus.RAIL
indique que l'itinéraire calculé doit privilégier les trajets en train, en tramway, en métro léger et en métro.SUBWAY
indique que l'itinéraire calculé doit privilégier les trajets en métro.TRAIN
indique que l'itinéraire calculé doit privilégier les trajets en train.TRAM
indique que l'itinéraire calculé doit privilégier les trajets en tramway et en métro léger.
routingPreference
(facultatif) spécifie les préférences pour les itinéraires en transports en commun. Cette option vous permet d'ajuster les options renvoyées plutôt que d'accepter le meilleur itinéraire choisi par défaut par l'API. Vous ne pouvez spécifier ce champ que si la requête comprend une clé API. Les valeurs suivantes sont autorisées :FEWER_TRANSFERS
indique que l'itinéraire calculé doit utiliser un nombre limité de correspondances.LESS_WALKING
indique que l'itinéraire calculé doit limiter le plus possible la marche.
Voici un exemple de DirectionsRequest
en transports en commun :
{ origin: 'Hoboken NJ', destination: 'Carroll Gardens, Brooklyn', travelMode: 'TRANSIT', transitOptions: { departureTime: new Date(1337675679473), modes: ['BUS'], routingPreference: 'FEWER_TRANSFERS' }, unitSystem: google.maps.UnitSystem.IMPERIAL }
Options d'itinéraire en voiture
Vous pouvez spécifier des options pour les itinéraires en voiture via l'objet DrivingOptions
.
L'objet DrivingOptions
contient les champs suivants :
{ departureTime: Date, trafficModel: TrafficModel }
Ces champs sont décrits ci-dessous :
departureTime
(obligatoire pour que le littéral d'objetdrivingOptions
soit valide) spécifie l'heure de départ souhaitée en tant qu'objetDate
. Ce champ doit être défini sur l'heure actuelle ou sur une heure future, mais pas sur une heure passée. (L'API convertit toutes les dates et heures à l'échelle UTC pour en assurer une gestion homogène sur l'ensemble des fuseaux horaires.) Pour les clients du forfait Premium Google Maps Platform, si vous incluezdepartureTime
dans la requête, l'API renvoie le meilleur itinéraire en fonction des conditions de circulation prévues à l'heure indiquée et inclut le temps de trajet (duration_in_traffic
) dans la réponse. Si vous ne spécifiez pas d'heure de départ (si la requête n'inclut pasdrivingOptions
), l'itinéraire renvoyé est satisfaisant de manière générale. Les conditions de circulation ne sont pas prises en compte.trafficModel
(facultatif) spécifie les hypothèses à utiliser pour calculer le temps de trajet. Ce paramètre influe sur la valeur renvoyée dans le champduration_in_traffic
de la réponse, qui contient le temps de trajet prévu en fonction des moyennes historiques. La valeur par défaut estbestguess
. Les valeurs suivantes sont autorisées :bestguess
(par défaut) indique que leduration_in_traffic
renvoyé doit correspondre à la meilleure estimation du temps de trajet compte tenu des conditions de circulation historiques et en temps réel. PlusdepartureTime
est proche de l'heure actuelle, plus la circulation en temps réel devient importante.pessimistic
indique que leduration_in_traffic
renvoyé doit être supérieur à la durée réelle du trajet la plupart du temps. Toutefois, les jours où la circulation est particulièrement difficile, le temps de trajet peut être plus long.optimistic
indique que laduration_in_traffic
renvoyée doit être inférieure à la durée réelle du trajet la plupart du temps. Toutefois, les jours où la circulation est particulièrement fluide, le temps de trajet peut être plus court.
Vous trouverez ci-dessous un exemple de DirectionsRequest
pour un itinéraire en voiture :
{ origin: 'Chicago, IL', destination: 'Los Angeles, CA', travelMode: 'DRIVING', drivingOptions: { departureTime: new Date(Date.now() + N), // for the time N milliseconds from now. trafficModel: 'optimistic' } }
Systèmes d'unités
Par défaut, les itinéraires qui sont calculés et affichés utilisent le système d'unités du pays ou de la région de départ.
(Remarque : lorsque le lieu de départ est exprimé à l'aide de coordonnées de latitude/longitude au lieu d'adresses, les unités métriques sont toujours utilisées par défaut.) Par exemple, un itinéraire de "Chicago, Illinois" à "Toronto, Ontario" affichera les résultats en miles, tandis que l'itinéraire inverse les affichera en kilomètres. Vous pouvez ignorer ce système d'unités en définissant explicitement celui que vous souhaitez utiliser dans la requête à l'aide de l'une des valeurs UnitSystem
suivantes :
UnitSystem.METRIC
spécifie l'utilisation du système métrique. Les distances affichées sont exprimées en kilomètres.UnitSystem.IMPERIAL
spécifie l'utilisation du système impérial (anglais). Les distances affichées sont exprimées en miles.
Remarque : Ce paramètre de système d'unités n'influe que sur le texte présenté à l'utilisateur. Le résultat de l'itinéraire contient également des valeurs de distance, non présentées à l'utilisateur, qui sont toujours exprimées en mètres.
Ajuster l'itinéraire en fonction de la région
Le service Directions de l'API Google Maps renvoie des résultats d'adresses qui dépendent du domaine (région ou pays) à partir duquel vous avez chargé le bootstrap JavaScript. (Étant donné que la plupart des utilisateurs chargent https://maps.googleapis.com/
, un domaine implicite est défini sur les États-Unis.) Si vous chargez le bootstrap depuis un autre domaine pris en charge, vous obtiendrez des résultats ajustés en conséquence. Par exemple, les recherches "San Francisco" peuvent renvoyer des résultats différents dans les applications qui chargent https://maps.googleapis.com/
(États-Unis) et http://maps.google.es/
(Espagne).
Vous pouvez ajuster les résultats du service Directions en fonction d'une région spécifique à l'aide du paramètre region
. Ce paramètre prend un code de région, spécifié comme sous-tag de région à deux caractères (non numériques) Unicode. Dans la plupart des cas, ces tags sont directement mappés sur des valeurs ccTLD (domaine de premier niveau) à deux caractères telles que "uk" dans "co.uk". Dans certains cas, le tag region
prend également en charge les codes ISO-3166-1, qui diffèrent parfois des valeurs ccTLD ("GB" pour "Grande-Bretagne", par exemple).
Lorsque vous utilisez le paramètre region
:
- Ne spécifiez qu'un seul pays ou qu'une seule région. Les valeurs multiples sont ignorées et peuvent entraîner l'échec de la requête.
- N'utilisez que des sous-tags de région à deux caractères (format CLDR Unicode). Toutes les autres entrées entraîneront des erreurs.
L'ajustement en fonction de la région n'est disponible que pour les pays et régions dans lesquels les itinéraires sont disponibles. Pour connaître la couverture internationale de l'API Directions, consultez Détails de la couverture Google Maps Platform.
Afficher des itinéraires
Pour envoyer une requête d'itinéraire à DirectionsService
avec la méthode route()
, vous devez transmettre un rappel qui s'exécute une fois la demande de service terminée. Ce rappel renvoie un DirectionsResult
et un code DirectionsStatus
dans la réponse.
État de la requête d'itinéraire
DirectionsStatus
peut renvoyer les valeurs suivantes :
OK
indique que la réponse contient unDirectionsResult
valide.NOT_FOUND
indique qu'au moins un des lieux spécifiés dans la requête comme point de départ, destination ou point de cheminement n'a pas pu être géocodé.ZERO_RESULTS
indique qu'aucun itinéraire n'a été trouvé entre le point de départ et la destination.MAX_WAYPOINTS_EXCEEDED
indique que trop de champsDirectionsWaypoint
ont été fournis dansDirectionsRequest
. Consultez la section ci-dessous sur les limites des points de cheminement.MAX_ROUTE_LENGTH_EXCEEDED
indique que l'itinéraire demandé est trop long et ne peut pas être traité. Cette erreur se produit lorsque des itinéraires plus complexes sont renvoyés. Essayez de réduire le nombre de points de cheminement, de changement de direction ou d'instructions.INVALID_REQUEST
indique que laDirectionsRequest
fournie n'est pas valide. Ce code d'erreur est généralement le résultat de requêtes sans point de départ ou destination, ou de requêtes de transports en commun incluant des points de cheminement.OVER_QUERY_LIMIT
indique que la page Web a envoyé trop de requêtes au cours de la période autorisée.REQUEST_DENIED
indique que la page Web n'est pas autorisée à utiliser le service Directions.UNKNOWN_ERROR
indique qu'une requête d'itinéraire n'a pas pu être traitée en raison d'une erreur du serveur. Si vous essayez à nouveau, la requête pourrait aboutir.
Vous devez vous assurer que la requête d'itinéraire a renvoyé des résultats valides en vérifiant cette valeur avant de traiter le résultat.
Afficher le DirectionsResult
DirectionsResult
contient le résultat de la requête d'itinéraire. Vous pouvez le traiter vous-même ou transmettre à un objet DirectionsRenderer
, qui peut afficher automatiquement le résultat sur une carte.
Pour afficher un DirectionsResult
avec un DirectionsRenderer
, procédez comme suit :
- Créez un objet
DirectionsRenderer
. - Appelez
setMap()
sur le moteur de rendu pour le lier à la carte transmise. - Appelez
setDirections()
sur le moteur de rendu en lui transmettant leDirectionsResult
comme indiqué ci-dessus. Le moteur de rendu étant unMVCObject
, il détectera automatiquement toute modification de ses propriétés et mettra à jour la carte lorsque l'itinéraire associé sera modifié.
L'exemple suivant calcule l'itinéraire entre deux emplacements sur la route 66, où le point de départ et la destination sont définis par les valeurs "start"
et "end"
indiquées dans les listes déroulantes. Le DirectionsRenderer
gère l'affichage de la polyligne entre les emplacements indiqués, et le placement des repères des points de départ, de destination et de cheminement, s'il y en a.
function initMap() { var directionsService = new google.maps.DirectionsService(); var directionsRenderer = new google.maps.DirectionsRenderer(); var chicago = new google.maps.LatLng(41.850033, -87.6500523); var mapOptions = { zoom:7, center: chicago } var map = new google.maps.Map(document.getElementById('map'), mapOptions); directionsRenderer.setMap(map); } function calcRoute() { var start = document.getElementById('start').value; var end = document.getElementById('end').value; var request = { origin: start, destination: end, travelMode: 'DRIVING' }; directionsService.route(request, function(result, status) { if (status == 'OK') { directionsRenderer.setDirections(result); } }); }
Dans le corps HTML :
<div> <strong>Start: </strong> <select id="start" onchange="calcRoute();"> <option value="chicago, il">Chicago</option> <option value="st louis, mo">St Louis</option> <option value="joplin, mo">Joplin, MO</option> <option value="oklahoma city, ok">Oklahoma City</option> <option value="amarillo, tx">Amarillo</option> <option value="gallup, nm">Gallup, NM</option> <option value="flagstaff, az">Flagstaff, AZ</option> <option value="winona, az">Winona</option> <option value="kingman, az">Kingman</option> <option value="barstow, ca">Barstow</option> <option value="san bernardino, ca">San Bernardino</option> <option value="los angeles, ca">Los Angeles</option> </select> <strong>End: </strong> <select id="end" onchange="calcRoute();"> <option value="chicago, il">Chicago</option> <option value="st louis, mo">St Louis</option> <option value="joplin, mo">Joplin, MO</option> <option value="oklahoma city, ok">Oklahoma City</option> <option value="amarillo, tx">Amarillo</option> <option value="gallup, nm">Gallup, NM</option> <option value="flagstaff, az">Flagstaff, AZ</option> <option value="winona, az">Winona</option> <option value="kingman, az">Kingman</option> <option value="barstow, ca">Barstow</option> <option value="san bernardino, ca">San Bernardino</option> <option value="los angeles, ca">Los Angeles</option> </select> </div>
L'exemple suivant présente l'itinéraire à l'aide de plusieurs modes de transport entre Haight-Ashbury et Ocean Beach à San Francisco, en Californie :
function initMap() { var directionsService = new google.maps.DirectionsService(); var directionsRenderer = new google.maps.DirectionsRenderer(); var haight = new google.maps.LatLng(37.7699298, -122.4469157); var oceanBeach = new google.maps.LatLng(37.7683909618184, -122.51089453697205); var mapOptions = { zoom: 14, center: haight } var map = new google.maps.Map(document.getElementById('map'), mapOptions); directionsRenderer.setMap(map); } function calcRoute() { var selectedMode = document.getElementById('mode').value; var request = { origin: haight, destination: oceanBeach, // Note that JavaScript allows us to access the constant // using square brackets and a string value as its // "property." travelMode: google.maps.TravelMode[selectedMode] }; directionsService.route(request, function(response, status) { if (status == 'OK') { directionsRenderer.setDirections(response); } }); }
Dans le corps HTML :
<div> <strong>Mode of Travel: </strong> <select id="mode" onchange="calcRoute();"> <option value="DRIVING">Driving</option> <option value="WALKING">Walking</option> <option value="BICYCLING">Bicycling</option> <option value="TRANSIT">Transit</option> </select> </div>
Un DirectionsRenderer
gère non seulement l'affichage de la polyligne et de tous les repères associés, mais il peut également afficher l'itinéraire sous la forme d'une série d'étapes textuelle. Pour ce faire, appelez setPanel()
sur votre DirectionsRenderer
en lui transmettant le <div>
dans lequel vous souhaitez afficher ces informations.
Ainsi, vous êtes sûr d'afficher les informations appropriées sur les droits d'auteur et les avertissements qui peuvent être associés au résultat.
L'itinéraire textuel utilisera le paramètre de langue préférée du navigateur ou la langue spécifiée lors du chargement de l'API JavaScript avec le paramètre language
. (Pour en savoir plus, consultez
Localisation.) Dans le cas des itinéraires en transports en commun, l'heure est affichée dans le fuseau horaire de l'arrêt concerné.
L'exemple suivant est identique à celui ci-dessus, mais inclut un panneau <div>
dans lequel l'itinéraire doit s'afficher :
function initMap() { var directionsService = new google.maps.DirectionsService(); var directionsRenderer = new google.maps.DirectionsRenderer(); var chicago = new google.maps.LatLng(41.850033, -87.6500523); var mapOptions = { zoom:7, center: chicago } var map = new google.maps.Map(document.getElementById('map'), mapOptions); directionsRenderer.setMap(map); directionsRenderer.setPanel(document.getElementById('directionsPanel')); } function calcRoute() { var start = document.getElementById('start').value; var end = document.getElementById('end').value; var request = { origin:start, destination:end, travelMode: 'DRIVING' }; directionsService.route(request, function(response, status) { if (status == 'OK') { directionsRenderer.setDirections(response); } }); }
Dans le corps HTML :
<div id="map" style="float:left;width:70%;height:100%"></div> <div id="directionsPanel" style="float:right;width:30%;height:100%"></div>
Objet DirectionsResult
Lorsque vous envoyez une requête d'itinéraire au DirectionsService
, vous recevez une réponse composée d'un code d'état et d'un résultat, qui est un objet DirectionsResult
. DirectionsResult
est un littéral d'objet contenant les champs suivants :
geocoded_waypoints[]
contient un tableau d'objetsDirectionsGeocodedWaypoint
, chacun contenant des détails sur le geocoding du point de départ, de la destination et des points de cheminement.routes[]
contient un tableau d'objetsDirectionsRoute
. Chaque itinéraire indique un moyen d'aller du point de départ à la destination indiqués dans laDirectionsRequest
. En règle générale, un seul itinéraire est renvoyé par requête, sauf si le champprovideRouteAlternatives
de la requête est défini surtrue
, auquel cas plusieurs itinéraires peuvent être renvoyés.
Remarque : La propriété via_waypoint
est obsolète dans les itinéraires alternatifs. La version 3.27 est la dernière version de l'API qui ajoute des points de cheminement supplémentaires dans les itinéraires alternatifs. Pour les versions 3.28 et ultérieures de l'API, vous pouvez continuer à implémenter un itinéraire déplaçable à l'aide du service Directions en désactivant le déplacement des itinéraires alternatifs.
Seul l'itinéraire principal doit être déplaçable. Les utilisateurs peuvent déplacer l'itinéraire principal jusqu'à ce qu'il corresponde à un itinéraire alternatif.
Points de cheminement d'itinéraire géocodés
Un objet DirectionsGeocodedWaypoint
contient des détails sur le geocoding des points de départ, de destination et de cheminement.
DirectionsGeocodedWaypoint
est un littéral d'objet contenant les champs suivants :
geocoder_status
indique le code d'état résultant de l'opération de geocoding. Ce champ peut contenir les valeurs suivantes :"OK"
indique qu'aucune erreur ne s'est produite, que l'adresse a bien été analysée et qu'au moins un geocode a été renvoyé."ZERO_RESULTS"
indique que le géocode a abouti, mais n'a renvoyé aucun résultat. Cela peut se produire si le geocoder a reçu unaddress
inexistant.
-
partial_match
indique que le geocoder n'a pas renvoyé de correspondance exacte pour la requête d'origine, bien qu'il ait pu trouver une partie de l'adresse demandée. Nous vous recommandons d'examiner la requête d'origine pour vérifier qu'elle ne contient pas d'erreur de syntaxe et/ou que l'adresse est bien complète.Les correspondances partielles sont souvent renvoyées lorsque l'adresse postale n'existe pas dans la localité que vous avez indiquée dans la requête. Les correspondances partielles peuvent aussi être renvoyées lorsqu'une requête correspond à plusieurs lieux au sein de la même localité. Par exemple, "Hillpar St, Bristol, UK" renvoie une correspondance partielle pour Henry Street et Henrietta Street. Notez que si une requête comprend un composant d'adresse mal saisi, le service de geocoding peut suggérer une autre adresse. Les suggestions déclenchées de cette façon sont également signalées comme des correspondances partielles.
place_id
est l'identifiant unique d'un lieu, qui peut être utilisé avec d'autres API Google. Par exemple, vous pouvez utiliserplace_id
avec la bibliothèque de l'API Google Places pour obtenir des informations sur un établissement local, comme son numéro de téléphone, ses horaires d'ouverture, les avis des utilisateurs, etc. Consultez la présentation des ID de lieu.types[]
est un tableau qui indique le type du résultat renvoyé. Ce tableau contient un ensemble de tags (zéro, un ou plusieurs) qui identifie le type d'élément géographique renvoyé dans le résultat. Par exemple, le géocode de "Chicago" renvoie "locality", qui signifie que "Chicago" est une ville, et "political", qui indique qu'il s'agit d'une entité politique.
Itinéraires
Remarque : L'ancien objet DirectionsTrip
a été renommé DirectionsRoute
. Notez qu'un itinéraire fait désormais référence à un trajet complet du début à la fin, et non plus à une section d'un trajet parent.
Un DirectionsRoute
contient un seul résultat pour le point de départ et la destination spécifiés. Cet itinéraire peut être constitué d'une ou de plusieurs sections (de type DirectionsLeg
) selon que des points de cheminement ont été spécifiés. Il contient également les informations sur les droits d'auteur et les avertissements qui doivent être présentées à l'utilisateur en plus des informations d'itinéraire.
DirectionsRoute
est un littéral d'objet contenant les champs suivants :
legs[]
contient un tableau d'objetsDirectionsLeg
, chacun contenant des informations sur une section de l'itinéraire entre un lieu et un autre. Une section séparée est présente pour chaque point de cheminement ou de destination spécifié. (Un itinéraire sans point de cheminement contient exactement unDirectionsLeg
.) Chaque section consiste en une série deDirectionStep
.waypoint_order
contient un tableau indiquant l'ordre des points de cheminement dans l'itinéraire calculé. L'ordre dans ce tableau peut être modifié sioptimizeWaypoints: true
a été transmis àDirectionsRequest
.overview_path
contient un tableau de plusieursLatLng
représentant un chemin approximatif (lissé) de l'itinéraire obtenu.overview_polyline
contient un seul objetpoints
qui comprend une représentation de l'itinéraire sous forme de polyligne encodée. Cette polyligne est un tracé approximatif (lissé) de l'itinéraire obtenu.bounds
contient unLatLngBounds
indiquant les limites de la polyligne le long de cet itinéraire.copyrights
contient le texte sur les droits d'auteur à afficher pour cet itinéraire.warnings[]
contient un tableau d'avertissements à afficher lors de l'affichage de cet itinéraire. Si vous n'utilisez pas l'objetDirectionsRenderer
fourni, vous devez traiter et afficher vous-même ces avertissements.fare
contient le tarif total de l'itinéraire (c'est-à-dire le total des prix des billets). Cette propriété n'est renvoyée que pour les requêtes de transports en commun et uniquement si les informations tarifaires sont disponibles pour toutes les sections en transports en commun. Ces informations incluent :currency
: code de devise ISO 4217 indiquant la devise dans laquelle le montant est exprimé.value
: tarif total exprimé dans la devise spécifiée ci-dessus.
Sections d'itinéraire
Remarque : L'ancien objet DirectionsRoute
a été renommé DirectionsLeg
.
Un DirectionsLeg
définit une section unique d'un trajet entre le point de départ et la destination dans l'itinéraire calculé.
Les itinéraires sans point de cheminement se composent d'une seule section ("leg"). En revanche, les itinéraires où un ou plusieurs points de cheminement sont définis en ont plusieurs.
DirectionsLeg
est un littéral d'objet contenant les champs suivants :
steps[]
contient un tableau d'objetsDirectionsStep
qui comportent des informations sur chaque étape distincte de la section du trajet.distance
indique la distance totale couverte par cette section dans un objetDistance
qui se présente comme suit :value
indique la distance en mètres.text
contient une représentation de la distance sous forme de chaîne, qui est affichée par défaut en unités utilisées au point de départ. (Par exemple, des miles sont utilisés pour tout point de départ aux États-Unis.) Vous pouvez ignorer ce système d'unités en définissant spécifiquement unUnitSystem
dans la requête d'origine. Quel que soit le système d'unités utilisé, le champdistance.value
contient toujours une valeur exprimée en mètres.
Ce champ peut être non défini si la distance est inconnue.
duration
indique la durée totale de cette section dans un objetDuration
qui se présente comme suit :value
indique la durée en secondes.text
contient une représentation de la durée sous forme de chaîne.
Ces champs peuvent être non définis si la durée est inconnue.
duration_in_traffic
indique la durée totale de cette section, en tenant compte des conditions de circulation actuelles.duration_in_traffic
n'est renvoyé que si toutes les conditions suivantes sont remplies :- La requête n'inclut pas de points de cheminement avec arrêt. Autrement dit, elle n'inclut pas les points de cheminement où
stopover
est défini surtrue
. - La requête porte spécifiquement sur un itinéraire en voiture (
mode
est défini surdriving
). departureTime
est inclus dans le champdrivingOptions
de la requête.- Les conditions de circulation sont disponibles pour l'itinéraire demandé.
duration_in_traffic
contient les champs suivants :value
indique la durée en secondes.text
contient une représentation de la durée lisible par l'humain.
- La requête n'inclut pas de points de cheminement avec arrêt. Autrement dit, elle n'inclut pas les points de cheminement où
arrival_time
contient l'heure d'arrivée prévue pour cette section. Cette propriété n'est renvoyée que pour les itinéraires en transports en commun. Le résultat est renvoyé dans objetTime
avec trois propriétés :value
est l'heure spécifiée en tant qu'objetDate
JavaScript.text
est l'heure spécifiée sous forme de chaîne. L'heure est affichée dans le fuseau horaire de l'arrêt de transports en commun.time_zone
contient le fuseau horaire de cette station. La valeur correspond au nom du fuseau horaire, tel que défini dans la base de données des fuseaux horaires de l'IANA (par exemple, "America/New_York").
departure_time
contient l'heure de départ estimée pour cette section, spécifiée en tant qu'objetTime
.departure_time
n'est disponible que pour les itinéraires en transports en commun.start_location
contient leLatLng
du point de départ de cette section. Étant donné que le service Web Directions calcule l'itinéraire entre deux lieux à l'aide de l'option de transport la plus proche des points de départ et d'arrivée (il s'agit généralement d'une route),start_location
peut être différent du point de départ fourni pour cette section. Par exemple, c'est le cas si le point de départ n'est pas à proximité d'une route.end_location
contient leLatLng
de la destination de cette section. Étant donné queDirectionsService
calcule l'itinéraire entre deux lieux à l'aide de l'option de transport la plus proche des points de départ et d'arrivée (il s'agit généralement d'une route),end_location
peut être différent de la destination fournie pour cette section. Par exemple, c'est le cas si la destination n'est pas à proximité d'une route.start_address
contient l'adresse lisible par l'humain (généralement une adresse postale) du début de la section.
Ce contenu est destiné à être lu tel quel. N'analysez pas par programmation l'adresse formatée.end_address
contient l'adresse lisible par l'humain (généralement une adresse postale) de la fin de la section.
Ce contenu est destiné à être lu tel quel. N'analysez pas par programmation l'adresse formatée.
Étapes d'itinéraire
Une DirectionsStep
est l'unité la plus petite d'un itinéraire et décrit une instruction unique et spécifique au cours du trajet. Par exemple, "Tourner à gauche vers Pl. Rol Tanguy" Cette étape décrit non seulement l'instruction, mais contient également des informations de distance et de durée entre cette étape et la suivante.
Par exemple, une étape "Rejoindre Rue Armand Rousseau" peut contenir une durée de "60 kilomètres" et "40 minutes", indiquant que l'étape suivante se trouve à 60 kilomètres/40 minutes de cette étape.
Lorsque vous utilisez le service Directions pour rechercher un itinéraire en transports en commun, le tableau des étapes inclut d'autres informations spécifiques aux transports en commun dans un objet transit
. Si l'itinéraire comprend plusieurs modes de transport, des indications détaillées (pour les étapes à pied ou en voiture) seront fournies dans un tableau steps[]
.
Par exemple, une étape à pied inclura des indications : "Marcher jusqu'à Pl. Jeanne Laurent". Cette étape inclut des indications à pied détaillées pour cet itinéraire dans le tableau steps[]
, par exemple : "Prendre la direction nord-ouest", "Tourner à gauche Rue Roger-Henri Guerrand" et "Tourner à gauche sur Av. Jules Maniez".
DirectionsStep
est un littéral d'objet contenant les champs suivants :
instructions
contient des instructions pour cette étape dans une chaîne de texte.distance
contient, dans un objetDistance
, la distance couverte par cette étape jusqu'à l'étape suivante. (Voir la description dansDirectionsLeg
ci-dessus.) Ce champ peut être non défini si la distance est inconnue.duration
contient, dans un objetDuration
, une estimation du temps nécessaire pour suivre cette étape jusqu'à la suivante. (Voir la description dansDirectionsLeg
ci-dessus.) Ce champ peut être non défini si la durée est inconnue.start_location
contient leLatLng
géocodé du point de départ de cette étape.end_location
contient leLatLng
du point d'arrivée de cette étape.polyline
contient un seul objetpoints
qui comprend une représentation de l'étape sous forme de polyligne encodée. Cette polyligne est un tracé approximatif (lissé) de l'étape.steps[]
est un littéral d'objetDirectionsStep
qui contient des instructions détaillées pour les étapes à pied ou en voiture dans les itinéraires en transports en commun. Les sous-étapes sont uniquement disponibles pour les itinéraires en transports en commun.travel_mode
contient leTravelMode
utilisé à cette étape. Les itinéraires en transports en commun peuvent inclure une combinaison d'itinéraires à pied et en transports en commun.path
contient un tableau deLatLngs
décrivant le tracé de cette étape.transit
contient des informations spécifiques aux transports en commun, comme les heures d'arrivée et de départ, et le nom de la ligne de transports en commun.
Informations spécifiques aux transports en commun
Les itinéraires en transports en commun renvoient des informations supplémentaires qui ne sont pas pertinentes pour les autres modes de transport. Ces propriétés supplémentaires sont exposées via l'objet TransitDetails
, renvoyé en tant que propriété de DirectionsStep
. À partir de l'objet TransitDetails
, vous pouvez accéder à des informations supplémentaires pour les objets TransitStop
, TransitLine
, TransitAgency
et VehicleType
, comme décrit ci-dessous.
Détails sur les transports en commun
L'objet TransitDetails
expose les propriétés suivantes :
arrival_stop
contient un objetTransitStop
représentant la station/l'arrêt d'arrivée avec les propriétés suivantes :name
est le nom de la station/l'arrêt de transports en commun, par exemple, "Jean Jaurès".location
correspond à l'emplacement de la station/l'arrêt de transports en commun, représenté parLatLng
.
departure_stop
contient un objetTransitStop
représentant la station/l'arrêt de départ.arrival_time
contient l'heure d'arrivée, spécifiée en tant qu'objetTime
avec trois propriétés :value
est l'heure spécifiée en tant qu'objetDate
JavaScript.text
est l'heure spécifiée sous forme de chaîne. L'heure est affichée dans le fuseau horaire de l'arrêt de transports en commun.time_zone
contient le fuseau horaire de cette station. La valeur correspond au nom du fuseau horaire, tel que défini dans la base de données des fuseaux horaires de l'IANA (par exemple, "America/New_York").
departure_time
contient l'heure de départ spécifiée en tant qu'objetTime
.headsign
spécifie le sens du trajet sur cette ligne tel qu'indiqué sur le véhicule ou à l'arrêt de départ. Il s'agit souvent du terminus.headway
, lorsqu'il est disponible, indique le nombre de secondes estimé entre deux départs depuis le même arrêt à l'heure actuelle. Par exemple, si la valeur deheadway
est de 600, vous attendrez environ 10 minutes si vous manquez votre bus.line
contient un littéral d'objetTransitLine
comportant des informations sur la ligne de transports en commun utilisée à cette étape.TransitLine
fournit le nom et l'exploitant de la ligne, ainsi que d'autres propriétés décrites dans la documentation de référence deTransitLine
.num_stops
indique le nombre d'arrêts pour cette étape. L'arrêt d'arrivée est inclus, mais pas celui de départ. Par exemple, si votre itinéraire consiste à partir de l'arrêt A pour arriver à l'arrêt D en passant par les arrêts B et C,num_stops
renvoie 3.
Ligne de transports en commun
L'objet TransitLine
expose les propriétés suivantes :
name
contient le nom complet de la ligne de transports en commun. Exemple : "9 Mairie de Montreuil" ou "82 Hopital Americain".short_name
contient le nom court de cette ligne de transports en commun. Il s'agit généralement d'un numéro de ligne tel que "2" ou "M14".agencies
est un tableau contenant un seul objetTransitAgency
. L'objetTransitAgency
fournit des informations sur l'exploitant de cette ligne, y compris les propriétés suivantes :name
contient le nom complet de l'agence de transports en commun.phone
contient le numéro de téléphone de l'agence de transports en commun.url
contient l'URL de l'agence de transports en commun.
Remarque : Si vous affichez manuellement les itinéraires en transports en commun au lieu d'utiliser l'objet
DirectionsRenderer
, vous devez afficher le nom et l'URL des agences de transports en commun incluses dans les résultats du trajet.url
contient l'URL de cette ligne de transports en commun fournie par l'agence de transports en commun.icon
contient l'URL de l'icône associée à cette ligne. La plupart des villes utilisent des icônes génériques qui varient selon le type de véhicule. Certaines lignes de transports en commun ont des icônes spécifiques, comme le réseau de métro de New York.color
contient la couleur couramment utilisée pour désigner cette ligne. La couleur est spécifiée par une chaîne hexadécimale comme #FF0033.text_color
contient la couleur du texte généralement utilisée pour désigner cette ligne. La couleur est spécifiée par une chaîne hexadécimale.vehicle
contient un objetVehicle
qui inclut les propriétés suivantes :name
contient le nom du véhicule sur cette ligne, par exemple, "Métro".type
contient le type de véhicule utilisé sur cette ligne. Consultez la documentation sur les types de véhicule pour obtenir la liste complète des valeurs acceptées.icon
contient l'URL de l'icône généralement associée à ce type de véhicule.local_icon
contient l'URL de l'icône associée à ce type de véhicule d'après la signalétique locale pour les transports en commun.
Type de véhicule
L'objet VehicleType
expose les propriétés suivantes :
Valeur | Définition |
---|---|
VehicleType.RAIL |
Train. |
VehicleType.METRO_RAIL |
Métro léger. |
VehicleType.SUBWAY |
Métro léger souterrain. |
VehicleType.TRAM |
Métro léger en surface. |
VehicleType.MONORAIL |
Monorail. |
VehicleType.HEAVY_RAIL |
Métro. |
VehicleType.COMMUTER_TRAIN |
Train de banlieue. |
VehicleType.HIGH_SPEED_TRAIN |
Train à grande vitesse. |
VehicleType.BUS |
Bus. |
VehicleType.INTERCITY_BUS |
Bus interurbain. |
VehicleType.TROLLEYBUS |
Trolleybus. |
VehicleType.SHARE_TAXI |
Type de bus pouvant faire monter et descendre des passagers n'importe où sur son trajet. |
VehicleType.FERRY |
Ferry. |
VehicleType.CABLE_CAR |
Véhicule tracté par un câble, généralement en surface. Les téléphériques peuvent être de type VehicleType.GONDOLA_LIFT . |
VehicleType.GONDOLA_LIFT |
Téléphérique. |
VehicleType.FUNICULAR |
Véhicule tracté par un câble le long d'une pente prononcée. Un funiculaire se compose généralement de deux rames, chacune agissant comme contrepoids de l'autre. |
VehicleType.OTHER |
Ce type est renvoyé pour tous les autres véhicules. |
Inspecter DirectionsResults
Les composants DirectionsResults
(DirectionsRoute
, DirectionsLeg
, DirectionsStep
et TransitDetails
) peuvent être inspectés et utilisés lors de l'analyse d'une réponse d'itinéraire.
Important : Si vous affichez les itinéraires en transports en commun manuellement au lieu d'utiliser l'objet DirectionsRenderer
, vous devez afficher les noms et les URL des agences de transports en commun incluses dans les résultats du trajet.
L'exemple suivant trace l'itinéraire à pied vers certaines attractions touristiques à New York. Nous inspectons le DirectionsStep
de l'itinéraire pour ajouter des repères à chaque étape et joignons des informations dans une InfoWindow
avec un texte d'instructions pour cette étape.
Remarque : Comme nous calculons l'itinéraire à pied, nous affichons également les avertissements dans un panneau <div>
distinct.
var map; var directionsRenderer; var directionsService; var stepDisplay; var markerArray = []; function initMap() { // Instantiate a directions service. directionsService = new google.maps.DirectionsService(); // Create a map and center it on Manhattan. var manhattan = new google.maps.LatLng(40.7711329, -73.9741874); var mapOptions = { zoom: 13, center: manhattan } map = new google.maps.Map(document.getElementById('map'), mapOptions); // Create a renderer for directions and bind it to the map. var rendererOptions = { map: map } directionsRenderer = new google.maps.DirectionsRenderer(rendererOptions) // Instantiate an info window to hold step text. stepDisplay = new google.maps.InfoWindow(); } function calcRoute() { // First, clear out any existing markerArray // from previous calculations. for (i = 0; i < markerArray.length; i++) { markerArray[i].setMap(null); } // Retrieve the start and end locations and create // a DirectionsRequest using WALKING directions. var start = document.getElementById('start').value; var end = document.getElementById('end').value; var request = { origin: start, destination: end, travelMode: 'WALKING' }; // Route the directions and pass the response to a // function to create markers for each step. directionsService.route(request, function(response, status) { if (status == "OK") { var warnings = document.getElementById("warnings_panel"); warnings.innerHTML = "" + response.routes[0].warnings + ""; directionsRenderer.setDirections(response); showSteps(response); } }); } function showSteps(directionResult) { // For each step, place a marker, and add the text to the marker's // info window. Also attach the marker to an array so we // can keep track of it and remove it when calculating new // routes. var myRoute = directionResult.routes[0].legs[0]; for (var i = 0; i < myRoute.steps.length; i++) { var marker = new google.maps.Marker({ position: myRoute.steps[i].start_point, map: map }); attachInstructionText(marker, myRoute.steps[i].instructions); markerArray[i] = marker; } } function attachInstructionText(marker, text) { google.maps.event.addListener(marker, 'click', function() { stepDisplay.setContent(text); stepDisplay.open(map, marker); }); }
Dans le corps HTML :
<div> <strong>Start: </strong> <select id="start"> <option value="penn station, new york, ny">Penn Station</option> <option value="grand central station, new york, ny">Grand Central Station</option> <option value="625 8th Avenue New York NY 10018">Port Authority Bus Terminal</option> <option value="staten island ferry terminal, new york, ny">Staten Island Ferry Terminal</option> <option value="101 E 125th Street, New York, NY">Harlem - 125th St Station</option> </select> <strong>End: </strong> <select id="end" onchange="calcRoute();"> <option value="260 Broadway New York NY 10007">City Hall</option> <option value="W 49th St & 5th Ave, New York, NY 10020">Rockefeller Center</option> <option value="moma, New York, NY">MOMA</option> <option value="350 5th Ave, New York, NY, 10118">Empire State Building</option> <option value="253 West 125th Street, New York, NY">Apollo Theatre</option> <option value="1 Wall St, New York, NY">Wall St</option> </select> <div>
Utiliser des points de cheminement dans les itinéraires
Comme indiqué dans DirectionsRequest, vous pouvez également spécifier des points de cheminement (de type DirectionsWaypoint
) lorsque vous calculez un itinéraire à pied, à vélo ou en voiture via le service Directions. Les points de cheminement ne sont pas disponibles pour les itinéraires en transports en commun.
Les points de cheminement vous permettent de calculer des itinéraires passant par des lieux supplémentaires, renvoyés sous forme de points de cheminement.
Un waypoint
comprend les champs suivants :
location
(obligatoire) spécifie l'adresse du point de cheminement.stopover
(facultatif) indique si ce point de cheminement est un arrêt réel sur l'itinéraire (true
) ou s'il s'agit simplement d'un endroit par lequel l'itinéraire doit passer de préférence (false
). La valeur par défaut esttrue
.
Par défaut, le service Directions calcule un itinéraire passant par les points de cheminement dans l'ordre fourni. Vous pouvez facultativement transmettre optimizeWaypoints: true
dans la
DirectionsRequest
pour permettre au service Directions d'optimiser l'itinéraire fourni en réorganisant les points de cheminement dans un ordre plus efficace. (Cette optimisation est une application du
problème du voyageur de commerce.) La durée du trajet est le principal facteur optimisé, mais d'autres facteurs (tels que la distance, le nombre de bifurcations et bien d'autres) peuvent être pris en compte lors du choix de l'itinéraire le plus efficace. Tous les points de cheminement doivent être des arrêts pour que le service Directions optimise l'itinéraire.
Si vous demandez au service Directions d'optimiser l'ordre des points de cheminement, cet ordre sera renvoyé dans le champ waypoint_order
de l'objet DirectionsResult
.
L'exemple suivant calcule des itinéraires traversant les États-Unis avec divers points de départ, de destination et de cheminement. (Pour sélectionner plusieurs points de cheminement, appuyez sur Ctrl+clic lorsque vous sélectionnez des éléments dans la liste.)
Notez que nous inspectons routes.start_address
et routes.end_address
pour obtenir le texte des points de départ et d'arrivée de chaque itinéraire.
TypeScript
function initMap(): void { const directionsService = new google.maps.DirectionsService(); const directionsRenderer = new google.maps.DirectionsRenderer(); const map = new google.maps.Map( document.getElementById("map") as HTMLElement, { zoom: 6, center: { lat: 41.85, lng: -87.65 }, } ); directionsRenderer.setMap(map); (document.getElementById("submit") as HTMLElement).addEventListener( "click", () => { calculateAndDisplayRoute(directionsService, directionsRenderer); } ); } function calculateAndDisplayRoute( directionsService: google.maps.DirectionsService, directionsRenderer: google.maps.DirectionsRenderer ) { const waypts: google.maps.DirectionsWaypoint[] = []; const checkboxArray = document.getElementById( "waypoints" ) as HTMLSelectElement; for (let i = 0; i < checkboxArray.length; i++) { if (checkboxArray.options[i].selected) { waypts.push({ location: (checkboxArray[i] as HTMLOptionElement).value, stopover: true, }); } } directionsService .route({ origin: (document.getElementById("start") as HTMLInputElement).value, destination: (document.getElementById("end") as HTMLInputElement).value, waypoints: waypts, optimizeWaypoints: true, travelMode: google.maps.TravelMode.DRIVING, }) .then((response) => { directionsRenderer.setDirections(response); const route = response.routes[0]; const summaryPanel = document.getElementById( "directions-panel" ) as HTMLElement; summaryPanel.innerHTML = ""; // For each route, display summary information. for (let i = 0; i < route.legs.length; i++) { const routeSegment = i + 1; summaryPanel.innerHTML += "<b>Route Segment: " + routeSegment + "</b><br>"; summaryPanel.innerHTML += route.legs[i].start_address + " to "; summaryPanel.innerHTML += route.legs[i].end_address + "<br>"; summaryPanel.innerHTML += route.legs[i].distance!.text + "<br><br>"; } }) .catch((e) => window.alert("Directions request failed due to " + status)); } declare global { interface Window { initMap: () => void; } } window.initMap = initMap;
JavaScript
function initMap() { const directionsService = new google.maps.DirectionsService(); const directionsRenderer = new google.maps.DirectionsRenderer(); const map = new google.maps.Map(document.getElementById("map"), { zoom: 6, center: { lat: 41.85, lng: -87.65 }, }); directionsRenderer.setMap(map); document.getElementById("submit").addEventListener("click", () => { calculateAndDisplayRoute(directionsService, directionsRenderer); }); } function calculateAndDisplayRoute(directionsService, directionsRenderer) { const waypts = []; const checkboxArray = document.getElementById("waypoints"); for (let i = 0; i < checkboxArray.length; i++) { if (checkboxArray.options[i].selected) { waypts.push({ location: checkboxArray[i].value, stopover: true, }); } } directionsService .route({ origin: document.getElementById("start").value, destination: document.getElementById("end").value, waypoints: waypts, optimizeWaypoints: true, travelMode: google.maps.TravelMode.DRIVING, }) .then((response) => { directionsRenderer.setDirections(response); const route = response.routes[0]; const summaryPanel = document.getElementById("directions-panel"); summaryPanel.innerHTML = ""; // For each route, display summary information. for (let i = 0; i < route.legs.length; i++) { const routeSegment = i + 1; summaryPanel.innerHTML += "<b>Route Segment: " + routeSegment + "</b><br>"; summaryPanel.innerHTML += route.legs[i].start_address + " to "; summaryPanel.innerHTML += route.legs[i].end_address + "<br>"; summaryPanel.innerHTML += route.legs[i].distance.text + "<br><br>"; } }) .catch((e) => window.alert("Directions request failed due to " + status)); } window.initMap = initMap;
Limites et restrictions applicables aux points de cheminement
Les points de cheminement sont soumis aux restrictions et limites d'utilisation suivantes :
- Le nombre maximal de points de cheminement autorisé lorsque vous utilisez le service Directions dans l'API Maps JavaScript est de 25, en plus du point de départ et de la destination. Les limites sont identiques pour le service Web de l'API Directions.
- Avec le service Web de l'API Directions, les clients peuvent ajouter 25 points de cheminement en plus des points de départ et de destination.
- Les clients du forfait Premium Google Maps Platform peuvent ajouter 25 points de cheminement en plus des points de départ et de destination.
- Les points de cheminement ne sont pas pris en charge pour les itinéraires en transports en commun.
Itinéraire déplaçable
Les utilisateurs peuvent modifier un itinéraire à vélo, à pied ou en voiture affiché dynamiquement avec un DirectionsRenderer
, dès lors qu'il est déplaçable. Ils peuvent ainsi sélectionner et modifier un itinéraire en faisant glisser le trajet sur la carte.
Vous pouvez indiquer si le moteur de rendu autorise les itinéraires déplaçables en définissant la propriété draggable
sur true
. Les itinéraires en transports en commun ne peuvent pas être rendus déplaçables.
Lorsqu'un itinéraire est déplaçable, l'utilisateur peut sélectionner n'importe quel point (ou point de cheminement) du trajet affiché et déplacer le composant indiqué à un nouvel endroit. Le DirectionsRenderer
sera mis à jour dynamiquement pour afficher le trajet modifié. Lorsque l'utilisateur termine le déplacement, un point de cheminement transitoire est ajouté à la carte (indiqué par un petit repère blanc). Sélectionner et déplacer un segment du trajet modifie la section de l'itinéraire correspondante, alors que sélectionner et déplacer un repère de point de cheminement (y compris les points de départ et les destinations) modifie les sections de l'itinéraire passant par ce point de cheminement.
Étant donné que les itinéraires déplaçables sont modifiés et affichés côté client, si vous souhaitez être informé lorsque l'utilisateur modifie un itinéraire affiché, vous devez surveiller et traiter l'événement directions_changed
sur le DirectionsRenderer
.
Le code ci-dessous affiche un trajet de Perth (côte ouest de l'Australie) à Sydney (côte est). Le code surveille l'événement directions_changed
pour mettre à jour la distance totale de toutes les sections du trajet.
TypeScript
function initMap(): void { const map = new google.maps.Map( document.getElementById("map") as HTMLElement, { zoom: 4, center: { lat: -24.345, lng: 134.46 }, // Australia. } ); const directionsService = new google.maps.DirectionsService(); const directionsRenderer = new google.maps.DirectionsRenderer({ draggable: true, map, panel: document.getElementById("panel") as HTMLElement, }); directionsRenderer.addListener("directions_changed", () => { const directions = directionsRenderer.getDirections(); if (directions) { computeTotalDistance(directions); } }); displayRoute( "Perth, WA", "Sydney, NSW", directionsService, directionsRenderer ); } function displayRoute( origin: string, destination: string, service: google.maps.DirectionsService, display: google.maps.DirectionsRenderer ) { service .route({ origin: origin, destination: destination, waypoints: [ { location: "Adelaide, SA" }, { location: "Broken Hill, NSW" }, ], travelMode: google.maps.TravelMode.DRIVING, avoidTolls: true, }) .then((result: google.maps.DirectionsResult) => { display.setDirections(result); }) .catch((e) => { alert("Could not display directions due to: " + e); }); } function computeTotalDistance(result: google.maps.DirectionsResult) { let total = 0; const myroute = result.routes[0]; if (!myroute) { return; } for (let i = 0; i < myroute.legs.length; i++) { total += myroute.legs[i]!.distance!.value; } total = total / 1000; (document.getElementById("total") as HTMLElement).innerHTML = total + " km"; } declare global { interface Window { initMap: () => void; } } window.initMap = initMap;
JavaScript
function initMap() { const map = new google.maps.Map(document.getElementById("map"), { zoom: 4, center: { lat: -24.345, lng: 134.46 }, // Australia. }); const directionsService = new google.maps.DirectionsService(); const directionsRenderer = new google.maps.DirectionsRenderer({ draggable: true, map, panel: document.getElementById("panel"), }); directionsRenderer.addListener("directions_changed", () => { const directions = directionsRenderer.getDirections(); if (directions) { computeTotalDistance(directions); } }); displayRoute( "Perth, WA", "Sydney, NSW", directionsService, directionsRenderer, ); } function displayRoute(origin, destination, service, display) { service .route({ origin: origin, destination: destination, waypoints: [ { location: "Adelaide, SA" }, { location: "Broken Hill, NSW" }, ], travelMode: google.maps.TravelMode.DRIVING, avoidTolls: true, }) .then((result) => { display.setDirections(result); }) .catch((e) => { alert("Could not display directions due to: " + e); }); } function computeTotalDistance(result) { let total = 0; const myroute = result.routes[0]; if (!myroute) { return; } for (let i = 0; i < myroute.legs.length; i++) { total += myroute.legs[i].distance.value; } total = total / 1000; document.getElementById("total").innerHTML = total + " km"; } window.initMap = initMap;