Żądanie linii łamanych

Metoda computeRoutes (REST) i metoda ComputeRoutes (gRPC) zwracają trasę reprezentowaną przez linię łamaną jako część . Te interfejsy API zwracają 2 typy linii łamanych:

  • Podstawowa linia łamana (domyślnie) oznacza trasę, ale bez natężenia ruchu. umieszczone na linii łamanej. Żądania zwracające podstawową linię łamaną są rozliczane według stawki podstawowej Trasy. Więcej informacji o płatności za interfejs Routes API.

  • Linia łamana z uwzględnieniem natężenia ruchu – zawiera informacje o natężeniu ruchu. wzdłuż trasy. Warunki na drogach są wyrażone za pomocą prędkości kategorie (NORMAL, SLOW, TRAFFIC_JAM) obowiązujące w danym przedziale czasu linii łamanej. Żądania dotyczące linii łamanych uwzględniających ruch są rozliczane w Preferowana wartość tras. Więcej informacji o rozliczeniach Interfejs Routes API. Więcej informacji: Konfigurowanie jakości linii łamanej

Więcej informacji o liniach łamanych:

Żądanie podstawowej linii łamanej dla trasy, nogi lub kroku

Linia łamana jest przedstawiona za pomocą Polyline (REST) lub Obiekt Polyline (gRPC). Możesz zwrócić linię łamaną w odpowiedzi na poziomie trasy, etapu i kroku.

Określ, która linia łamana ma zostać zwrócona, za pomocą funkcji maska pola odpowiedzi:

  • Na poziomie trasy: zwróć linię łamaną w odpowiedzi przez dodanie routes.polyline w masce pola odpowiedzi.

  • Na poziomie nogi zwróć linię łamaną w odpowiedzi dla każdego etapu przez uwzględnienie routes.legs.polyline.

  • Na poziomie kroku zwracaj linię łamaną w odpowiedzi dla każdego kroku nogę, dodając routes.legs.steps.polyline.

Aby na przykład zwrócić linię łamaną na całej trasie, dla każdego etapu oraz każdy etap każdego etapu:

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'

To żądanie zwraca następującą odpowiedź zawierającą linię łamaną dla dla każdego odcinka trasy i każdego etapu:

{
  "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_@@_@?"
      }
    }
  ]
}

Żądanie zawiera tylko miejsce wylotu i miejsce docelowe, więc zwrócony trasa składa się tylko z jednego etapu. Dlatego też linia łamana dla nogi i są takie same.

Jeśli dodasz do żądania pośredni punkt pośredni, funkcja trasa ma dwa etapy:

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'

To żądanie zwraca dwie nogi, każdą z niepowtarzalną linią łamaną, oraz linię łamaną dla całą trasę:

{
  "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"
      }
    }
  ]
}

Jakość linii łamanej

Jakość linii łamanej można opisać za pomocą tych określeń:

  • Dokładność zmiennoprzecinkowa punktów

    Punkty są określane jako długość i szerokość geograficzna, które są reprezentowane w formacie zmiennoprzecinkowym pojedynczej precyzji. Sprawdza się to w przypadku małych wartości (co można precyzyjnie przedstawić), ale precyzja zmniejsza się w miarę z powodu błędów zaokrąglania zmiennoprzecinkowego.

    W computeRoutes (REST) i ComputeRoutes, Ta zasada jest kontrolowane przez polylineEncoding.

  • Liczba punktów tworzących linię łamaną

    Im więcej jest punktów, tym gładsza jest linia łamana (szczególnie krzywe).

    W computeRoutes (REST) i ComputeRoutes, Ta zasada jest kontrolowane przez polylineQuality.

Skonfiguruj typ kodowania linii łamanych

Użyj opcji żądania polylineEncoding, aby kontrolować typ linii łamanej. Właściwość polylineEncoding określa, czy linia łamana będzie zakodowana jako ENCODED_POLYLINE (domyślna), co oznacza Format algorytmu linii łamanej z kodowaniem zostanie użyty lub GEO_JSON_LINESTRING, co oznacza Format ciągu znaków GeoJSON .

Na przykład w treści żądania:

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'

Skonfiguruj jakość linii łamanej

polylineQuality określa jakość linii łamanej jako HIGH_QUALITY lub OVERVIEW (domyślnie). W funkcji OVERVIEW linia łamana jest składać się z małego liczby punktów i ma krótszy czas oczekiwania na żądanie niż HIGH_QUALITY.

Na przykład w treści żądania:

{
  "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",
  ...
}

Żądanie linii łamanej wykrywającej ruch drogowy

Pokazane powyżej przykłady pokazują podstawowe linie łamane, co oznacza, że linie łamane nie są informacji o ruchu drogowym. Można również zażądać, aby linia łamana zawierała informacje o ruchu drogowym na trasie i na każdym jej etapie.

