Routen-Polylinien anfordern

Die Methode computeRoutes (REST) und die ComputeRoutes (gRPC) geben beide die Route zurück, die durch eine Polylinie als Teil des Antwort. Diese APIs geben zwei Typen von Polylinien zurück:

  • Einfache Polylinie (Standardeinstellung): Für eine Route ohne Verkehr die in die Polylinie eingebettete Informationen enthalten. Anfragen, die eine einfache Polylinie zurückgeben werden zum „Routes Basic“-Tarif abgerechnet. Weitere Informationen zum Abrechnung für die Routes API.

  • Polylinie mit Verkehrserkennung – enthalten Informationen zur Verkehrslage entlang der Route. Die Verkehrslage wird in Bezug auf die Geschwindigkeit angegeben. Kategorien (NORMAL, SLOW, TRAFFIC_JAM) in einem bestimmten Intervall der Polylinie auf. Anfragen für verkehrsorientierte Polylinien werden zum Tarif „Routes Preferred“ Weitere Informationen zur Abrechnung für Routes API Weitere Informationen finden Sie unter Qualität der Polylinie konfigurieren

Weitere Informationen zu Polylinien finden Sie unter:

Einfache Polylinie für eine Route, einen Abschnitt oder einen Schritt anfordern

Polylinien werden durch ein Polyline (REST) oder Polyline-Objekt (gRPC). Sie können in der Antwort eine Polylinie auf Routen-, Strecken- und Schrittebene zurückgeben.

Geben Sie an, welche Polylinie zurückgegeben werden soll. Verwenden Sie dazu den Antwortfeldmaske:

  • Auf Routenebene geben Sie eine Polylinie in der Antwort zurück, indem Sie routes.polyline in der Antwortfeldmaske.

  • Auf Beinebene wird in der Antwort für jeden Abschnitt des unter Berücksichtigung von routes.legs.polyline berechnet.

  • Auf Schrittebene wird in der Antwort für jeden Schritt von das Etappen durch Einfügen von routes.legs.steps.polyline.

Wenn Sie beispielsweise eine Polylinie für die gesamte Route, für jeden Streckenabschnitt und für jeden Schritts jedes Abschnitts:

curl -X POST -d '{
  "origin":{
    "address": "1600 Amphitheatre Parkway, Mountain View, CA"
  },
  "destination":{
    "address": "24 Willie Mays Plaza, San Francisco, CA 94107"
  },
  "travelMode": "DRIVE"
}' \
-H 'Content-Type: application/json' \
-H 'X-Goog-Api-Key: YOUR_API_KEY' \
-H 'X-Goog-FieldMask: routes.duration,routes.distanceMeters,routes.polyline,routes.legs.polyline,routes.legs.steps.polyline' \
'https://routes.googleapis.com/directions/v2:computeRoutes'

Diese Anforderung gibt die folgende Antwort zurück, die die Polylinie für den für jeden Abschnitt der Route und für jeden Schritt des Streckenabschnitts:

{
  "routes": [
    {
      "legs": [
        {
          "polyline": {
              "encodedPolyline": "ipkcFfich...@Bs@?A?O?SD{A@o@B}@I?qA?_AA_@@_@?"
          }
        },
          "steps": [
              {
                  "polyline": {
                      "encodedPolyline": "kclcF...@sC@YIOKI"
                  }
              },
              {
                  "polyline": {
                      "encodedPolyline": "wblcF~...SZSF_@?"
                  }
              },
              ...
      ],
      "distanceMeters": 56901,
      "duration": "2420s",
      "polyline": {
        "encodedPolyline": "ipkcFfich...@Bs@?A?O?SD{A@o@B}@I?qA?_AA_@@_@?"
      }
    }
  ]
}

Da diese Anfrage nur einen Start- und einen Zielort enthält, wird die zurückgegebene enthält nur einen einzigen Streckenabschnitt. Dementsprechend ist die Polylinie für die Strecke für die Route identisch sind.

Wenn Sie der Anfrage einen Zwischenwegpunkt hinzufügen, wird der zurückgegebene Route enthält zwei Streckenabschnitte:

curl -X POST -d '{
  "origin":{
    "address": "1600 Amphitheatre Parkway, Mountain View, CA"
  },
  "destination":{
    "address": "24 Willie Mays Plaza, San Francisco, CA 94107"
  },
  "intermediates": [
    { "address": "450 Serra Mall, Stanford, CA 94305, USA"},
  ],
  "travelMode": "DRIVE",
}' \
-H 'Content-Type: application/json' \
-H 'X-Goog-Api-Key: YOUR_API_KEY' \
-H 'X-Goog-FieldMask: routes.duration,routes.distanceMeters,routes.polyline,routes.legs.polyline' \
'https://routes.googleapis.com/directions/v2:computeRoutes'

Diese Anforderung gibt zwei Streckenabschnitte mit jeweils einer eindeutigen Polylinie sowie eine Polylinie für der gesamten Route:

