L'API Routes è attualmente in anteprima (pre-GA). I prodotti e le funzionalità pre-GA potrebbero avere supporto limitato e le modifiche ai prodotti e alle funzionalità pre-GA potrebbero non essere compatibili con altre versioni pre-GA. Le Offerte pre-GA sono coperte dai Termini di servizio specifici per Google Maps Platform. Per ulteriori informazioni, consulta le descrizioni delle fasi di lancio.

Richiedere informazioni sul traffico su polilinee

L'API Routes consente di richiedere informazioni sulle condizioni del traffico lungo una polilinea sensibile al traffico. Le condizioni del traffico sono espresse in termini di categorie di velocità (NORMAL, SLOW, TRAFFIC_JAM) applicabili in un determinato intervallo della polilinea della risposta. Gli intervalli sono definiti dagli indici dei punti polilinea iniziali (inclusivi) e finali (esclusivi).

Per ulteriori informazioni sulle polilinee, consulta:

Restituire una polilinea

Una polilinea è rappresentata da un oggetto Polyline (REST) o Polyline (gRPC). Puoi restituire una polilinea nella risposta sia a livello di rotta sia a livello di gamba.

Stabilisci quale polilinea restituire utilizzando la maschera del campo di risposta:

  • A livello di percorso, restituisci una polilinea nella risposta includendo routes.polyline nella maschera del campo di risposta.

  • A livello di gamba, restituisci una polilinea nella risposta per ogni tratto del percorso includendo routes.legs.polyline.

Ad esempio, per restituire una polilinea per l'intero percorso e per ogni tratto:

X-Goog-FieldMask: routes.duration,routes.distanceMeters,routes.polyline,routes.legs.polyline

Configura tipo di polilinea

Il metodo computeRoutes (REST) e il metodo ComputeRoutes (gRPC) supportano l'opzione di richiesta polylineEncoding per il controllo del tipo di polilinea.

polylineEncoding specifica come codificare la polilinea come ENCODED_POLYLINE (impostazione predefinita), nel caso dell'algoritmo di codifica della polilinea, oppure in GEO_JSON_LINESTRING, ossia nel formato GeoJSON LineString.

Ad esempio, nel corpo della richiesta:

{
  "origin":{
    "location":{
      "latLng":{
        "latitude": 37.419734,
        "longitude": -122.0827784
      }
    }
  },
  "destination":{
    "location":{
      "latLng":{
        "latitude": 37.417670,
        "longitude": -122.079595
      }
    }
  },
  "travelMode": "DRIVE",
  "routingPreference": "TRAFFIC_AWARE",
  "polylineQuality": "HIGH_QUALITY",
  "polylineEncoding": "ENCODED_POLYLINE", 
  "departureTime": "2019-10-15T15:01:23.045123456Z",
  ...
}

Informazioni sul traffico di ritorno

Puoi configurare la risposta in modo da includere informazioni sui pedaggi e sulle possibili restrizioni della zona di traffico:

Sia RouteTravelAdvisory che RouteLegTravelAdvisory includono un campo array per informazioni sulla velocità del traffico che descrivono in dettaglio la densità del traffico. Ogni oggetto nell'array è rappresentato da un oggetto SpeedReadingInterval (REST) o SpeedReadingInterval (gRPC).

Un oggetto SpeedReadingInterval include la lettura della velocità per un intervallo di percorso. L'intero array di oggetti copre l'intera polilinea della route senza sovrapposizioni. Il punto iniziale di un intervallo specificato è uguale al punto finale dell'intervallo precedente.

Per configurare il metodo per restituire le informazioni sul traffico con la polilinea, utilizza la maschera del campo di risposta:

  • A livello di percorso, restituisci tutte le informazioni sul traffico nella risposta includendo routes.travelAdvisory nella maschera del campo di risposta. Per restituire solo il SpeedReadingInterval, specifica routes.travelAdvisory.speedReadingIntervals

  • A livello di gamba, restituisci le informazioni sul traffico nella risposta per ogni tratta del percorso includendo routes.legs.travelAdvisory.speedReadingIntervals o routes.legs.steps.travelAdvisory.speedReadingIntervals.

Quando restituisci informazioni sul traffico, in genere fornisci sia polilinea sia informazioni sul traffico nella risposta:

X-Goog-FieldMask: routes.duration,routes.distanceMeters,routes.polyline,routes.travelAdvisory,routes.legs.polyline,routes.legs.travelAdvisory

