Panoramica
Il servizio Distance Matrix di Google calcola la distanza e la durata del viaggio tra più origini e destinazioni utilizzando una determinata modalità di viaggio.
Questo servizio non restituisce informazioni dettagliate sul percorso. Le informazioni sul percorso, incluse polilinee e indicazioni 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 innanzitutto che l'API Distance Matrix (legacy) sia abilitata nella console Google Cloud, nello stesso progetto 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, poi 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 JavaScript, consulta la sezione 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 norme 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 callback da eseguire al termine della richiesta per elaborare i risultati.
Accedi al servizio Distance Matrix all'interno del 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 al
ricevimento 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 indirizzi, oggettigoogle.maps.LatLngo oggetti Place da cui calcolare la distanza e il tempo.destinations(obbligatorio): un array contenente una o più stringhe di indirizzi, oggettigoogle.maps.LatLngo oggetti Place a cui calcolare la distanza e il tempo.travelMode(facoltativo): la modalità di trasporto da utilizzare per calcolare le indicazioni stradali. Consulta la sezione Modalità di viaggio.transitOptions(facoltativo) - Opzioni che si applicano solo alle richieste in cuitravelModeèTRANSIT. I valori validi sono descritti nella sezione relativa alle opzioni di trasporto pubblico.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à 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 tra i punti verranno calcolate utilizzando percorsi senza pedaggio, ove possibile.
Modalità di viaggio
Quando calcoli tempi e distanze, puoi specificare quale mezzo di trasporto utilizzare. Attualmente sono supportate le seguenti modalità di viaggio:
BICYCLINGrichieste indicazioni stradali per biciclette 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 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.WALKINGrichieste indicazioni a piedi tramite sentieri pedonali e marciapiedi (se disponibili).
Opzioni di trasporto pubblico
Il servizio di trasporto pubblico è attualmente "sperimentale". Durante questa fase, implementeremo limiti di frequenza per impedire l'abuso dell'API. Alla fine imporremo un limite alle query totali per caricamento della mappa in base all'utilizzo corretto dell'API.
Le opzioni disponibili per una richiesta di matrice delle distanze variano in base alle modalità di viaggio.
Nelle richieste di transito, le opzioni avoidHighways e
avoidTolls vengono ignorate. Puoi specificare
opzioni di itinerario specifiche per il trasporto pubblico tramite
il valore letterale dell'oggetto TransitOptions.
Le richieste di transito sono urgenti. I calcoli verranno restituiti solo per orari futuri.
Il valore letterale dell'oggetto TransitOptions contiene i seguenti campi:
{ arrivalTime: Date, departureTime: Date, modes: [transitMode1, transitMode2] routingPreference: TransitRoutePreference }
Questi campi sono spiegati di seguito:
arrivalTime(facoltativo) specifica l'ora di arrivo desiderata come oggettoDate. Se viene specificato l'orario di arrivo, l'orario di partenza viene ignorato.departureTime(facoltativo) specifica l'ora di partenza desiderata come oggettoDate. Il valoredepartureTimeverrà ignorato se viene specificatoarrivalTime. Se non viene specificato alcun valore perdepartureTimeoarrivalTime, il valore predefinito è ora (ovvero l'ora corrente).modes(facoltativo) è un array contenente uno o più valori letterali dell'oggettoTransitMode. Questo campo può essere incluso solo se la richiesta include una chiave API. OgniTransitModespecifica una modalità di trasporto pubblico preferita. Sono consentiti i seguenti valori:BUSindica che l'itinerario calcolato deve preferire gli spostamenti in autobus.RAILindica che l'itinerario calcolato deve privilegiare gli spostamenti in treno, tram, metropolitana leggera e metropolitana.SUBWAYindica che l'itinerario calcolato deve preferire gli spostamenti in metropolitana.TRAINindica che l'itinerario calcolato deve dare la precedenza al viaggio in treno.TRAMindica che il percorso calcolato deve dare la precedenza agli spostamenti in tram e metropolitana leggera.
routingPreference(facoltativo) specifica le preferenze per i percorsi con il trasporto pubblico. Utilizzando questa opzione, puoi dare la priorità alle 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 l'itinerario calcolato deve preferire un numero limitato di trasferimenti.LESS_WALKINGindica che il percorso calcolato deve preferire quantità limitate di camminata.
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 migliore stima in base alle condizioni di 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 per la validità del letterale oggettodrivingOptions) specifica l'ora di partenza desiderata 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 nei vari fusi orari. Se includidepartureTimenella richiesta, l'API restituisce il percorso migliore in base alle condizioni di traffico previste al 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), l'itinerario restituito è un itinerario generalmente buono che non tiene conto delle condizioni del traffico.trafficModel(facoltativo) specifica i presupposti da utilizzare per calcolare il tempo nel traffico. Questa impostazione influisce sul valore restituito nel campoduration_in_trafficdella risposta, che contiene il tempo previsto nel traffico in base alle medie storiche. Il valore predefinito èbest_guess. Sono consentiti i seguenti valori:bestguess(impostazione predefinita) indica che il valore restituitoduration_in_trafficdeve essere la migliore stima del tempo di percorrenza in base a ciò che è noto sulle condizioni del traffico storico e sul traffico in tempo reale. Il traffico in tempo reale diventa più importante quanto più ladepartureTimeè vicina al presente.pessimisticindica che il valore restituitoduration_in_trafficdovrebbe essere superiore al tempo di percorrenza effettivo nella maggior parte dei giorni, anche se in alcuni giorni con condizioni di traffico particolarmente difficili potrebbe superare questo valore.optimisticindica che il valoreduration_in_trafficrestituito dovrebbe essere inferiore al tempo di percorrenza effettivo nella maggior parte dei giorni, anche se in alcuni giorni con condizioni di traffico particolarmente buone il tempo di percorrenza potrebbe essere inferiore a questo valore.
Di seguito è riportato un DistanceMatrixRequest di esempio per gli itinerari in auto,
inclusi un orario 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
che hai specificato nella richiesta.
L'oggetto DistanceMatrixResponse contiene informazioni su distanza e
durata per ogni coppia origine/destinazione per cui è 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à trasmesse nel campooriginsdella richiesta Distance Matrix. Gli indirizzi vengono restituiti così come sono formattati dal geocodificatore.destinationAddressesè un array contenente le località trasmesse nel campodestinations, nel formato restituito dal geocoder.rowsè un array di oggettiDistanceMatrixResponseRow, con ogni riga corrispondente a un'origine.elementssono elementi secondari dirowse corrispondono a un accoppiamento dell'origine della riga con ogni destinazione. Contengono informazioni su stato, durata, distanza e tariffa (se disponibili) per ogni coppia origine/destinazione.- Ogni
elementcontiene i seguenti campi:status: consulta la sezione Codici di stato per un elenco dei possibili codici di stato.duration: La durata del viaggio su questo percorso, espressa in secondi (campovalue) e cometext. Il valore testuale è formattato in base alunitSystemspecificato 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 (campovalue) e cometext. Il valore testuale è formattato in base alunitSystemspecificato nella richiesta (o nella metrica, se non è stata fornita alcuna preferenza). Ilduration_in_trafficviene restituito solo se sono disponibili dati sul traffico, ilmodeè impostato sudrivingedepartureTimeè incluso nel campodistanceMatrixOptionsdella richiesta.distance: la distanza totale di questa route, espressa in metri (value) e cometext. Il valore testuale è formattato in base aunitSystemspecificato nella richiesta (o nella metrica, se non è stata fornita alcuna preferenza).fare: contiene la tariffa totale (ovvero il costo totale del biglietto) per questa tratta. 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 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
trasmessi 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 elemento.INVALID_REQUEST- La richiesta fornita non era valida. Ciò è spesso dovuto alla mancanza di campi obbligatori. Consulta l'elenco dei campi supportati riportato sopra.MAX_ELEMENTS_EXCEEDED: il prodotto di origini e destinazioni supera il limite per query.MAX_DIMENSIONS_EXCEEDED: la tua richiesta conteneva più di 25 origini o più di 25 destinazioni.OVER_QUERY_LIMIT: la tua applicazione ha richiesto troppi elementi nel 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 dell'elemento
I seguenti codici di stato si applicano a oggetti
DistanceMatrixElement specifici:
NOT_FOUND: l'origine e/o la destinazione di questo accoppiamento non è stato possibile geocodificarle.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 trasmessa nella richiesta. Ogni riga
contiene un campo element per ogni accoppiamento dell'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]; } } } }