{
  "routes": [
    {
      "legs": [
        {
          "polyline": {
            "encodedPolyline": "kclcFfqchV?A...?I@G?GAECCCEKICBAFG"
          }
          "steps": [
            {
                "polyline": {
                    "encodedPolyline": "kclcFfqch...YIOKI"
                }
            },
        ...
        },
        {
          "polyline": {
            "encodedPolyline": "ojmcFtethV?K...QOYQOGA?_@MUG[Ga@G"
          }
          "steps": [
            {
                "polyline": {
                    "encodedPolyline": "uypeFbo`jVgJq...PoBiC"
                }
            },
        ...
        }
      ],
      "distanceMeters": 68403,
      "duration": "3759s",
      "polyline": {
          "encodedPolyline": "kclcFfqchV?A?CBKF[Ha...?GAECCCEKICBAFGJEBE"
      }
    }
  ]
}

Qualität der Polylinie

Die Qualität einer Polylinie kann folgendermaßen beschrieben werden:

  • Die Gleitkommagenauigkeit der Punkte

    Punkte werden als Breiten- und Längengradwerte angegeben, die durch im Gleitkommaformat mit einfacher Genauigkeit. Dies eignet sich gut für kleine Werte, (die präzise dargestellt werden können), aber die Genauigkeit nimmt mit den Werten ab. aufgrund von Rundungsfehlern mit Gleitkommazahlen zunimmt.

    In computeRoutes (REST) und ComputeRoutes Dies wird von polylineEncoding gesteuert.

  • Die Anzahl der Punkte, aus denen die Polylinie besteht

    Je mehr Punkte vorhanden sind, desto glatter die Polylinie (insbesondere in Kurven).

    In computeRoutes (REST) und ComputeRoutes Dies wird von polylineQuality gesteuert.

Codierungstyp für Polylinien konfigurieren

Verwenden Sie die Anfrageoption polylineEncoding, um den Polylinientyp zu steuern. Mit der Eigenschaft polylineEncoding wird gesteuert, ob die Polylinie codiert wird: ENCODED_POLYLINE (Standard), d. h. die Algorithmusformat für codierte Polylinien oder GEO_JSON_LINESTRING, d. h. das GeoJSON-LineString-Format verwendet werden.

Zum Beispiel im Anfragetext:

curl -X POST -d '{
  "origin":{
    "address": "1600 Amphitheatre Parkway, Mountain View, CA"
  },
  "destination":{
    "address": "24 Willie Mays Plaza, San Francisco, CA 94107"
  },
  "travelMode": "DRIVE",
  "polylineEncoding": "ENCODED_POLYLINE"
}' \
-H 'Content-Type: application/json' \
-H 'X-Goog-Api-Key: YOUR_API_KEY' \
-H 'X-Goog-FieldMask: routes.duration,routes.distanceMeters,routes.polyline,routes.legs.polyline' \
'https://routes.googleapis.com/directions/v2:computeRoutes'

Qualität der Polylinie konfigurieren

polylineQuality gibt die Qualität der Polylinie als HIGH_QUALITY oder OVERVIEW (Standard). Mit OVERVIEW setzt sich die Polylinie aus einem Punkte und hat eine niedrigere Anfragelatenz als HIGH_QUALITY.

Zum Beispiel im Anfragetext:

{
  "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": "2023-10-15T15:01:23.045123456Z",
  ...
}

Polylinie mit Verkehrserkennung anfordern

In den Beispielen oben werden grundlegende Polylinien zurückgegeben, d. h. Polylinien ohne Verkehrsinformationen. Darüber hinaus können Sie auch anfordern, dass die Polylinie Folgendes enthält: Verkehrsinformationen für die Route und für jeden Abschnitt der Route.

Polylinien mit Verkehrsinformationen enthalten Informationen zur Verkehrslage entlang die Route berechnen. Die Verkehrslage wird in Form von Geschwindigkeitskategorien angegeben. (NORMAL, SLOW, TRAFFIC_JAM) für ein bestimmtes Intervall der Antwort Polylinie. Die Intervalle werden durch die Startindexe (einschließlich) definiert. und die (ausschließlichen) End-Polylinienpunkte.

Die folgende Antwort zeigt beispielsweise NORMAL-Traffic zwischen Polylinien. Punkte 2 und 4:

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

Legen Sie Folgendes fest, um eine Anfrage zur Berechnung einer verkehrsbezogenen Polylinie zu stellen: Eigenschaften in der Anfrage:

  • Legen Sie zum Aktivieren das Array-Feld extraComputations auf TRAFFIC_ON_POLYLINE fest die Traffic-Berechnung.

  • Setzen Sie travelMode auf DRIVE oder TWO_WHEELER. Anfragen für andere Mobilitätsform einen Fehler zurück.

  • Geben Sie entweder die Weiterleitung TRAFFIC_AWARE oder TRAFFIC_AWARE_OPTIMAL an in der Anfrage angeben. Weitere Informationen finden Sie unter Qualitäts- und Latenz.

  • Legen Sie eine Antwortfeldmaske fest, die angibt, dass die Antworteigenschaften zurückgegeben werden sollen:

    • Auf Routenebene: Geben Sie alle Reiseinformationen in der Antwort zurück, indem Sie einschließlich routes.travelAdvisory in der Antwortfeldmaske. Zurückgeben nur die Verkehrsinformationen, routes.travelAdvisory.speedReadingIntervals

    • Auf Beinebene: Alle Reiseinformationen in der Antwort für für jeden Abschnitt der Route, indem Sie routes.legs.travelAdvisory angeben. Zurückgeben nur die Verkehrsinformationen, routes.legs.travelAdvisory.speedReadingIntervals

curl -X POST -d '{
  "origin":{
    "address": "1600 Amphitheatre Parkway, Mountain View, CA"
  },
  "destination":{
    "address": "24 Willie Mays Plaza, San Francisco, CA 94107"
  },
  "travelMode": "DRIVE",
  "extraComputations": ["TRAFFIC_ON_POLYLINE"],
  "routingPreference": "TRAFFIC_AWARE_OPTIMAL"
}' \
-H 'Content-Type: application/json' \
-H 'X-Goog-Api-Key: YOUR_API_KEY' \
-H 'X-Goog-FieldMask: routes.duration,routes.distanceMeters,routes.polyline,routes.legs.polyline,routes.travelAdvisory,routes.legs.travelAdvisory' \
'https://routes.googleapis.com/directions/v2:computeRoutes'

