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 (REST) или RouteTravelAdvisory (gRPC).
На уровне участка эта информация включается в объект RouteLegTravelAdvisory (REST) или RouteLegTravelAdvisory (gRPC).
Как 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