Panoramica
Il servizio Distance Matrix di Google calcola la distanza di viaggio e la durata del percorso tra più origini e destinazioni utilizzando una determinata modalità di viaggio.
Questo servizio non restituisce informazioni dettagliate sul percorso. Le informazioni sul percorso, incluse le polilinee e le indicazioni stradali testuali, possono essere ottenute passando l'origine e la destinazione singole desiderate al servizio Directions.
Per iniziare
Prima di utilizzare il servizio Distance Matrix nell'API Maps JavaScript, assicurati che l'API Distance Matrix (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 Distance Matrix (legacy).
- Se vedi l'API nell'elenco, non devi fare altro. Se l'API non è elencata, abilitala all'indirizzo https://console.cloud.google.com/apis/library/distance-matrix-backend.googleapis.com
Prezzi e norme
Prezzi
Per informazioni sui prezzi e sulle norme di utilizzo del servizio Distance Matrix di JavaScript, consulta Utilizzo e fatturazione per l'API Distance Matrix (legacy).
Nota: ogni query inviata al servizio Distance Matrix è limitata dal numero di elementi consentiti, dove il numero di origini moltiplicato per il numero di destinazioni definisce il numero di elementi.
Norme
L'utilizzo del servizio Distance Matrix deve essere conforme alle policy descritte per l'API Distance Matrix (legacy).
Richieste Distance Matrix
L'accesso al servizio Distance Matrix è asincrono, poiché l'API 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 per elaborare i risultati.
Puoi accedere al servizio Distance Matrix all'interno del tuo codice tramite l'oggetto costruttore google.maps.DistanceMatrixService.
Il metodo DistanceMatrixService.getDistanceMatrix() avvia una richiesta al servizio Distance Matrix, passando un oggetto letterale DistanceMatrixRequest contenente le origini, le destinazioni e la modalità di viaggio, nonché un metodo di callback da eseguire alla ricezione della risposta.
var origin1 = new google.maps.LatLng(55.930385, -3.118425); var origin2 = 'Greenwich, England'; var destinationA = 'Stockholm, Sweden'; var destinationB = new google.maps.LatLng(50.087692, 14.421150); var service = new google.maps.DistanceMatrixService(); service.getDistanceMatrix( { origins: [origin1, origin2], destinations: [destinationA, destinationB], travelMode: 'DRIVING', transitOptions: TransitOptions, drivingOptions: DrivingOptions, unitSystem: UnitSystem, avoidHighways: Boolean, avoidTolls: Boolean, }, callback); function callback(response, status) { // See Parsing the Results for // the basics of a callback function. }
DistanceMatrixRequest contiene i seguenti campi:
origins(obbligatorio): un array contenente una o più stringhe di indirizzo, oggettigoogle.maps.LatLngo oggetti Place da cui calcolare la distanza e il tempo.destinations(obbligatorio): un array contenente una o più stringhe di indirizzo, oggettigoogle.maps.LatLngo oggetti Place per i quali calcolare la distanza e il tempo.travelMode(facoltativo): la modalità di trasporto da utilizzare per il calcolo delle indicazioni stradali. Consulta la sezione sulle modalità di viaggio.transitOptions(facoltativo) — Opzioni che si applicano solo alle richieste in cuitravelModeèTRANSIT. I valori validi sono descritti nella sezione sulle opzioni di transito.drivingOptions(facoltativo) specifica i valori che si applicano solo alle richieste in cuitravelModeèDRIVING. I valori validi sono descritti nella sezione Opzioni di guida.unitSystem(facoltativo): il sistema di unità di misura da utilizzare per visualizzare la distanza. I valori accettati sono:google.maps.UnitSystem.METRIC(valore predefinito)google.maps.UnitSystem.IMPERIAL
avoidHighways(facoltativo): setrue, i percorsi tra origini e destinazioni verranno calcolati in modo da evitare le autostrade, se possibile.avoidTolls(facoltativo) — Setrue, le indicazioni stradali tra i punti verranno calcolate utilizzando percorsi senza pedaggio, ove possibile.
Modalità di viaggio
Quando calcoli tempi e distanze, puoi specificare la modalità di trasporto da utilizzare. Al momento sono supportate le seguenti modalità di viaggio:
BICYCLINGrichiede indicazioni in bicicletta tramite piste ciclabili e strade preferite (attualmente disponibile solo negli Stati Uniti e in alcune città canadesi).DRIVING(valore predefinito) indica le indicazioni stradali standard che utilizzano la rete stradale.TRANSITrichiede indicazioni stradali tramite percorsi di trasporto pubblico. Questa opzione può essere specificata solo se la richiesta include una chiave API. Consulta la sezione sulle opzioni di trasporto pubblico per le opzioni disponibili in questo tipo di richiesta.WALKINGrichiede indicazioni a piedi tramite percorsi pedonali e marciapiedi (se disponibili).
Opzioni di trasporto pubblico
Il servizio di transito è attualmente "sperimentale". Durante questa fase, implementeremo limitazioni di frequenza per prevenire l'abuso delle API. In futuro, applicheremo un limite al numero totale di query per caricamento della mappa in base all'utilizzo corretto dell'API.
Le opzioni disponibili per una richiesta di Distance Matrix variano a seconda della modalità di viaggio.
Nelle richieste di trasporto pubblico, le opzioni avoidHighways e avoidTolls vengono ignorate. Puoi specificare
opzioni di routing specifiche per il trasporto pubblico tramite
l'oggetto letterale
TransitOptions.
Le richieste di transito sono sensibili al fattore tempo. I calcoli verranno restituiti solo per i periodi futuri.
L'oggetto letterale TransitOptions contiene i seguenti campi:
{ arrivalTime: Date, departureTime: Date, modes: [transitMode1, transitMode2] 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.
Opzioni di guida
Utilizza l'oggetto drivingOptions per specificare un orario di partenza per calcolare il percorso migliore per la tua destinazione in base alle condizioni del traffico previste. Puoi anche specificare se vuoi che il tempo stimato nel traffico sia pessimistico, ottimistico o la stima migliore in base alle condizioni del traffico storiche e in tempo reale.
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.) 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 èbest_guess. 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 DistanceMatrixRequest per i percorsi in auto, che include un'ora di partenza e un modello di traffico:
{ origins: [{lat: 55.93, lng: -3.118}, 'Greenwich, England'], destinations: ['Stockholm, Sweden', {lat: 50.087, lng: 14.421}], travelMode: 'DRIVING', drivingOptions: { departureTime: new Date(Date.now() + N), // for the time N milliseconds from now. trafficModel: 'optimistic' } }
Risposte di Distance Matrix
Una chiamata riuscita al servizio Distance Matrix restituisce un oggetto DistanceMatrixResponse e un oggetto DistanceMatrixStatus. Questi vengono passati alla funzione di callback specificata nella richiesta.
L'oggetto DistanceMatrixResponse contiene informazioni sulla distanza e sulla durata per ogni coppia di origine/destinazione per la quale è stato possibile calcolare un percorso.
{ "originAddresses": [ "Greenwich, Greater London, UK", "13 Great Carleton Square, Edinburgh, City of Edinburgh EH16 4, UK" ], "destinationAddresses": [ "Stockholm County, Sweden", "Dlouhá 609/2, 110 00 Praha-Staré Město, Česká republika" ], "rows": [ { "elements": [ { "status": "OK", "duration": { "value": 70778, "text": "19 hours 40 mins" }, "distance": { "value": 1887508, "text": "1173 mi" } }, { "status": "OK", "duration": { "value": 44476, "text": "12 hours 21 mins" }, "distance": { "value": 1262780, "text": "785 mi" } } ] }, { "elements": [ { "status": "OK", "duration": { "value": 96000, "text": "1 day 3 hours" }, "distance": { "value": 2566737, "text": "1595 mi" } }, { "status": "OK", "duration": { "value": 69698, "text": "19 hours 22 mins" }, "distance": { "value": 1942009, "text": "1207 mi" } } ] } ] }
Risultati di Distance Matrix
I campi supportati in una risposta sono spiegati di seguito.
originAddressesè un array contenente le località passate nel campooriginsdella richiesta Distance Matrix. Gli indirizzi vengono restituiti così come sono formattati dal geocodificatore.destinationAddressesè un array contenente le località passate nel campodestinations, nel formato restituito dal geocodificatore.rowsè un array di oggettiDistanceMatrixResponseRow, in cui ogni riga corrisponde a un'origine.elementssono elementi secondari dirowse corrispondono all'accoppiamento dell'origine della riga con ogni destinazione. Contengono informazioni su stato, durata, distanza e tariffa (se disponibile) per ogni coppia di origine/destinazione.- Ogni
elementcontiene i seguenti campi:status: consulta Codici di stato per un elenco dei possibili codici di stato.duration: il tempo necessario per percorrere questo percorso, espresso in secondi (il campovalue) e cometext. Il valore testuale è formattato in base allaunitSystemspecificata nella richiesta (o nella metrica, se non è stata fornita alcuna preferenza).duration_in_traffic: il tempo necessario per percorrere questo itinerario tenendo conto delle condizioni del traffico attuali, espresso in secondi (il campovalue) e cometext. Il valore testuale è formattato in base allaunitSystemspecificata nella richiesta (o nella metrica, se non è stata fornita alcuna preferenza). Il campoduration_in_trafficviene restituito solo se sono disponibili dati sul traffico, semodeè impostato sudrivinge sedepartureTimeè incluso nel campodistanceMatrixOptionsdella richiesta.distance: la distanza totale di questo percorso, espressa in metri (value) e cometext. Il valore testuale è formattato in base allaunitSystemspecificata nella richiesta (o nella metrica, se non è stata fornita alcuna preferenza).fare: contiene la tariffa totale (ovvero i costi totali dei biglietti) su questo percorso. Questa proprietà viene restituita solo per le richieste di trasporto pubblico e solo per i fornitori di servizi di trasporto pubblico per i quali sono disponibili informazioni sulle tariffe. 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.
Codici di stato
La risposta di Distance Matrix include un codice di stato per la risposta nel suo complesso, nonché uno stato per ogni elemento.
Codici di stato della risposta
I codici di stato che si applicano a DistanceMatrixResponse vengono passati nell'oggetto DistanceMatrixStatus e includono:
OK: la richiesta è valida. Questo stato può essere restituito anche se non sono stati trovati percorsi tra le origini e le destinazioni. Per informazioni sullo stato a livello di elemento, consulta Codici di stato degli elementi.INVALID_REQUEST: la richiesta fornita non era valida. Spesso ciò è dovuto alla mancanza di campi obbligatori. Consulta l'elenco dei campi supportati riportato sopra.MAX_ELEMENTS_EXCEEDED: il prodotto delle origini e delle destinazioni supera il limite per query.MAX_DIMENSIONS_EXCEEDED: la richiesta conteneva più di 25 origini o più di 25 destinazioni.OVER_QUERY_LIMIT: la tua applicazione ha richiesto troppi elementi entro il periodo di tempo consentito. La richiesta dovrebbe andare a buon fine se riprovi dopo un periodo di tempo ragionevole.REQUEST_DENIED: il servizio ha negato l'utilizzo del servizio Distance Matrix da parte della tua pagina web.UNKNOWN_ERROR: non è stato possibile elaborare una richiesta Distance Matrix a causa di un errore del server. La richiesta potrebbe andare a buon fine se riprovi.
Codici di stato degli elementi
I seguenti codici di stato si applicano a oggetti DistanceMatrixElement specifici:
NOT_FOUND: non è stato possibile geocodificare l'origine e/o la destinazione di questo accoppiamento.OK: la risposta contiene un risultato valido.ZERO_RESULTS: non è stato possibile trovare un percorso tra l'origine e la destinazione.
Analisi dei risultati
L'oggetto DistanceMatrixResponse contiene un row per ogni origine passata nella richiesta. Ogni riga contiene un campo element per ogni accoppiamento di quell'origine con le destinazioni fornite.
function callback(response, status) { if (status == 'OK') { var origins = response.originAddresses; var destinations = response.destinationAddresses; for (var i = 0; i < origins.length; i++) { var results = response.rows[i].elements; for (var j = 0; j < results.length; j++) { var element = results[j]; var distance = element.distance.text; var duration = element.duration.text; var from = origins[i]; var to = destinations[j]; } } } }