Обзор
Служба Distance Matrix от Google рассчитывает расстояние и продолжительность поездки между несколькими пунктами отправления и назначения с использованием заданного способа передвижения.
Эта служба не возвращает подробную информацию о маршруте. Информацию о маршруте, включая полилинии и текстовые указания, можно получить, передав желаемый пункт отправления и назначения в службу маршрутов .
Начиная
Прежде чем использовать службу Distance Matrix в Maps JavaScript API, сначала убедитесь, что Distance Matrix API включен в Google Cloud Console в том же проекте, который вы настроили для Maps JavaScript API.
Чтобы просмотреть список включенных API:
- Перейдите в облачную консоль Google .
- Нажмите кнопку «Выбрать проект» , затем выберите тот же проект, который вы настроили для Maps JavaScript API, и нажмите « Открыть» .
- В списке API на информационной панели найдите Distance Matrix API .
- Если вы видите API в списке, все готово. Если API нет в списке, включите его:
- В верхней части страницы выберите ВКЛЮЧИТЬ API , чтобы отобразить вкладку «Библиотека» . Либо в меню слева выберите «Библиотека» .
- Найдите Distance Matrix API , затем выберите его из списка результатов.
- Выберите ВКЛЮЧИТЬ . Когда процесс завершится, Distance Matrix API появится в списке API на информационной панели .
Ценообразование и политика
Цены
С 16 июля 2018 года вступил в силу новый тарифный план с оплатой по мере использования для Карт, Маршрутов и Мест. Чтобы узнать больше о новых ценах и ограничениях на использование службы JavaScript Distance Matrix, см. Использование и выставление счетов для Distance Matrix API.
Примечание . Каждый запрос, отправляемый в службу Distance Matrix, ограничен количеством разрешенных элементов, при этом количество элементов определяется количеством источников , умноженным на количество пунктов назначения .
Политика
Использование сервиса Distance Matrix должно осуществляться в соответствии с политиками, описанными для Distance Matrix API .
Запросы матрицы расстояний
Доступ к службе Distance Matrix является асинхронным, поскольку API Google Maps необходимо выполнить вызов внешнего сервера. По этой причине вам необходимо передать метод обратного вызова , который будет выполняться после завершения запроса для обработки результатов.
Вы получаете доступ к службе Distance Matrix в своем коде через объект-конструктор google.maps.DistanceMatrixService
. Метод DistanceMatrixService.getDistanceMatrix()
инициирует запрос к службе Distance Matrix, передавая ему литерал объекта DistanceMatrixRequest
, содержащий пункты отправления, пункты назначения и режим путешествия, а также метод обратного вызова для выполнения после получения ответа.
var origin1 = new google.maps.LatLng(55.930385, -3.118425); var origin2 = 'Greenwich, England'; var destinationA = 'Stockholm, Sweden'; var destinationB = new google.maps.LatLng(50.087692, 14.421150); var service = new google.maps.DistanceMatrixService(); service.getDistanceMatrix( { origins: [origin1, origin2], destinations: [destinationA, destinationB], travelMode: 'DRIVING', transitOptions: TransitOptions, drivingOptions: DrivingOptions, unitSystem: UnitSystem, avoidHighways: Boolean, avoidTolls: Boolean, }, callback); function callback(response, status) { // See Parsing the Results for // the basics of a callback function. }
DistanceMatrixRequest
содержит следующие поля:
-
origins
(обязательно) — массив, содержащий одну или несколько адресных строк, объектыgoogle.maps.LatLng
или объекты Place , на основе которых рассчитывается расстояние и время. -
destinations
(обязательно) — массив, содержащий одну или несколько адресных строк, объектыgoogle.maps.LatLng
или объекты Place , до которых рассчитывается расстояние и время. -
travelMode
( необязательно ) — вид транспорта, который будет использоваться при расчете направлений. См. раздел о режимах передвижения . -
transitOptions
( необязательный ) — параметры, которые применяются только к запросам, гдеtravelMode
имеет значениеTRANSIT
. Допустимые значения описаны в разделе « Параметры транзита» . -
drivingOptions
( необязательный ) определяет значения, которые применяются только к запросам, гдеtravelMode
имеет значениеDRIVING
. Допустимые значения описаны в разделе « Параметры вождения» . -
unitSystem
( необязательно ) — Система единиц измерения, используемая при отображении расстояния. Принятые значения:-
google.maps.UnitSystem.METRIC
(по умолчанию) -
google.maps.UnitSystem.IMPERIAL
-
-
avoidHighways
( необязательно ) — еслиtrue
, маршруты между пунктами отправления и назначениями будут рассчитываться так, чтобы избегать шоссе, где это возможно. -
avoidTolls
( необязательно ) — еслиtrue
, направления между точками будут рассчитываться с использованием платных маршрутов, где это возможно.
Режимы путешествия
При расчете времени и расстояний вы можете указать, какой вид транспорта использовать. В настоящее время поддерживаются следующие режимы передвижения:
-
BICYCLING
запрашивает велосипедные маршруты по велосипедным дорожкам и предпочтительным улицам (в настоящее время доступно только в США и некоторых городах Канады). -
DRIVING
(по умолчанию) указывает стандартные направления движения с использованием дорожной сети. -
TRANSIT
запрашивает указания по маршрутам общественного транспорта. Эту опцию можно указать только в том случае, если запрос включает ключ API. Доступные варианты в запросе этого типа см. в разделе « Варианты транзита» . -
WALKING
запрашивает пешеходные маршруты по пешеходным дорожкам и тротуарам (если таковые имеются).
Варианты транзита
Транзитная служба в настоящее время находится в «экспериментальном режиме». На этом этапе мы будем внедрять ограничения скорости, чтобы предотвратить злоупотребление API. В конечном итоге мы введем ограничение на общее количество запросов на загрузку карты на основе добросовестного использования API.
Доступные параметры запроса матрицы расстояний различаются в зависимости от режима движения. В транзитных запросах параметры avoidHighways
и avoidTolls
игнорируются. Вы можете указать параметры маршрутизации для конкретного транзита через литерал объекта TransitOptions
.
Запросы на транзит чувствительны ко времени. Расчеты будут возвращены только для раз в будущем.
Литерал объекта TransitOptions
содержит следующие поля:
{ arrivalTime: Date, departureTime: Date, modes: [transitMode1, transitMode2] routingPreference: TransitRoutePreference }
Эти поля описаны ниже:
-
arrivalTime
( необязательный ) указывает желаемое время прибытия в виде объектаDate
. Если указано время прибытия, время отправления игнорируется. -
departureTime
( необязательно ) указывает желаемое время отъезда в виде объектаDate
.departureTime
будет игнорироваться, если указаноarrivalTime
. По умолчанию используется значение now (то есть текущее время), если не указано значение ни дляdepartureTime
, ниarrivalTime
. -
modes
( необязательный ) — это массив, содержащий один или несколько литералов объектаTransitMode
. Это поле можно включить только в том случае, если запрос включает ключ API. КаждыйTransitMode
определяет предпочтительный режим транзита. Допускаются следующие значения:-
BUS
указывает, что в расчетном маршруте предпочтение должно отдаваться проезду на автобусе. -
RAIL
указывает, что для расчетного маршрута следует предпочесть проезд на поезде, трамвае, легкорельсовом транспорте и метро. -
SUBWAY
указывает, что при расчете маршрута предпочтение должно отдаваться проезду на метро. -
TRAIN
указывает, что в расчетном маршруте предпочтение должно быть отдано поезду. -
TRAM
указывает, что в расчетном маршруте предпочтение следует отдать трамваю и легкорельсовому транспорту.
-
-
routingPreference
( необязательный ) определяет предпочтения для транзитных маршрутов. Используя эту опцию, вы можете смещать возвращаемые параметры вместо того, чтобы принимать лучший маршрут по умолчанию, выбранный API. Это поле можно указать только в том случае, если запрос включает ключ API. Допускаются следующие значения:-
FEWER_TRANSFERS
указывает, что рассчитанный маршрут должен отдавать предпочтение ограниченному количеству пересадок. -
LESS_WALKING
указывает, что рассчитанный маршрут должен отдавать предпочтение ограниченному количеству прогулок.
-
Варианты вождения
Используйте объект drivingOptions
, чтобы указать время отправления для расчета наилучшего маршрута до пункта назначения с учетом ожидаемых условий движения. Вы также можете указать, хотите ли вы, чтобы расчетное время в пробках было пессимистичным, оптимистичным или наилучшим расчетом, основанным на исторических условиях движения и реальном трафике.
Объект drivingOptions
содержит следующие поля:
{ departureTime: Date, trafficModel: TrafficModel }
Эти поля описаны ниже:
-
departureTime
( необходимый для корректности литерала объектаdrivingOptions
) указывает желаемое время отъезда в виде объектаDate
. Значение должно быть установлено на текущее время или некоторое время в будущем. Это не может быть в прошлом. (API преобразует все даты в формат UTC, чтобы обеспечить единообразную обработку во всех часовых поясах.) Если вы включаете в запрос значениеdepartureTime
, API возвращает лучший маршрут с учетом ожидаемых условий дорожного движения в данный момент и включает прогнозируемое время в пробке (duration_in_traffic
) в ответе. Если вы не укажете время отправления (то есть, если запрос не включаетdrivingOptions
), возвращаемый маршрут, как правило, является хорошим маршрутом без учета условий движения. -
trafficModel
( необязательный ) указывает предположения, которые следует использовать при расчете времени в пробке. Этот параметр влияет на значение, возвращаемое в полеduration_in_traffic
в ответе, которое содержит прогнозируемое время в трафике на основе исторических средних значений. По умолчанию —best_guess
. Допускаются следующие значения:-
bestguess
(по умолчанию) указывает, что возвращаемоеduration_in_traffic
должно быть наилучшей оценкой времени в пути с учетом того, что известно как об исторических условиях дорожного движения, так и о реальном трафике. Живое движение становится тем более важным, чем ближеdepartureTime
к настоящему моменту. -
pessimistic
указывает, что возвращаемоеduration_in_traffic
должно быть больше фактического времени в пути в большинстве дней, хотя в отдельные дни с особенно плохими дорожными условиями может превышать это значение. -
optimistic
указывает, что возвращаемоеduration_in_traffic
должно быть короче фактического времени в пути в большинстве дней, хотя в отдельные дни с особенно хорошими дорожными условиями может быть быстрее, чем это значение.
-
Ниже приведен пример DistanceMatrixRequest
для автомобильных маршрутов, включая время отправления и модель трафика:
{ origins: [{lat: 55.93, lng: -3.118}, 'Greenwich, England'], destinations: ['Stockholm, Sweden', {lat: 50.087, lng: 14.421}], travelMode: 'DRIVING', drivingOptions: { departureTime: new Date(Date.now() + N), // for the time N milliseconds from now. trafficModel: 'optimistic' } }
Ответы матрицы расстояний
Успешный вызов службы Distance Matrix возвращает объект DistanceMatrixResponse
и объект DistanceMatrixStatus
. Они передаются в функцию обратного вызова, указанную в запросе.
Объект DistanceMatrixResponse
содержит информацию о расстоянии и продолжительности для каждой пары отправления/назначения, для которой может быть рассчитан маршрут.
{ "originAddresses": [ "Greenwich, Greater London, UK", "13 Great Carleton Square, Edinburgh, City of Edinburgh EH16 4, UK" ], "destinationAddresses": [ "Stockholm County, Sweden", "Dlouhá 609/2, 110 00 Praha-Staré Město, Česká republika" ], "rows": [ { "elements": [ { "status": "OK", "duration": { "value": 70778, "text": "19 hours 40 mins" }, "distance": { "value": 1887508, "text": "1173 mi" } }, { "status": "OK", "duration": { "value": 44476, "text": "12 hours 21 mins" }, "distance": { "value": 1262780, "text": "785 mi" } } ] }, { "elements": [ { "status": "OK", "duration": { "value": 96000, "text": "1 day 3 hours" }, "distance": { "value": 2566737, "text": "1595 mi" } }, { "status": "OK", "duration": { "value": 69698, "text": "19 hours 22 mins" }, "distance": { "value": 1942009, "text": "1207 mi" } } ] } ] }
Результаты матрицы расстояний
Поддерживаемые поля в ответе описаны ниже.
-
originAddresses
— это массив, содержащий местоположения, переданные в полеorigins
запроса матрицы расстояний. Адреса возвращаются в том виде, в котором они отформатированы геокодером. -
destinationAddresses
— это массив, содержащий местоположения, переданные в полеdestinations
, в формате, возвращаемом геокодировщиком. -
rows
— это массив объектовDistanceMatrixResponseRow
, где каждая строка соответствует началу координат. -
elements
являются дочерними элементамиrows
и соответствуют паре источника строки с каждым пунктом назначения. Они содержат информацию о статусе, продолжительности, расстоянии и тарифе (если таковая имеется) для каждой пары отправления/назначения. - Каждый
element
содержит следующие поля:-
status
: список возможных кодов состояния см. в разделе «Коды состояния ». -
duration
: время, необходимое для прохождения этого маршрута, выраженное в секундах (полеvalue
) и в видеtext
. Текстовое значение форматируется в соответствии сunitSystem
, указанной в запросе (или в метрике, если предпочтение не указано). -
duration_in_traffic
: продолжительность времени, необходимого для проезда по этому маршруту с учетом текущих условий дорожного движения, выраженная в секундах (полеvalue
) и в видеtext
. Текстовое значение форматируется в соответствии сunitSystem
, указанной в запросе (или в метрике, если предпочтение не указано).duration_in_traffic
возвращается только в том случае, если доступны данные о трафике, установленmode
driving
, аdepartureTime
включено как часть поляdistanceMatrixOptions
в запросе. -
distance
: общее расстояние этого маршрута, выраженное в метрах (value
) и в видеtext
. Текстовое значение форматируется в соответствии сunitSystem
, указанной в запросе (или в метрике, если предпочтение не указано). -
fare
: Содержит общий тариф (то есть общую стоимость билета) по этому маршруту. Это свойство возвращается только для запросов на транзит и только для поставщиков транзита, у которых доступна информация о тарифах. Информация включает в себя:-
currency
: код валюты ISO 4217, указывающий валюту, в которой выражена сумма. -
value
: общая сумма тарифа в валюте, указанной выше.
-
-
Коды состояния
Ответ Distance Matrix включает код состояния для ответа в целом, а также статус для каждого элемента.
Коды состояния ответа
Коды состояния, применимые к DistanceMatrixResponse
передаются в объекте DistanceMatrixStatus
и включают в себя:
-
OK
— запрос действителен. Этот статус можно вернуть, даже если не найдено ни одного маршрута между пунктами отправления и назначения. См. «Коды состояния элемента» для получения информации о состоянии на уровне элемента. -
INVALID_REQUEST
— Предоставленный запрос недействителен. Часто это происходит из-за отсутствия обязательных полей. См. список поддерживаемых полей выше. -
MAX_ELEMENTS_EXCEEDED
— Продукт отправителей и пунктов назначения превышает лимит для каждого запроса . -
MAX_DIMENSIONS_EXCEEDED
— ваш запрос содержал более 25 пунктов отправления или более 25 пунктов назначения. -
OVER_QUERY_LIMIT
— Ваше приложение запросило слишком много элементов в течение разрешенного периода времени. Запрос должен быть успешным, если вы повторите попытку через разумное время. -
REQUEST_DENIED
— служба запретила использование службы Distance Matrix вашей веб-страницей. -
UNKNOWN_ERROR
— запрос матрицы расстояний не удалось обработать из-за ошибки сервера. Запрос может быть успешным, если вы повторите попытку.
Коды состояния элементов
Следующие коды состояния применяются к конкретным объектам DistanceMatrixElement
:
-
NOT_FOUND
— Не удалось геокодировать отправную точку и/или место назначения этой пары. -
OK
— ответ содержит действительный результат. -
ZERO_RESULTS
— Не удалось найти маршрут между пунктом отправления и пунктом назначения.
Анализ результатов
Объект DistanceMatrixResponse
содержит одну row
для каждого источника, переданного в запросе. Каждая строка содержит поле element
для каждой пары этого источника с указанным пунктом назначения(ов).
function callback(response, status) { if (status == 'OK') { var origins = response.originAddresses; var destinations = response.destinationAddresses; for (var i = 0; i < origins.length; i++) { var results = response.rows[i].elements; for (var j = 0; j < results.length; j++) { var element = results[j]; var distance = element.distance.text; var duration = element.duration.text; var from = origins[i]; var to = destinations[j]; } } } }