Beispielantwort für eine verkehrsorientierte Polylinie

In der Antwort sind die Verkehrsdaten in der Polylinie codiert und in der Feld „travelAdvisory“ vom Typ RouteLegTravelAdvisory -Objekt (jedes Bein) und RouteTravelAdvisory-Objekt (route).

Beispiel:

{
  "routes": [
    {
      "legs": {
        "polyline": {
          "encodedPolyline": "}boeF~zbjVAg@EmB`GWHlD"
        },
        // Traffic data for the leg.
        "travelAdvisory": {
          "speedReadingIntervals": [
            {
              "endPolylinePointIndex": 1,
              "speed": "NORMAL"
            },
            {
              "startPolylinePointIndex": 1,
              "endPolylinePointIndex": 2,
              "speed": "SLOW"
            },
            {
              "startPolylinePointIndex": 2,
              "endPolylinePointIndex": 4,
              "speed": "NORMAL"
            }
          ] 
        }
      },
      "polyline": {
        "encodedPolyline": "}boeF~zbjVAg@EmB`GWHlD"
      },
      // Traffic data for the route.
      "travelAdvisory": {
        "speedReadingIntervals": [
          {
            "endPolylinePointIndex": 1,
            "speed": "NORMAL"
          },
          {
            "startPolylinePointIndex": 1,
            "endPolylinePointIndex": 2,
            "speed": "SLOW"
          },
          {
            "startPolylinePointIndex": 2,
            "endPolylinePointIndex": 4,
            "speed": "NORMAL"
          }
        ] 
      }
    }
  ]
}

Sowohl RouteTravelAdvisory als auch RouteLegTravelAdvisory enthalten ein Arrayfeld speedReadingIntervals, die Informationen zur Verkehrsgeschwindigkeit enthält. Jedes im Array wird durch ein SpeedReadingInterval (REST) oder SpeedReadingInterval (gRPC)-Objekt.

Ein SpeedReadingInterval-Objekt enthält Geschwindigkeitsmessungen für ein Routenintervall, wie NORMAL, SLOW oder TRAFFIC_JAM. Das gesamte Objekt-Array deckt die gesamte Polylinie der Route ohne Überschneidung Der Startpunkt eines angegebenen Intervall ist mit dem Endpunkt des vorhergehenden Intervalls identisch.

Jedes Intervall wird durch seine startPolylinePointIndex beschrieben, endPolylinePointIndex und die entsprechende Geschwindigkeitskategorie. Beachten Sie, dass das Fehlen des Startindex innerhalb des Intervalls dem Index 0 entspricht. gemäß der proto3-Praktiken.

Die Werte startPolylinePointIndex und endPolylinePointIndex sind nicht immer aufeinanderfolgend. Beispiel:

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

In diesem Fall waren die Verkehrsbedingungen von Index 2 bis Index 4 identisch.

Verkehrserkennungsbasierte Polylinien mit dem Maps SDK rendern

Wir empfehlen, verkehrsbewusste Polylinien mithilfe der verschiedenen Funktionen der Google Maps SDKs wie benutzerdefinierte Farben, Striche sich die Muster entlang der Polylinie strecken. Weitere Informationen zur Verwendung von Polylinien Siehe Polylinienfunktionen für Android und Polylinienfunktionen für iOS.

Beispiel für das Rendering einer Polylinie

Nutzer des Maps SDK haben die Möglichkeit, eine benutzerdefinierte Karte zu definieren. Logik zwischen den Geschwindigkeitskategorien und den Polylinien-Renderingschemas Als könnte beispielsweise „NORMAL“ angezeigt werden, als dicke blaue Linie auf der Karte während "LANGSAM" kann beispielsweise als dicke orangefarbene Linie dargestellt werden.

Die folgenden Snippets fügen eine dicke blaue Polylinie mit geodätischen Segmenten aus Melbourne nach Perth. Weitere Informationen finden Sie unter Darstellung anpassen (für Android) und Polylinie anpassen (für 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