Esempio di risposta per una polilinea sensibile al traffico

Nella risposta, il traffico a livello di percorso è disponibile in routes.travelAdvisory.speedReadingIntervals. Il traffico a livello di gambe è disponibile in routes.legs.travelAdvisory.speedReadingIntervals.

Ogni intervallo è descritto da startPolylinePointIndex, endPolylinePointIndex e dalla categoria di velocità corrispondente. Nota che la mancanza di indice iniziale nell'intervallo corrisponde all'indice 0, in conformità con le pratiche proto3.

I valori startPolylinePointIndex e endPolylinePointIndex non sono sempre consecutivi. Ad esempio:

{
  "startPolylinePointIndex": 2,
  "endPolylinePointIndex": 4,
  "speed": "NORMAL"
}

In questo caso, le condizioni del traffico erano uguali dall'indice 2 all'indice 4.

Di seguito è riportata la risposta completa:

{
  "routes": [
    {
      "legs": {
        "polyline": {
          "encodedPolyline": "}boeF~zbjVAg@EmB`GWHlD"
        },
        "travelAdvisory": {
          "speedReadingIntervals": [
            {
              "endPolylinePointIndex": 1,
              "speed": "NORMAL"
            },
            {
              "startPolylinePointIndex": 1,
              "endPolylinePointIndex": 2,
              "speed": "SLOW"
            },
            {
              "startPolylinePointIndex": 2,
              "endPolylinePointIndex": 4,
              "speed": "NORMAL"
            }
          ] 
        }
      },
      "polyline": {
        "encodedPolyline": "}boeF~zbjVAg@EmB`GWHlD"
      },
      "travelAdvisory": {
        "speedReadingIntervals": [
          {
            "endPolylinePointIndex": 1,
            "speed": "NORMAL"
          },
          {
            "startPolylinePointIndex": 1,
            "endPolylinePointIndex": 2,
            "speed": "SLOW"
          },
          {
            "startPolylinePointIndex": 2,
            "endPolylinePointIndex": 4,
            "speed": "NORMAL"
          }
        ] 
      }
    }
  ]
}

Esegui il rendering di Politiche sensibili al traffico con l'SDK di Maps

Ti consigliamo di visualizzare sulla mappa polilinee con informazioni sul traffico utilizzando le varie funzionalità offerte dagli SDK di Google Maps, tra cui colorazione, tratti e pattern personalizzati lungo i tratti di polilinea. Per maggiori dettagli sull'utilizzo delle polilinee, consulta Funzionalità di Polyline per Android e Funzionalità di Polyline per iOS.

Esempio di rendering di polilinea

Gli utenti dell'SDK di Maps hanno la possibilità di definire una logica di mappatura personalizzata tra le categorie di velocità e gli schemi di rendering polilineali. Ad esempio, si potrebbe decidere di visualizzare la velocità "NORMAL" come una linea spessa blu sulla mappa, mentre la velocità "Lenta" potrebbe essere visualizzata come una spessa linea arancione e così via.

I seguenti snippet aggiungono una polilinea spessa blu con segmenti geodetici da Mboubourne a Perth. Per ulteriori informazioni, consulta Personalizzare gli aspetti (per Android) e Personalizzare Polyline (per iOS).

Android

Java

Polyline line = map.addPolyline(new PolylineOptions()
    .add(new LatLng(-37.81319, 144.96298), new LatLng(-31.95285, 115.85734))
    .width(25)
    .color(Color.BLUE)
    .geodesic(true));

Kotlin

val line: Polyline = map.addPolyline(
  PolylineOptions()
    .add(LatLng(-37.81319, 144.96298), LatLng(-31.95285, 115.85734))
    .width(25f)
    .color(Color.BLUE)
    .geodesic(true)
)

iOS

Objective-C

GMSMutablePath *path = [GMSMutablePath path];
[path addLatitude:-37.81319 longitude:144.96298];
[path addLatitude:-31.95285 longitude:115.85734];
GMSPolyline *polyline = [GMSPolyline polylineWithPath:path];
polyline.strokeWidth = 10.f;
polyline.strokeColor = .blue;
polyline.geodesic = YES;
polyline.map = mapView;

Swift

let path = GMSMutablePath()
path.addLatitude(-37.81319, longitude: 144.96298)
path.addLatitude(-31.95285, longitude: 115.85734)
let polyline = GMSPolyline(path: path)
polyline.strokeWidth = 10.0
polyline.geodesic = true
polyline.map = mapView