Panoramica
Puoi calcolare le indicazioni stradali (utilizzando vari mezzi di trasporto) utilizzando l'oggetto DirectionsService. Questo oggetto comunica con il servizio Directions dell'API di Google Maps, che riceve le richieste di indicazioni stradali e restituisce un percorso efficiente.
Il tempo di percorrenza è il fattore principale che viene ottimizzato, ma possono essere presi in considerazione altri fattori, come la distanza, il numero di svolte e molti altri.
Puoi gestire questi risultati direzionali autonomamente o utilizzare l'oggetto DirectionsRenderer per eseguirne il rendering.
Quando specifichi l'origine o la destinazione in una richiesta di indicazioni stradali, puoi specificare una stringa di query (ad esempio "Chicago, IL" o "Darwin, NSW, Australia"), un valore LatLng o un oggetto Place.
Il servizio Directions può restituire indicazioni stradali in più parti utilizzando una serie di tappe. Le indicazioni stradali vengono visualizzate come una polilinea che disegna il percorso su una mappa o, in aggiunta, come una serie di descrizioni testuali all'interno di un elemento <div> (ad esempio, "Svolta a destra sulla rampa del ponte di Williamsburg").
Per iniziare
Prima di utilizzare il servizio Directions nell'API Maps JavaScript, assicurati che l'API Directions (Legacy) sia abilitata nella console Google Cloud, nello stesso progetto che hai configurato per l'API Maps JavaScript.
Per visualizzare l'elenco delle API abilitate:
- Vai alla console Google Cloud.
- Fai clic sul pulsante Seleziona un progetto, quindi seleziona lo stesso progetto che hai configurato per l'API Maps JavaScript e fai clic su Apri.
- Nell'elenco delle API nella Dashboard, cerca API Directions (Legacy).
- Se l'API è presente nell'elenco, non devi fare altro. Se l'API non è elencata, abilitala all'indirizzo https://console.cloud.google.com/apis/library/directions-backend.googleapis.com
Prezzi e norme
Prezzi
Per scoprire di più sui prezzi e sulle norme di utilizzo del servizio JavaScript Directions, consulta Utilizzo e fatturazione per l'API Directions (legacy).
Norme
L'utilizzo del servizio Directions deve essere conforme alle policy descritte per l'API Directions (Legacy).
Richieste di indicazioni stradali
L'accesso al servizio Directions è asincrono, poiché l'API di Google Maps deve effettuare una chiamata a un server esterno. Per questo motivo, devi passare un metodo di callback da eseguire al completamento della richiesta. Questo metodo di callback deve elaborare i risultati. Tieni presente che il servizio Directions potrebbe restituire più di un itinerario possibile sotto forma di array di routes[] separati.
Per utilizzare le indicazioni stradali nell'API Maps JavaScript, crea un oggetto di tipo DirectionsService e chiama DirectionsService.route() per avviare una richiesta al servizio Directions, passando un oggetto letterale DirectionsRequest contenente i termini di input e un metodo di callback da eseguire alla ricezione della risposta.
L'oggetto letterale DirectionsRequest contiene i seguenti campi:
{ 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 }
Questi campi sono spiegati di seguito:
origin(obbligatorio) specifica la località di partenza da cui calcolare le indicazioni stradali. Questo valore può essere specificato comeString(ad esempio "Chicago, IL"), come valoreLatLngo come oggetto Place. Se utilizzi un oggetto Place, puoi specificare un ID luogo, una stringa di query o una localitàLatLng. Puoi recuperare gli ID luogo dai servizi Geocoding, Place Search e Place Autocomplete nell'API Maps JavaScript. Per un esempio di utilizzo degli ID luogo di Place Autocomplete, consulta Place Autocomplete e Directions.destination(obbligatorio) specifica la località di arrivo per la quale calcolare le indicazioni stradali. Le opzioni sono le stesse del campoorigindescritto sopra.travelMode(obbligatorio) specifica la modalità di trasporto da utilizzare per il calcolo delle indicazioni stradali. I valori validi sono specificati in Modalità di viaggio di seguito.transitOptions(facoltativo) specifica i valori che si applicano solo alle richieste in cuitravelModeèTRANSIT. I valori validi sono descritti nella sezione Opzioni di transito di seguito.drivingOptions(facoltativo) specifica i valori che si applicano solo alle richieste in cuitravelModeèDRIVING. I valori validi sono descritti nella sezione Opzioni di guida di seguito.unitSystem(facoltativo) specifica il sistema di unità da utilizzare per la visualizzazione dei risultati. I valori validi sono specificati in Sistemi di unità di seguito.waypoints[](facoltativo) specifica un array diDirectionsWaypoint. I waypoint modificano un percorso indirizzandolo attraverso le località specificate. Un waypoint viene specificato come oggetto letterale con i campi mostrati di seguito:locationspecifica la posizione della tappa comeLatLng, come oggetto Place o comeStringche verrà geocodificato.stopoverè un valore booleano che indica che la tappa è una fermata lungo il percorso, il che ha l'effetto di dividere il percorso in due.
Per saperne di più sui waypoint, consulta la sezione Utilizzo dei waypoint nei percorsi di seguito.
optimizeWaypoints(facoltativo) specifica che il percorso che utilizza iwaypointsforniti può essere ottimizzato riorganizzando i waypoint in un ordine più efficiente. Setrue, il servizio Directions restituirà iwaypointsriordinati in un campowaypoint_order. Per ulteriori informazioni, consulta Utilizzo dei waypoint nei percorsi di seguito.provideRouteAlternatives(facoltativo) se impostato sutrue, specifica che il servizio Directions può fornire più di un percorso alternativo nella risposta. Tieni presente che fornire percorsi alternativi potrebbe aumentare il tempo di risposta del server. Questa opzione è disponibile solo per le richieste senza tappe intermedie.avoidFerries(facoltativo) se impostato sutrueindica che i percorsi calcolati devono evitare i traghetti, se possibile.avoidHighways(facoltativo): se impostato sutrue, indica che i percorsi calcolati devono evitare le autostrade principali, se possibile.avoidTolls(facoltativo) se impostato sutrueindica che i percorsi calcolati devono evitare le strade a pedaggio, se possibile.region(facoltativo) specifica il codice regione, indicato come valore di due caratteri ccTLD ("dominio di primo livello"). Per saperne di più, consulta la sezione Sottoporre a bias per regione di seguito.
Di seguito è riportato un esempio di 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 }
Modalità di viaggio
Quando calcoli le indicazioni stradali, devi specificare la modalità di trasporto da utilizzare. Al momento sono supportate le seguenti modalità di viaggio:
DRIVING(valore predefinito) indica le indicazioni stradali standard che utilizzano la rete stradale.BICYCLINGrichiede indicazioni stradali in bicicletta tramite piste ciclabili e strade preferite.TRANSITrichiede indicazioni stradali tramite percorsi di trasporto pubblico.WALKINGrichiede indicazioni a piedi tramite percorsi pedonali e marciapiedi.
Consulta i dettagli sulla copertura di Google Maps Platform per determinare in che misura un paese supporta le indicazioni stradali. Se richiedi indicazioni stradali per una regione in cui questo tipo di indicazioni non è disponibile, la risposta restituirà DirectionsStatus="ZERO_RESULTS".
Nota: le indicazioni a piedi potrebbero non includere percorsi pedonali chiari, pertanto restituiranno avvisi in DirectionsResult. Questi avvisi devono essere sempre visualizzati per l'utente. Se non utilizzi l'elemento DirectionsRenderer predefinito, è tua responsabilità assicurarti che gli avvisi vengano visualizzati.
Opzioni di trasporto pubblico
Le opzioni disponibili per una richiesta di indicazioni stradali variano a seconda della modalità di viaggio.
Quando richiedi indicazioni per il trasporto pubblico, le opzioni avoidHighways, avoidTolls, waypoints[] e optimizeWaypoints vengono ignorate. Puoi specificare
opzioni di percorso specifiche per il trasporto pubblico tramite l'oggetto letterale
TransitOptions.
Le indicazioni per il trasporto pubblico sono sensibili al fattore tempo. Le indicazioni stradali verranno restituite solo per orari futuri.
L'oggetto letterale TransitOptions contiene i seguenti campi:
{ arrivalTime: Date, departureTime: Date, modes[]: TransitMode, routingPreference: TransitRoutePreference }
Questi campi sono spiegati di seguito:
arrivalTime(facoltativo) specifica l'orario di arrivo desiderato come oggettoDate. Se viene specificata l'ora di arrivo, l'ora di partenza viene ignorata.departureTime(facoltativo) specifica l'orario di partenza desiderato come oggettoDate.departureTimeverrà ignorato se viene specificatoarrivalTime. Il valore predefinito è l'ora corrente se non viene specificato alcun valore perdepartureTimeoarrivalTime.modes[](facoltativo) è un array contenente uno o più oggetti letteraliTransitMode. Questo campo può essere incluso solo se la richiesta include una chiave API. OgniTransitModespecifica una modalità di trasporto preferita. Sono consentiti i seguenti valori:BUSindica che il percorso calcolato deve preferire il viaggio in autobus.RAILindica che il percorso calcolato deve preferire i viaggi in treno, tram, metropolitana leggera e metropolitana.SUBWAYindica che il percorso calcolato deve preferire gli spostamenti in metropolitana.TRAINindica che il percorso calcolato deve preferire il viaggio in treno.TRAMindica che il percorso calcolato deve preferire i viaggi in tram e metropolitana leggera.
routingPreference(facoltativo) specifica le preferenze per i percorsi con il trasporto pubblico. Utilizzando questa opzione, puoi influenzare le opzioni restituite, anziché accettare il percorso migliore predefinito scelto dall'API. Questo campo può essere specificato solo se la richiesta include una chiave API. Sono consentiti i seguenti valori:FEWER_TRANSFERSindica che il percorso calcolato deve preferire un numero limitato di cambi.LESS_WALKINGindica che il percorso calcolato deve preferire quantità limitate di tratti a piedi.
Di seguito è riportato un esempio di DirectionsRequest con il trasporto pubblico:
{ origin: 'Hoboken NJ', destination: 'Carroll Gardens, Brooklyn', travelMode: 'TRANSIT', transitOptions: { departureTime: new Date(1337675679473), modes: ['BUS'], routingPreference: 'FEWER_TRANSFERS' }, unitSystem: google.maps.UnitSystem.IMPERIAL }
Opzioni di guida
Puoi specificare le opzioni di routing per le indicazioni stradali tramite l'oggetto DrivingOptions.
L'oggetto DrivingOptions contiene i seguenti campi:
{ departureTime: Date, trafficModel: TrafficModel }
Questi campi sono spiegati di seguito:
departureTime(obbligatorio affinché l'oggetto letteraledrivingOptionssia valido) specifica l'orario di partenza desiderato come oggettoDate. Il valore deve essere impostato sull'ora corrente o su un'ora futura. Non può essere nel passato. (L'API converte tutte le date in UTC per garantire una gestione coerente tra i fusi orari.) Per i clienti del piano Premium di Google Maps Platform, se includidepartureTimenella richiesta, l'API restituisce il percorso migliore in base alle condizioni del traffico previste in quel momento e include il tempo previsto nel traffico (duration_in_traffic) nella risposta. Se non specifichi un orario di partenza (ovvero se la richiesta non includedrivingOptions), il percorso restituito è generalmente un buon percorso senza tenere conto delle condizioni del traffico.trafficModel(facoltativo) specifica le ipotesi da utilizzare per il calcolo del tempo nel traffico. Questa impostazione influisce sul valore restituito nel campoduration_in_trafficdella risposta, che contiene il tempo di percorrenza previsto nel traffico in base alle medie storiche. Il valore predefinito èbestguess. Sono consentiti i seguenti valori:bestguess(valore predefinito) indica che il valoreduration_in_trafficrestituito deve essere la migliore stima del tempo di percorrenza in base a ciò che è noto sulle condizioni del traffico storiche e in tempo reale. Il traffico in tempo reale diventa più importante quanto piùdepartureTimeè vicino al momento attuale.pessimisticindica che il valoreduration_in_trafficrestituito deve essere superiore al tempo di percorrenza effettivo nella maggior parte dei giorni, anche se in alcuni giorni con condizioni del traffico particolarmente negative questo valore potrebbe essere superato.optimisticindica che il valoreduration_in_trafficrestituito deve essere inferiore al tempo di percorrenza effettivo nella maggior parte dei giorni, anche se in alcuni giorni con condizioni del traffico particolarmente favorevoli il tempo di percorrenza potrebbe essere inferiore a questo valore.
Di seguito è riportato un esempio di DirectionsRequest per le indicazioni stradali:
{ 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' } }
Sistemi di unità di misura
Per impostazione predefinita, le indicazioni stradali vengono calcolate e visualizzate utilizzando il sistema di unità di misura del paese o della regione di partenza.
(Nota: le origini espresse utilizzando le coordinate di latitudine/longitudine anziché gli indirizzi utilizzano sempre le unità di misura del sistema metrico decimale.) Ad esempio, un percorso da "Chicago, IL" a "Toronto, ONT" mostrerà i risultati in miglia, mentre il percorso inverso mostrerà i risultati in chilometri. Puoi
eseguire l'override di questo sistema di unità impostandone uno in modo esplicito all'interno della
richiesta utilizzando uno dei seguenti valori UnitSystem:
UnitSystem.METRICspecifica l'utilizzo del sistema metrico. Le distanze vengono mostrate in chilometri.UnitSystem.IMPERIALspecifica l'utilizzo del sistema imperiale (inglese). Le distanze vengono mostrate in miglia.
Nota: questa impostazione del sistema di unità influisce solo sul testo visualizzato dall'utente. Il risultato delle indicazioni stradali contiene anche i valori della distanza, non mostrati all'utente, che sono sempre espressi in metri.
Impostazione della regione per le indicazioni stradali
Il servizio di indicazioni stradali dell'API di Google Maps restituisce risultati relativi agli indirizzi influenzati dal dominio (regione o paese) da cui hai caricato il bootstrap JavaScript. (Poiché la maggior parte degli utenti carica https://maps.googleapis.com/, viene impostato un dominio implicito per gli Stati Uniti). Se carichi il bootstrap da un altro dominio supportato, i risultati saranno influenzati da quel dominio. Ad esempio, le ricerche di "San Francisco" potrebbero restituire risultati diversi dalle applicazioni che caricano https://maps.googleapis.com/ (Stati Uniti) rispetto a quelle che caricano http://maps.google.es/ (Spagna).
Puoi anche impostare il servizio Directions in modo che restituisca risultati influenzati da una determinata regione utilizzando il parametro region. Questo parametro accetta un codice regione, specificato come sottotag di regione Unicode di due caratteri (non numerici). Nella maggior parte dei casi, questi tag vengono mappati direttamente ai valori di due caratteri del ccTLD ("dominio di primo livello"), ad esempio "uk" in "co.uk". In alcuni casi, il tag region supporta anche i codici ISO-3166-1, che a volte differiscono dai valori ccTLD (ad esempio "GB" per "Gran Bretagna").
Quando utilizzi il parametro region:
- Specifica un solo paese o una sola regione. I valori multipli vengono ignorati e potrebbero comportare una richiesta non riuscita.
- Utilizza solo sottotag di regione di due caratteri (formato Unicode CLDR). Tutti gli altri input genereranno errori.
La preferenza per una regione è supportata solo per i paesi e le regioni che supportano le indicazioni stradali. Consulta i dettagli sulla copertura di Google Maps Platform per visualizzare la copertura internazionale per l'API Directions (Legacy).
Rendering delle indicazioni stradali
Per avviare una richiesta di indicazioni stradali per DirectionsService con il metodo route(), è necessario passare un callback che viene eseguito al completamento della richiesta di servizio. Questo callback restituirà un
DirectionsResult e un codice
DirectionsStatus nella risposta.
Stato della query di indicazioni stradali
DirectionsStatus può restituire i seguenti valori:
OKindica che la risposta contiene unDirectionsResultvalido.NOT_FOUNDindica che non è stato possibile geocodificare almeno una delle località specificate nell'origine, nella destinazione o nei waypoint della richiesta.ZERO_RESULTSindica che non è stato possibile trovare un percorso tra l'origine e la destinazione.MAX_WAYPOINTS_EXCEEDEDindica che sono stati forniti troppi campiDirectionsWaypointinDirectionsRequest. Consulta la sezione di seguito sui limiti per i waypoint.MAX_ROUTE_LENGTH_EXCEEDEDindica che il percorso richiesto è troppo lungo e non può essere elaborato. Questo errore si verifica quando vengono restituite indicazioni più complesse. Prova a ridurre il numero di waypoint, svolte o istruzioni.INVALID_REQUESTindica che il valoreDirectionsRequestfornito non è valido. Le cause più comuni di questo codice di errore sono le richieste prive di origine o destinazione oppure una richiesta di trasporto pubblico che include waypoint.OVER_QUERY_LIMITindica che la pagina web ha inviato troppe richieste nel periodo di tempo consentito.REQUEST_DENIEDindica che la pagina web non è autorizzata a utilizzare il servizio di indicazioni stradali.UNKNOWN_ERRORindica che non è stato possibile elaborare una richiesta di indicazioni stradali a causa di un errore del server. La richiesta potrebbe andare a buon fine se riprovi.
Prima di elaborare il risultato, devi assicurarti che la query sulle indicazioni stradali abbia restituito risultati validi controllando questo valore.
Visualizzazione di DirectionsResult
DirectionsResult contiene il risultato della query sulle indicazioni stradali, che puoi gestire autonomamente o passare a un oggetto DirectionsRenderer, che può gestire automaticamente la visualizzazione del risultato su una mappa.
Per visualizzare un DirectionsResult utilizzando un DirectionsRenderer, devi:
- Crea un oggetto
DirectionsRenderer. - Chiama
setMap()sul renderer per associarlo alla mappa passata. - Chiama
setDirections()sul renderer, passandogliDirectionsResultcome indicato sopra. Poiché il renderer è unMVCObject, rileva automaticamente eventuali modifiche alle sue proprietà e aggiorna la mappa quando le indicazioni stradali associate sono cambiate.
L'esempio seguente calcola le indicazioni stradali tra due località sulla Route 66, dove l'origine e la destinazione sono impostate dai valori "start" e "end" specificati negli elenchi a discesa. DirectionsRenderer gestisce la visualizzazione della polilinea tra le località indicate e il posizionamento degli indicatori in corrispondenza di origine, destinazione ed eventuali waypoint, se applicabile.
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); } }); }
Nel corpo 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'esempio seguente mostra le indicazioni stradali utilizzando diverse modalità di viaggio tra Haight-Ashbury e Ocean Beach a San Francisco, in California:
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); } }); }
Nel corpo 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 oggetto DirectionsRenderer non solo gestisce la visualizzazione della polilinea e di eventuali indicatori associati, ma può anche gestire la visualizzazione testuale delle indicazioni stradali come una serie di passaggi. Per farlo, chiama setPanel() sul tuo DirectionsRenderer, passandogli il <div> in cui visualizzare queste informazioni.
In questo modo, ti assicuri anche di mostrare le informazioni sul copyright appropriate e gli eventuali avvisi che potrebbero essere associati al risultato.
Le indicazioni testuali verranno fornite utilizzando l'impostazione della lingua preferita del browser o la lingua specificata durante il caricamento dell'API JavaScript utilizzando il parametro language. Per saperne di più, consulta
Localizzazione. Nel caso delle indicazioni per il trasporto pubblico, l'ora verrà visualizzata nel fuso orario della fermata del trasporto pubblico.
L'esempio seguente è identico a quello mostrato sopra, ma include un riquadro <div> in cui visualizzare le indicazioni stradali:
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); } }); }
Nel corpo HTML:
<div id="map" style="float:left;width:70%;height:100%"></div> <div id="directionsPanel" style="float:right;width:30%;height:100%"></div>
L'oggetto DirectionsResult
Quando invii una richiesta di indicazioni stradali all'DirectionsService, ricevi una risposta composta da un codice di stato e un risultato, ovvero un oggetto DirectionsResult. DirectionsResult è un oggetto letterale con i seguenti campi:
geocoded_waypoints[]contiene un array di oggettiDirectionsGeocodedWaypoint, ognuno dei quali contiene dettagli sulla geocodifica di origine, destinazione e tappe.routes[]contiene un array di oggettiDirectionsRoute. Ogni percorso indica un modo per raggiungere la destinazione dal luogo di partenza fornito inDirectionsRequest. In genere, per ogni richiesta viene restituito un solo percorso, a meno che il campoprovideRouteAlternativesdella richiesta non sia impostato sutrue, nel qual caso potrebbero essere restituiti più percorsi.
Nota: la proprietà via_waypoint è deprecata
nei percorsi alternativi. La versione 3.27 è l'ultima versione dell'API che aggiunge waypoint aggiuntivi nei percorsi alternativi. Per le versioni 3.28 e successive dell'API, puoi continuare a implementare le indicazioni stradali trascinabili utilizzando il servizio Directions disattivando il trascinamento dei percorsi alternativi.
Solo il percorso principale deve essere trascinabile. Gli utenti possono trascinare il percorso principale finché non corrisponde a un percorso alternativo.
Punti di passaggio geocodificati delle indicazioni stradali
Un DirectionsGeocodedWaypoint contiene i dettagli sulla geocodifica di origine, destinazione e tappe.
DirectionsGeocodedWaypoint è un oggetto letterale con i seguenti campi:
geocoder_statusindica il codice di stato risultante dall'operazione di geocodifica. Questo campo può contenere i seguenti valori."OK"indica che non si sono verificati errori; l'indirizzo è stato analizzato correttamente ed è stato restituito almeno un codice geografico."ZERO_RESULTS"indica che la geocodifica è andata a buon fine, ma non ha restituito risultati. Questo può accadere se al geocodificatore è stato passato unaddressinesistente.
-
partial_matchindica che il geocodificatore non ha restituito una corrispondenza esatta per la richiesta originale, anche se è stato in grado di trovare una corrispondenza per parte dell'indirizzo richiesto. Ti consigliamo di esaminare la richiesta originale per verificare la presenza di errori ortografici e/o di un indirizzo incompleto.Le corrispondenze parziali si verificano più spesso per indirizzi che non esistono all'interno della località che passi nella richiesta. Le corrispondenze parziali possono essere restituite anche quando una richiesta corrisponde a due o più località nella stessa località. Ad esempio, "Hillpar St, Bristol, UK" restituirà una corrispondenza parziale sia per Henry Street sia per Henrietta Street. Tieni presente che se una richiesta include un componente dell'indirizzo con errori ortografici, il servizio di geocodifica potrebbe suggerire un indirizzo alternativo. I suggerimenti attivati in questo modo verranno contrassegnati anche come corrispondenza parziale.
place_idè un identificatore univoco di un luogo, che può essere utilizzato con altre API di Google. Ad esempio, puoi utilizzareplace_idcon la libreria dell'API Google Places per ottenere i dettagli di un'attività locale, come numero di telefono, orario di apertura, recensioni degli utenti e altro ancora. Consulta la panoramica degli ID luogo.types[]è un array che indica il tipo del risultato restituito. Questo array contiene un insieme di zero o più tag che identificano il tipo di elemento restituito nel risultato. Ad esempio, un geocodice di "Chicago" restituisce "locality", che indica che "Chicago" è una città, e restituisce anche "political", che indica che si tratta di un'entità politica.
Percorsi con indicazioni stradali
Nota: l'oggetto DirectionsTrip legacy è stato rinominato in DirectionsRoute. Tieni presente che un percorso ora si riferisce all'intero tragitto dall'inizio alla fine, anziché semplicemente a una tappa di un percorso principale.
Un DirectionsRoute contiene un singolo risultato dall'origine e dalla destinazione specificate. Questo percorso può essere composto da una o più tappe (di tipo DirectionsLeg) a seconda che siano stati specificati o meno dei waypoint. Inoltre, il percorso contiene anche informazioni sul copyright e sugli avvisi che devono essere mostrate all'utente oltre alle informazioni sul percorso.
DirectionsRoute è un oggetto letterale con i seguenti campi:
legs[]contiene un array di oggettiDirectionsLeg, ognuno dei quali contiene informazioni su una tappa del percorso, da due località all'interno del percorso specificato. Verrà visualizzata una tratta separata per ogni waypoint o destinazione specificati. Un percorso senza tappe intermedie conterrà esattamente un elementoDirectionsLeg. Ogni tratto è costituito da una serie di elementiDirectionStep.waypoint_ordercontiene un array che indica l'ordine di eventuali waypoint nel percorso calcolato. Questo array potrebbe contenere un ordine modificato seDirectionsRequestè stato passatooptimizeWaypoints: true.overview_pathcontiene un array diLatLngche rappresentano un percorso approssimativo (smussato) delle indicazioni stradali risultanti.overview_polylinecontiene un singolo oggettopointsche contiene una rappresentazione della polilinea codificata del percorso. Questa polilinea è un percorso approssimativo (smussato) delle indicazioni stradali risultanti.boundscontiene unLatLngBoundsche indica i limiti della polilinea lungo questo percorso.copyrightscontiene il testo del copyright da visualizzare per questo percorso.warnings[]contiene un array di avvisi da mostrare quando vengono visualizzate queste indicazioni stradali. Se non utilizzi l'oggettoDirectionsRendererfornito, devi gestire e visualizzare questi avvisi autonomamente.farecontiene la tariffa totale (ovvero i costi totali dei biglietti) per questo percorso. Questa proprietà viene restituita solo per le richieste di trasporto pubblico e solo per i percorsi per i quali sono disponibili informazioni sulle tariffe per tutte le tratte del trasporto pubblico. Le informazioni includono:currency: un codice valuta ISO 4217 che indica la valuta in cui è espresso l'importo.value: l'importo totale della tariffa, nella valuta specificata sopra.
Tratte delle indicazioni stradali
Nota: l'oggetto DirectionsRoute legacy è stato rinominato in DirectionsLeg.
Un DirectionsLeg definisce una singola tappa di un percorso dal luogo di partenza alla destinazione nel percorso calcolato.
Per i percorsi che non contengono tappe, il percorso sarà costituito da un'unica "tratta", ma per i percorsi che definiscono una o più tappe, il percorso sarà costituito da una o più tratte, corrispondenti alle tratte specifiche del percorso.
DirectionsLeg è un oggetto letterale con i seguenti campi:
steps[]contiene un array di oggettiDirectionsStepche indicano informazioni su ogni singolo passaggio della tappa del percorso.distanceindica la distanza totale coperta da questa tappa, come oggettoDistancenel seguente formato:valueindica la distanza in metritextcontiene una rappresentazione di stringa della distanza, che per impostazione predefinita viene visualizzata nelle unità utilizzate nell'origine. Ad esempio, le miglia verranno utilizzate per qualsiasi origine negli Stati Uniti. Puoi eseguire l'override di questo sistema di unità impostando in modo specifico un'unitàUnitSystemnella query originale. Tieni presente che, indipendentemente dal sistema di unità di misura utilizzato, il campodistance.valuecontiene sempre un valore espresso in metri.
Questi campi potrebbero non essere definiti se la distanza è sconosciuta.
durationindica la durata totale di questa tappa, come oggettoDurationnel seguente formato:valueindica la durata in secondi.textcontiene una rappresentazione di stringa della durata.
Questi campi potrebbero non essere definiti se la durata non è nota.
duration_in_trafficindica la durata totale di questa tappa, tenendo conto delle condizioni del traffico attuali.duration_in_trafficviene restituito solo se tutte le seguenti condizioni sono vere:- La richiesta non include waypoint di sosta. In altre parole, non include i waypoint in cui
stopoverètrue. - La richiesta riguarda specificamente le indicazioni stradali: il parametro
modeè impostato sudriving. - Il valore
departureTimeè incluso nel campodrivingOptionsdella richiesta. - Le condizioni del traffico sono disponibili per il percorso richiesto.
duration_in_trafficcontiene i seguenti campi:valueindica la durata in secondi.textcontiene una rappresentazione leggibile della durata.
- La richiesta non include waypoint di sosta. In altre parole, non include i waypoint in cui
arrival_timecontiene l'orario di arrivo stimato per questa tappa. Questa proprietà viene restituita solo per le indicazioni per il trasporto pubblico. Il risultato viene restituito come oggettoTimecon tre proprietà:valuel'ora specificata come oggetto JavaScriptDate.textl'ora specificata come stringa. L'orario viene visualizzato nel fuso orario della fermata dei mezzi pubblici.time_zonecontiene il fuso orario di questa stazione. Il valore è il nome del fuso orario definito nel database dei fusi orari IANA, ad esempio "America/New_York".
departure_timecontiene l'orario di partenza stimato per questa tappa, specificato come oggettoTime.departure_timeè disponibile solo per le indicazioni per il trasporto pubblico.start_locationcontiene ilLatLngdell'origine di questa tappa. Poiché il servizio web Directions calcola le indicazioni stradali tra le località utilizzando l'opzione di trasporto più vicina (di solito una strada) nei punti di partenza e di arrivo,start_locationpotrebbe essere diverso dall'origine fornita di questa tappa se, ad esempio, non è presente una strada vicino all'origine.end_locationcontiene ilLatLngdella destinazione di questa tappa. Poiché l'DirectionsServicecalcola le indicazioni stradali tra le località utilizzando l'opzione di trasporto più vicina (di solito una strada) nei punti di partenza e di arrivo,end_locationpotrebbe essere diverso dalla destinazione fornita per questa tappa se, ad esempio, non c'è una strada vicino alla destinazione.start_addresscontiene l'indirizzo leggibile (in genere una via) dell'inizio di questa tappa.
Questi contenuti devono essere letti così come sono. Non analizzare l'indirizzo formattato in modo programmatico.end_addresscontiene l'indirizzo leggibile (in genere una via) della fine di questa tratta.
Questi contenuti devono essere letti così come sono. Non analizzare l'indirizzo formattato in modo programmatico.
Passaggi delle indicazioni stradali
Un DirectionsStep è l'unità più atomica del percorso di una direzione e contiene un singolo passaggio che descrive un'istruzione specifica e singola sul percorso. Ad esempio "Svolta a sinistra in W. 4th St." Il passaggio non solo descrive l'istruzione, ma contiene anche informazioni sulla distanza e sulla durata relative alla relazione tra questo passaggio e quello successivo.
Ad esempio, un passaggio indicato come "Immettiti sulla I-80 West" può contenere una durata di "37 miglia" e "40 minuti", a indicare che il passaggio successivo si trova a 37 miglia/40 minuti da questo passaggio.
Quando utilizzi il servizio Directions per cercare indicazioni per il trasporto pubblico, l'array steps includerà informazioni specifiche sul trasporto pubblico aggiuntive sotto forma di un oggetto transit. Se le indicazioni includono più modalità di trasporto, verranno fornite indicazioni dettagliate per i passaggi a piedi o in auto in un array steps[].
Ad esempio, un passaggio a piedi includerà le indicazioni stradali dalle località di partenza e di arrivo: "Cammina fino a Innes Ave & Fitch St". Questo passaggio includerà
indicazioni a piedi dettagliate per il percorso nell'array steps[], ad esempio: "Procedi in direzione nord-ovest", "Svolta a sinistra su Arelious Walker" e
"Svolta a sinistra su Innes Ave".
DirectionsStep è un oggetto letterale con i seguenti campi:
instructionscontiene le istruzioni per questo passaggio all'interno di una stringa di testo.distancecontiene la distanza coperta da questo passaggio fino al passaggio successivo, sotto forma di oggettoDistance. (Consulta la descrizione inDirectionsLegsopra). Questo campo potrebbe non essere definito se la distanza è sconosciuta.durationcontiene una stima del tempo necessario per eseguire il passaggio, fino al passaggio successivo, sotto forma di oggettoDuration. (Consulta la descrizione inDirectionsLegsopra). Questo campo potrebbe non essere definito se la durata non è nota.start_locationcontiene laLatLnggeocodificata del punto di partenza di questo passaggio.end_locationcontiene laLatLngdel punto finale di questo passaggio.polylinecontiene un singolo oggettopointsche contiene una rappresentazione della polyline codificata del passaggio. Questa polilinea è un percorso approssimativo (smussato) del passaggio.steps[]un oggetto letteraleDirectionsStepche contiene indicazioni stradali dettagliate per i passaggi a piedi o in auto nelle indicazioni per il trasporto pubblico. I passaggi secondari sono disponibili solo per le indicazioni per il trasporto pubblico.travel_modecontiene ilTravelModeutilizzato in questo passaggio. Le indicazioni per il trasporto pubblico possono includere una combinazione di indicazioni a piedi e per il trasporto pubblico.pathcontiene un array diLatLngsche descrivono il corso di questo passaggio.transitcontiene informazioni specifiche sul trasporto pubblico, come gli orari di arrivo e partenza e il nome della linea di trasporto pubblico.
Informazioni specifiche sul trasporto pubblico
Le indicazioni per il trasporto pubblico restituiscono informazioni aggiuntive che non sono pertinenti per altre modalità di trasporto. Queste proprietà aggiuntive vengono esposte tramite l'oggetto TransitDetails, restituito come proprietà di DirectionsStep. Dall'oggetto TransitDetails puoi accedere a informazioni aggiuntive per gli oggetti TransitStop, TransitLine, TransitAgency e VehicleType, come descritto di seguito.
Dettagli sul trasporto pubblico
L'oggetto TransitDetails espone le seguenti proprietà:
arrival_stopcontiene un oggettoTransitStopche rappresenta la stazione/fermata di arrivo con le seguenti proprietà:nameil nome della stazione/fermata di trasporto pubblico. Ad esempio: "Piazza Barberini".locationla posizione della stazione/fermata di transito, rappresentata comeLatLng.
departure_stopcontiene un oggettoTransitStopche rappresenta la stazione/fermata di partenza.arrival_timecontiene l'ora di arrivo, specificata come oggettoTimecon tre proprietà:valuel'ora specificata come oggetto JavaScriptDate.textl'ora specificata come stringa. L'orario viene visualizzato nel fuso orario della fermata dei mezzi pubblici.time_zonecontiene il fuso orario di questa stazione. Il valore è il nome del fuso orario definito nel database dei fusi orari IANA, ad esempio "America/New_York".
departure_timecontiene l'ora di partenza, specificata come oggettoTime.headsignspecifica la direzione di viaggio su questa linea, come indicato sul veicolo o alla fermata di partenza. Spesso si tratta della stazione capolinea.headwayse disponibile, specifica il numero previsto di secondi tra le partenze dalla stessa fermata in questo momento. Ad esempio, con un valoreheadwaydi 600, se perdi l'autobus dovresti aspettare dieci minuti.linecontiene un oggetto letteraleTransitLineche contiene informazioni sulla linea di trasporto pubblico utilizzata in questo passaggio.TransitLinefornisce il nome e l'operatore della linea, insieme ad altre proprietà descritte nella documentazione di riferimento diTransitLine.num_stopscontiene il numero di fermate in questo passaggio. Include la fermata di arrivo, ma non quella di partenza. Ad esempio, se le indicazioni stradali prevedono la partenza dalla fermata A, il passaggio per le fermate B e C e l'arrivo alla fermata D,num_stopsrestituirà 3.
Linea di trasporto pubblico
L'oggetto TransitLine espone le seguenti proprietà:
namecontiene il nome completo di questa linea di trasporto pubblico, ad esempio "7 Avenue Express" o "14th St Crosstown".short_namecontiene il nome breve di questa linea di trasporto pubblico. In genere si tratta di un numero di linea, ad esempio "2" o "M14".agenciesè un array contenente un singolo oggettoTransitAgency. L'oggettoTransitAgencyfornisce informazioni sull'operatore di questa linea, incluse le seguenti proprietà:namecontiene il nome dell'azienda di trasporto pubblico.phonecontiene il numero di telefono dell'azienda di trasporto pubblico.urlcontiene l'URL dell'azienda di trasporto pubblico.
Nota: se esegui il rendering delle indicazioni per il trasporto pubblico manualmente anziché utilizzare l'oggetto
DirectionsRenderer, devi mostrare i nomi e gli URL delle aziende di trasporto pubblico che forniscono i risultati del percorso.urlcontiene un URL per questa linea di trasporto pubblico fornito dall'azienda di trasporto pubblico.iconcontiene un URL per l'icona associata a questa riga. La maggior parte delle città utilizzerà icone generiche che variano in base al tipo di veicolo. Alcune linee di trasporto pubblico, come la metropolitana di New York, hanno icone specifiche per quella linea.colorcontiene il colore di uso comune nella segnaletica per questo trasporto pubblico. Il colore verrà specificato come stringa esadecimale, ad esempio #FF0033.text_colorcontiene il colore del testo di uso comune per la segnaletica di questa linea. Il colore verrà specificato come stringa esadecimale.vehiclecontiene un oggettoVehicleche include le seguenti proprietà:namecontiene il nome del veicolo su questa linea. Ad esempio: "Subway."typecontiene il tipo di veicolo utilizzato su questa linea. Consulta la documentazione relativa al tipo di veicolo per un elenco completo dei valori supportati.iconcontiene un URL per l'icona comunemente associata a questo tipo di veicolo.local_iconcontiene l'URL dell'icona associata a questo tipo di veicolo, in base alla segnaletica del trasporto locale.
Tipo di veicolo
L'oggetto VehicleType espone le seguenti proprietà:
| Valore | Definizione |
|---|---|
VehicleType.RAIL |
Treno. |
VehicleType.METRO_RAIL |
Metropolitana leggera. |
VehicleType.SUBWAY |
Metropolitana leggera sotterranea. |
VehicleType.TRAM |
Metropolitana leggera in superficie. |
VehicleType.MONORAIL |
Monorotaia. |
VehicleType.HEAVY_RAIL |
Ferrovia pesante. |
VehicleType.COMMUTER_TRAIN |
Treno pendolare. |
VehicleType.HIGH_SPEED_TRAIN |
Treno ad alta velocità. |
VehicleType.BUS |
Bus. |
VehicleType.INTERCITY_BUS |
Autobus interurbano. |
VehicleType.TROLLEYBUS |
Filobus. |
VehicleType.SHARE_TAXI |
Il taxi condiviso è un tipo di autobus con la possibilità di far scendere e salire i passeggeri in qualsiasi punto del percorso. |
VehicleType.FERRY |
Traghetto. |
VehicleType.CABLE_CAR |
Un veicolo che funziona su un cavo, di solito a terra. Le funivie possono essere del tipo VehicleType.GONDOLA_LIFT. |
VehicleType.GONDOLA_LIFT |
Una funivia. |
VehicleType.FUNICULAR |
Un veicolo che viene trainato su un pendio ripido da un cavo. Una funicolare è in genere costituita da due carrozze, ognuna delle quali funge da contrappeso per l'altra. |
VehicleType.OTHER |
Tutti gli altri veicoli restituiranno questo tipo. |
Ispezione di DirectionsResults
I componenti DirectionsResults (DirectionsRoute, DirectionsLeg, DirectionsStep e TransitDetails) possono essere ispezionati e utilizzati durante l'analisi di qualsiasi risposta alle indicazioni stradali.
Importante: se esegui il rendering delle indicazioni per il trasporto pubblico manualmente anziché utilizzare l'oggetto DirectionsRenderer, devi mostrare i nomi e gli URL delle aziende di trasporto pubblico che forniscono i risultati del percorso.
L'esempio seguente mostra le indicazioni a piedi per raggiungere alcune attrazioni turistiche di New York. Esaminiamo il campo DirectionsStep del percorso per aggiungere indicatori per ogni passaggio e alleghiamo le informazioni a un InfoWindow con il testo di istruzioni per quel passaggio.
Nota: poiché stiamo calcolando le indicazioni a piedi, mostriamo anche eventuali avvisi all'utente in un riquadro <div> separato.
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); }); }
Nel corpo 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>Utilizzo dei waypoint in Routes
Come indicato in DirectionsRequest, puoi anche specificare i waypoint (di tipo DirectionsWaypoint) quando calcoli i percorsi utilizzando il servizio Directions per indicazioni stradali a piedi, in bicicletta o in auto. I waypoint non sono disponibili per le indicazioni per il trasporto pubblico.
I waypoint ti consentono di calcolare i percorsi attraverso località aggiuntive, nel qual caso il percorso restituito passa attraverso i waypoint specificati.
Un waypoint è costituito dai seguenti campi:
location(obbligatorio) specifica l'indirizzo del waypoint.stopover(facoltativo) indica se questo waypoint è una fermata effettiva lungo il percorso (true) o solo una preferenza per l'itinerario attraverso la località indicata (false). Le tappe sonotrueper impostazione predefinita.
Per impostazione predefinita, il servizio Directions calcola un percorso attraverso i waypoint forniti nell'ordine indicato. Facoltativamente, puoi passare optimizeWaypoints: true all'interno di
DirectionsRequest per consentire al servizio Directions di ottimizzare il percorso fornito riorganizzando i waypoint in un ordine più efficiente. Questa ottimizzazione è un'applicazione del
problema del commesso viaggiatore. Il tempo di percorrenza è il fattore principale che viene ottimizzato, ma per decidere quale percorso è più efficiente possono essere presi in considerazione altri fattori, come la distanza, il numero di svolte e molti altri. Tutti i waypoint devono essere tappe intermedie affinché il servizio Directions possa ottimizzare il percorso.
Se indichi al servizio Directions di ottimizzare l'ordine dei waypoint, l'ordine verrà restituito nel campo waypoint_order all'interno dell'oggetto DirectionsResult.
L'esempio seguente calcola i percorsi tra paesi diversi negli Stati Uniti utilizzando una serie di punti di partenza, punti di arrivo e waypoint. Per selezionare più waypoint, premi Ctrl-clic quando selezioni gli elementi nell'elenco.
Tieni presente che esaminiamo routes.start_address
e routes.end_address per ottenere
il testo per il punto di partenza e di arrivo di ogni percorso.
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;
Limiti e restrizioni per i waypoint
Si applicano i seguenti limiti di utilizzo e limitazioni:
- Il numero massimo di tappe consentite quando utilizzi il servizio Directions nell'API Maps JavaScript è 25, più l'origine e la destinazione. I limiti sono gli stessi per il servizio web API Directions (Legacy).
- Per il servizio web API Directions (legacy), i clienti possono utilizzare 25 waypoint, oltre all'origine e alla destinazione.
- I clienti del piano Premium di Google Maps Platform possono utilizzare 25 waypoint, oltre all'origine e alla destinazione.
- I waypoint non sono supportati per le indicazioni per il trasporto pubblico.
Indicazioni trascinabili
Gli utenti possono modificare le indicazioni stradali in bicicletta, a piedi o in auto visualizzate utilizzando un DirectionsRenderer in modo dinamico se sono trascinabili, consentendo a un utente di selezionare e modificare i percorsi facendo clic e trascinando i percorsi risultanti sulla mappa.
Puoi indicare se la visualizzazione di un renderer consente le indicazioni stradali trascinabili impostando la relativa proprietà draggable su true. Le indicazioni per il trasporto pubblico non possono essere trascinate.
Quando le indicazioni stradali sono trascinabili, un utente può selezionare qualsiasi punto sul percorso (o waypoint) del risultato visualizzato e spostare il componente indicato in una nuova posizione. Il DirectionsRenderer
si aggiornerà dinamicamente per mostrare il percorso modificato. Al rilascio, alla mappa verrà aggiunto un waypoint di transizione (indicato da un piccolo indicatore bianco). Se selezioni e sposti un segmento di percorso,
la tappa corrispondente verrà modificata, mentre se selezioni e sposti
un indicatore di waypoint (inclusi i punti di partenza e di arrivo), verranno modificate
le tappe del percorso che passano attraverso quel waypoint.
Poiché le indicazioni stradali trascinabili vengono modificate e visualizzate lato client,
potresti voler monitorare e gestire l'evento directions_changed
su DirectionsRenderer per ricevere una notifica quando l'utente
ha modificato le indicazioni stradali visualizzate.
Il seguente codice mostra un viaggio da Perth, sulla costa occidentale dell'Australia, a Sydney, sulla costa orientale. Il codice monitora l'evento directions_changed per aggiornare la distanza totale di tutte le tappe del percorso.
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;