В настоящее время Routes API находится в предварительной версии (pre-GA). Продукты и функции до общедоступной версии могут иметь ограниченную поддержку, а изменения в продуктах и ​​функциях до общедоступной версии могут быть несовместимы с другими версиями до общедоступной версии. Предложения Pre-GA подпадают под действие Особых условий использования платформы Google Карт . Дополнительные сведения см. в описаниях стадий запуска .

Запрос информации о трафике на ломаных линиях

Оптимизируйте свои подборки Сохраняйте и классифицируйте контент в соответствии со своими настройками.

Routes API позволяет запрашивать информацию об условиях движения вдоль полилинии с учетом трафика. Условия трафика выражаются в категориях скорости ( NORMAL , SLOW , TRAFFIC_JAM ), применимых к заданному интервалу полилинии ответа. Интервалы определяются индексами их начальной (включающей) и конечной (исключающей) точек полилинии.

Дополнительные сведения о полилиниях см.

  • Настройте качество и задержку для получения информации о настройке качества сюжетной линии.
  • Формат алгоритма кодированной полилинии описывает алгоритм кодирования полилинии.
  • Утилита Interactive Polyline Encoder позволяет создавать закодированные полилинии в пользовательском интерфейсе или декодировать полилинии для отображения на карте. Например, используйте эту утилиту для декодирования полилинии, созданной с помощью приведенного ниже кода.

Возврат полилинии

Полилиния представлена ​​объектом Polyline (REST) ​​или Polyline (gRPC). Вы можете вернуть ломаную линию в ответ как на уровне маршрута, так и на уровне участка.

Контролируйте, какую полилинию возвращать, используя маску поля ответа :

  • На уровне маршрута верните ломаную линию в ответ, включив routes.polyline в маску поля ответа.

  • На уровне участка верните ломаную линию в ответ для каждого участка маршрута, включив в routes.legs.polyline .

Например, чтобы вернуть полилинию для всего маршрута и для каждого этапа:

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

Настроить тип полилинии

Метод ComputeRoutes (REST) ​​и метод ComputeRoutes (gRPC) поддерживают параметр запроса polylineEncoding для управления типом полилинии.

polylineEncoding указывает, как кодировать полилинию как ENCODED_POLYLINE (по умолчанию), что означает использование алгоритма кодирования полилинии, или GEO_JSON_LINESTRING , что означает использование формата LineString GeoJSON.

Например, в теле запроса:

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

Возврат информации о трафике

Вы можете настроить ответ, чтобы он включал информацию о платных дорогах и возможных ограничениях зоны трафика:

Как RouteTravelAdvisory, так и RouteLegTravelAdvisory включают в себя поле массива для информации о скорости трафика с подробным описанием плотности трафика. Каждый объект в массиве представлен объектом SpeedReadingInterval (REST) ​​или SpeedReadingInterval (gRPC).

Объект SpeedReadingInterval включает показания скорости для интервала маршрута. Весь массив объектов покрывает всю полилинию маршрута без перекрытия. Начальная точка указанного интервала совпадает с конечной точкой предыдущего интервала.

Чтобы настроить метод для возврата информации о трафике с ломаной линией, используйте маску поля ответа :

  • На уровне маршрута верните в ответ всю информацию о трафике, включив в маску поля ответа routes.travelAdvisory . Чтобы вернуть только SpeedReadingInterval, укажите routes.travelAdvisory.speedReadingIntervals

  • На уровне участка верните информацию о дорожном движении в ответ для каждого участка маршрута, включив routes.legs.travelAdvisory.speedReadingIntervals или routes.legs.steps.travelAdvisory.speedReadingIntervals .

При возврате информации о трафике вы обычно возвращаете в ответе и полилинию, и информацию о трафике:

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

Пример ответа для полилинии с учетом трафика

В ответе трафик на уровне маршрута доступен в routes.travelAdvisory.speedReadingIntervals . Трафик на уровне ветвей доступен в routes.legs.travelAdvisory.speedReadingIntervals .

Каждый интервал описывается его startPolylinePointIndex , endPolylinePointIndex и соответствующей категорией скорости. Обратите внимание, что отсутствие начального индекса в интервале соответствует индексу 0 в соответствии с практикой proto3 .

Значения startPolylinePointIndex и endPolylinePointIndex не всегда являются последовательными. Например:

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

В этом случае условия движения были одинаковыми от индекса 2 до индекса 4.

Ниже показан полный ответ:

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

Визуализация полилиний с учетом пробок с помощью Maps SDK

Мы рекомендуем отображать на карте полилинии с учетом дорожного движения, используя различные функции, предлагаемые SDK Google Maps, включая настраиваемые цвета, штрихи и узоры вдоль участков ломаных линий. Дополнительные сведения об использовании полилиний см. в разделах Функции полилиний для Android и Функции полилиний для iOS .

Пример рендеринга полилинии

Пользователи Maps SDK имеют возможность определить собственную логику сопоставления между категориями скорости и схемами рендеринга полилиний. Например, можно решить отобразить «НОРМАЛЬНУЮ» скорость толстой синей линией на карте, а «МЕДЛЕННУЮ» скорость — толстой оранжевой линией и т. д.

Следующие фрагменты добавляют толстую синюю полилинию с геодезическими сегментами от Мельбурна до Перта. Дополнительные сведения см. в разделах Настройка внешнего вида (для Android) и Настройка полилинии (для iOS).

Андроид

Джава

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));

Котлин

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

Цель-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;

Быстрый

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