Linie łamane z uwzględnieniem natężenia ruchu zawierają informacje o warunkach na drodze trasę. Warunki na drogach są wyrażone w postaci kategorii prędkości (NORMAL, SLOW, TRAFFIC_JAM) w danym przedziale czasu odpowiedzi linia łamana. Przedziały są określane przez indeksy ich początkowych (włącznie) i końcowych (wyłącznie) punktów linii łamanej.

Na przykład poniższa odpowiedź pokazuje ruch NORMAL między linią łamaną punkty 2 i 4:

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

Aby wysłać żądanie obliczenia linii łamanej wykrywającej ruch, ustaw następujące wartości właściwości w żądaniu:

  • Aby włączyć, ustaw pole tablicy extraComputations na TRAFFIC_ON_POLYLINE obliczanie ruchu.

  • Ustaw travelMode na DRIVE lub TWO_WHEELER. Prośby dotyczące innych tryb podróży zwraca błąd.

  • Określ routing TRAFFIC_AWARE lub TRAFFIC_AWARE_OPTIMAL wybrane w żądaniu. Więcej informacji znajdziesz w artykule Konfigurowanie jakości czasu oczekiwania.

  • Ustaw maskę pola odpowiedzi, która określa, że mają być zwracane właściwości odpowiedzi:

    • Na poziomie trasy podaj w odpowiedzi wszystkie informacje dotyczące podróży do włącznie z routes.travelAdvisory w masce pola odpowiedzi. Aby zwrócić tylko informacje o ruchu drogowym, routes.travelAdvisory.speedReadingIntervals

    • Na poziomie nogi podaj w odpowiedzi wszystkie informacje dotyczące podróży. każdy etap trasy, dodając routes.legs.travelAdvisory. Aby zwrócić tylko informacje o ruchu drogowym, 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'

Przykładowa odpowiedź dla linii łamanej wykrywającej ruch

W odpowiedzi dane o ruchu są kodowane na linii łamanej i znajdują się w Pole travelAdvisory, typu RouteLegTravelAdvisory (każdą nogę) i Obiekt RouteTravelAdvisory (trasa).

Na przykład:

{
  "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"
          }
        ] 
      }
    }
  ]
}

Zarówno RouteTravelAdvisory, jak i RouteLegTravelAdvisory zawierają pole tablicy o nazwie speedReadingIntervals, która zawiera informacje o prędkości ruchu drogowego. Każdy obiekt w tablicy jest reprezentowany przez SpeedReadingInterval (REST) lub SpeedReadingInterval (gRPC).

Obiekt SpeedReadingInterval zawiera szybki odczyt dla odstępu na trasie, na przykład NORMAL, SLOW lub TRAFFIC_JAM. Cała tablica obiektów obejmuje na całej linii łamanej trasy bez nakładania się. Punkt początkowy określonego obszaru jest taki sam jak punkt końcowy poprzedniego przedziału.

Każdy interwał jest opisany za pomocą parametru startPolylinePointIndex, endPolylinePointIndex i odpowiednią kategorię prędkości. Zwróć uwagę, że brak indeksu początkowego w przedziale odpowiada indeksowi 0 zgodnie z metod Proto3.

Wartości startPolylinePointIndex i endPolylinePointIndex nie są zawsze następujących po sobie. Na przykład:

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

W tym przypadku warunki ruchu były takie same od indeksu 2 do indeksu 4.

Renderowanie linii łamanych z uwzględnieniem natężenia ruchu za pomocą pakietu SDK Map Google

Zalecamy wyświetlanie na mapie linii łamanych z uwzględnieniem natężenia ruchu za pomocą różnych funkcje oferowane przez pakiety SDK Map Google, w tym niestandardowe kolory, kreski i na rozciąganiu linii łamanej. Więcej informacji o używaniu linii łamanych zobacz Funkcje linii łamanej na Androidzie i Funkcje linii łamanej na iOS.

Przykład renderowania linii łamanych

Użytkownicy pakietu Maps SDK mają możliwość zdefiniowania niestandardowego mapowania logikę między kategoriami szybkości a schematami renderowania łamanego. Jako można na przykład wyświetlić „NORMAL” prędkość jako pogrubiona niebieska linia na podczas gdy „WOLNO” prędkość może być wyświetlana np. w postaci grubej pomarańczowej linii.

Poniższe fragmenty kodu dodają grubą niebieską linię łamaną z segmentami geodezyjnymi z z Melbourne do Perth. Więcej informacji: Dostosowywanie wyglądu (w Androidzie) oraz Dostosowywanie linii łamanej (w 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