Обзор
Сервис Distance Matrix рассчитывает расстояние и время в пути между несколькими точками отправления и прибытия с учетом выбранного типа режима транспорта.
Эта служба не возвращает подробной информации о маршруте. Чтобы получить ее (в том числе линию на карте и текстовые подсказки), передайте службе Directions только один пункт отправления и один пункт назначения.
Начало работы
Перед использованием сервиса Distance Matrix убедитесь, что он включен в Google Cloud Console в том же проекте, который вы настроили для Maps JavaScript API.
Чтобы посмотреть список включенных API:
- Войдите в Google Cloud Console.
- Нажмите кнопку Select a project (Выбрать проект), затем выберите тот же проект, который вы используете для Maps JavaScript API, и нажмите Open (Открыть).
- В списке API на панели управления найдите Distance Matrix API.
- Если этот API есть в списке – все готово к работе. Если API в списке нет, включите его:
- Вверху страницы нажмите Enable API (Включить API), чтобы перейти на вкладку Library (Библиотека). Вы также можете выбрать в меню слева пункт Library (Библиотека).
- Найдите Distance Matrix API и выберите его из списка результатов.
- Нажмите Enable (Включить). Когда процесс завершится, Distance Matrix API появится в списке API на панели управления.
Цены и правила
Цены
С 16 июля 2018 г. для API Maps, Routes и Places действует новый тарифный план с оплатой по мере использования. Узнайте больше о новых ценах и лимитах на использование сервиса JavaScript Distance Matrix из статьи Статистика использования и оплата Distance Matrix API.
Примечание. Максимальное количество разрешенных элементов в каждом запросе к сервису Distance Matrix ограниченно. Оно рассчитывается как произведение числа начальных и конечных точек.
Правила
Использование сервиса Distance Matrix регулируется правилами для Distance Matrix API.
Запросы к сервису Distance Matrix
Доступ к сервису Distance Matrix осуществляется асинхронно, поскольку Google Maps API требуется отправлять вызовы на внешний сервер. По этой причине необходимо передавать метод обратного вызова, который будет выполняться по завершении запроса и обрабатывать результаты.
Для доступа к сервису Distance Matrix служит объект конструктора google.maps.DistanceMatrixService
.
Метод DistanceMatrixService.getDistanceMatrix()
инициирует отправку запроса к сервису, передавая ему литерал объекта 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
. Если значения переменныхdepartureTime
иarrivalTime
не заданы, будет применено текущее время.modes
(необязательно) – массив, содержащий один или несколько литералов объектаTransitMode
. Это поле можно задать, только если в запрос включен ключ API. ОбъектыTransitMode
указывают предпочитаемый способ передвижения. Допускаются следующие значения:BUS
– указывает, что предпочтительным способом передвижения по возможности должен быть автобус.RAIL
– указывает, что предпочтительным способом передвижения по возможности должен быть поезд, трамвай, метро или легкое метро.SUBWAY
– указывает, что предпочтительным способом передвижения по возможности должно быть метро.TRAIN
– указывает, что предпочтительным способом передвижения по возможности должен быть поезд.TRAM
– указывает, что предпочтительным способом передвижения по возможности должен быть трамвай или легкое метро.
routingPreference
(необязательно) – задает предпочтения при передвижении на общественном транспорте. С помощью этого параметра вы можете выбирать, какие варианты маршрутов желаете получать вместо оптимальных маршрутов по умолчанию. Значение для этого поля можно задать, только если в запросе есть ключ API. Допускаются следующие значения:FEWER_TRANSFERS
– указывает, что в предпочтительном маршруте должно быть как можно меньше пересадок.LESS_WALKING
– указывает, что в предпочтительном маршруте должно быть как можно меньшим расстояние, преодолеваемое пешком.
Параметры автомобильных маршрутов
Используйте объект drivingOptions
, чтобы задавать время отправления с целью нахождения лучшего маршрута с учетом загруженности дорог. При желании вы можете выбрать модель расчета продолжительности маршрута с учетом статистики по загруженности дорог и текущей обстановки: пессимистическую, оптимистическую или наиболее вероятную.
Объект drivingOptions
содержит следующие поля:
{ departureTime: Date, trafficModel: TrafficModel }
Назначение полей:
- Переменная
departureTime
, без которой литерал объектаdrivingOptions
будет недействителен, задает время отправления в объектеDate
. Для этого значения должно быть установлено текущее время или момент времени в будущем. Время в прошлом указать нельзя. Чтобы избежать ошибок с часовыми поясами, API преобразует все даты в формат UTC. Если включить в запросdepartureTime
, API вернет оптимальный маршрут с учетом прогнозируемой загруженности дорог и рассчитает потерянное в пробках время (duration_in_traffic
). Если время отправления не указывать (т. е. запрос не будет включать полеdrivingOptions
), то API вернет подходящий маршрут без учета дорожной обстановки. 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
В результате успешного вызова сервиса 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" } } ] } ] }
Результаты Distance Matrix
Ниже приведены описания поддерживаемых полей ответа.
originAddresses
– массив местоположений, переданных в полеorigins
в запросе к службе Distance Matrix. Адреса возвращаются в виде, отформатированном с помощью геокодирования.destinationAddresses
– массив местоположений, переданных в полеdestinations
, в формате, в котором они были возвращены геокодером.rows
– массив объектовDistanceMatrixResponseRow
, каждая строка в котором соответствует точке отправления.elements
– дочерние элементыrows
, которые соответствуют точке отправления в строке и связанной с ней точке прибытия. Содержат информацию о статусе, длительности, расстоянии и стоимости (при наличии) для каждой пары точек отправления/прибытия.- Каждый
element
содержит следующие поля:status
– коды статуса (возможные значения см. здесь).duration
– продолжительность поездки по маршруту в секундах, записываемая в полеvalue
и в форматеtext
. Текстовое значение меняется в соответствии с системой измерения, заданной в запросе параметромunitSystem
(по умолчанию используется метрическая).duration_in_traffic
– продолжительность поездки по маршруту с учетом загруженности дорог, записываемая в полеvalue
и в форматеtext
. Текстовое значение меняется в соответствии с системой измерения, заданной в запросе параметромunitSystem
(по умолчанию используется метрическая). Значение параметраduration_in_traffic
возвращается только для подписчиков на план Premium платформы Google Карт, если доступны данные о загруженности дорог, выбран режим (mode
)driving
, а в поле запросаdistanceMatrixOptions
включен параметрdepartureTime
.distance
– общее расстояние маршрута в метрах (value
) и в форматеtext
. Текстовое значение меняется в соответствии с системой измерения, заданной в запросе параметромunitSystem
(по умолчанию используется метрическая).fare
– общая стоимость билетов по маршруту. Возвращается только при запросе маршрутов на общественном транспорте операторов, которые предоставили информацию о стоимости проезда. Содержит:currency
– код валюты ISO 4217, в которой приведена стоимость проезда;value
– общую стоимость проезда в этой валюте.
Коды статуса
В ответ службы Distance Matrix включается код статуса ответа на запрос в целом и статусы для каждого из элементов.
Коды статуса ответов
Коды статуса, относящиеся к объекту DistanceMatrixResponse
, передаются в объекте DistanceMatrixStatus
и могут принимать следующие значения:
OK
– запрос действителен. Этот статус может возвращаться, даже если не найдено никаких маршрутов между любой парой точек отправления/прибытия. Подробнее о статусах на уровне элементов читайте ниже.INVALID_REQUEST
– переданный запрос недействителен. Этот статус обычно связан с отсутствием обязательных полей (см. список поддерживаемых полей выше).MAX_ELEMENTS_EXCEEDED
– результат умножения числа пунктов отправления и назначения в запросе превышает установленное ограничение.MAX_DIMENSIONS_EXCEEDED
– запрос содержит более 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]; } } } }