Обзор
Вы можете рассчитать направления (используя различные методы транспортировки) с помощью объекта DirectionsService . Этот объект взаимодействует со службой Google Maps API Directions Service, которая получает запросы на направление и возвращает эффективный путь. Время в пути является основным фактором, который оптимизируется, но могут учитываться и другие факторы, такие как расстояние, количество поворотов и многое другое. Вы можете либо самостоятельно обрабатывать эти результаты направлений, либо использовать объект DirectionsRenderer для визуализации этих результатов.
При указании пункта отправления или назначения в запросе маршрута вы можете указать строку запроса (например, «Чикаго, Иллинойс» или «Дарвин, Новый Южный Уэльс, Австралия»), значение LatLng или объект Place .
Служба Directions может возвращать составные указания с использованием серии путевых точек. Указания отображаются в виде полилинии, рисующей маршрут на карте, или дополнительно в виде серии текстовых описаний в элементе <div> (например, «Поверните направо на съезд к мосту Уильямсбург»).
Начиная
Перед использованием службы Directions в Maps JavaScript API сначала убедитесь, что Directions API (Legacy) включен в консоли Google Cloud в том же проекте, который вы настроили для Maps JavaScript API.
Чтобы просмотреть список включенных API:
- Перейдите в консоль Google Cloud .
- Нажмите кнопку Выбрать проект , затем выберите тот же проект, который вы настроили для Maps JavaScript API, и нажмите Открыть .
- В списке API на панели инструментов найдите Directions API (Legacy) .
- Если вы видите API в списке, все готово. Если API не указан, включите его на https://console.cloud.google.com/apis/library/directions-backend.googleapis.com
Ценообразование и политика
Ценообразование
Информацию о ценообразовании и политике использования службы JavaScript Directions см. в разделе Использование и выставление счетов для API Directions (устаревшая версия).
Политики
Использование сервиса Directions должно осуществляться в соответствии с политиками, описанными для Directions API (устаревшая версия) .
Запросы на направления
Доступ к службе Directions осуществляется асинхронно, поскольку API Google Maps необходимо выполнить вызов внешнего сервера. По этой причине вам необходимо передать метод обратного вызова для выполнения по завершении запроса. Этот метод обратного вызова должен обрабатывать результат(ы). Обратите внимание, что служба Directions может возвращать более одного возможного маршрута в виде массива отдельных routes[] .
Чтобы использовать маршруты в Maps JavaScript API, создайте объект типа DirectionsService и вызовите DirectionsService.route() чтобы инициировать запрос к службе Directions, передав ей литерал объекта DirectionsRequest , содержащий входные условия и метод обратного вызова для выполнения после получения ответа.
Литерал объекта DirectionsRequest содержит следующие поля:
{ origin: LatLng | String | google.maps.Place, destination: LatLng | String | google.maps.Place, travelMode: TravelMode, transitOptions: TransitOptions, drivingOptions: DrivingOptions, unitSystem: UnitSystem, waypoints[]: DirectionsWaypoint, optimizeWaypoints: Boolean, provideRouteAlternatives: Boolean, avoidFerries: Boolean, avoidHighways: Boolean, avoidTolls: Boolean, region: String }
Эти поля описаны ниже:
-
origin( обязательно ) указывает начальное местоположение, от которого рассчитываются направления. Это значение может быть указано какString(например, "Chicago, IL"), как значениеLatLngили как объект Place . Если вы используете объект Place , вы можете указать идентификатор места , строку запроса или местоположениеLatLng. Вы можете получить идентификаторы мест из служб Geocoding, Place Search и Place Autocomplete в Maps JavaScript API. Пример использования идентификаторов мест из Place Autocomplete см. в Place Autocomplete и Directions . -
destination( обязательно ) указывает конечное местоположение, до которого нужно рассчитать направление. Параметры такие же, как для поляoriginописанного выше. -
travelMode( обязательно ) указывает, какой вид транспорта использовать при расчете направлений. Допустимые значения указаны в разделе Режимы движения ниже. -
transitOptions( необязательно ) указывает значения, которые применяются только к запросам, гдеtravelMode—TRANSIT. Допустимые значения описаны в разделе Transit Options ниже. -
drivingOptions( необязательно ) указывает значения, которые применяются только к запросам, гдеtravelMode—DRIVING. Допустимые значения описаны в разделе Driving Options ниже. unitSystem( необязательно ) указывает, какую систему единиц использовать при отображении результатов. Допустимые значения указаны в разделе Системы единиц ниже.waypoints[]( необязательно ) определяет массивDirectionsWaypoints. Waypoints изменяют маршрут, прокладывая его через указанные местоположения. Waypoint указывается как литерал объекта с полями, показанными ниже:-
locationуказывает местоположение путевой точки в видеLatLng, объекта Place илиString, которая будет геокодирована. -
stopover— это логическое значение, указывающее, что путевая точка является остановкой на маршруте, что приводит к разделению маршрута на два маршрута.
(Более подробную информацию о путевых точках см. в разделе «Использование путевых точек в маршрутах» ниже.)
-
-
optimizeWaypoints( необязательно ) указывает, что маршрут с использованием предоставленныхwaypointsможет быть оптимизирован путем перестановки точек маршрута в более эффективном порядке. Еслиtrue, служба Directions вернет переупорядоченныеwaypointsв полеwaypoint_order. (Для получения дополнительной информации см. раздел Использование точек маршрута в маршрутах ниже.) -
provideRouteAlternatives( необязательно ) при значенииtrueуказывает, что служба Directions может предоставить более одного альтернативного маршрута в ответе. Обратите внимание, что предоставление альтернативных маршрутов может увеличить время ответа сервера. Это доступно только для запросов без промежуточных точек маршрута. -
avoidFerries( необязательно ) при значенииtrueуказывает, что рассчитанный маршрут(ы) должен избегать паромов, если это возможно. -
avoidHighways( необязательно ) при значенииtrueуказывает, что рассчитанный маршрут(ы) должен избегать крупных автомагистралей, если это возможно. -
avoidTolls( необязательно ) при значенииtrueуказывает, что рассчитанный маршрут(ы) должен избегать платных дорог, если это возможно. -
region( необязательно ) указывает код региона, указанный как двухсимвольное значение ccTLD («домен верхнего уровня»). (Дополнительную информацию см. в разделе «Смещение региона» ниже.)
Ниже приведен пример DirectionsRequest :
{ origin: 'Chicago, IL', destination: 'Los Angeles, CA', waypoints: [ { location: 'Joplin, MO', stopover: false },{ location: 'Oklahoma City, OK', stopover: true }], provideRouteAlternatives: false, travelMode: 'DRIVING', drivingOptions: { departureTime: new Date(/* now, or future date */), trafficModel: 'pessimistic' }, unitSystem: google.maps.UnitSystem.IMPERIAL }
Способы передвижения
При расчете маршрутов необходимо указать, какой вид транспорта использовать. В настоящее время поддерживаются следующие виды транспорта:
-
DRIVING( по умолчанию ) указывает стандартные направления движения с использованием дорожной сети. -
BICYCLINGзапрашивает маршруты для велосипедистов по велосипедным дорожкам и предпочтительным улицам. -
TRANSITзапрашивает указания по маршрутам общественного транспорта. -
WALKINGзапрашивает пешеходные маршруты по пешеходным дорожкам и тротуарам.
Ознакомьтесь с Google Maps Platform Coverage Details , чтобы определить, в какой степени страна поддерживает направления. Если вы запрашиваете направления для региона, в котором этот тип направления недоступен, ответ вернет DirectionsStatus =" ZERO_RESULTS ".
Примечание : Пешеходные маршруты могут не включать четкие пешеходные пути, поэтому пешеходные маршруты будут возвращать предупреждения в DirectionsResult . Эти предупреждения всегда должны отображаться для пользователя. Если вы не используете DirectionsRenderer по умолчанию, то вы несете ответственность за обеспечение отображения предупреждений.
Варианты транзита
Доступные параметры для запроса маршрутов различаются в зависимости от режима передвижения. При запросе транзитных маршрутов параметры avoidHighways , avoidTolls , waypoints[] и optimizeWaypoints будут проигнорированы. Вы можете указать параметры маршрутизации, специфичные для транзита, с помощью литерала объекта TransitOptions .
Указания по транзиту чувствительны ко времени. Указания будут возвращаться только для времен в будущем.
Литерал объекта TransitOptions содержит следующие поля:
{ arrivalTime: Date, departureTime: Date, modes[]: TransitMode, 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указывает, что рассчитанный маршрут должен отдавать предпочтение ограниченному количеству пеших прогулок.
-
Пример запроса DirectionsRequest по общественному транспорту показан ниже:
{ origin: 'Hoboken NJ', destination: 'Carroll Gardens, Brooklyn', travelMode: 'TRANSIT', transitOptions: { departureTime: new Date(1337675679473), modes: ['BUS'], routingPreference: 'FEWER_TRANSFERS' }, unitSystem: google.maps.UnitSystem.IMPERIAL }
Варианты вождения
Вы можете указать параметры маршрутизации для указания направления движения с помощью объекта DrivingOptions .
Объект DrivingOptions содержит следующие поля:
{ departureTime: Date, trafficModel: TrafficModel }
Эти поля описаны ниже:
-
departureTime( требуется для того, чтобы литерал объектаdrivingOptionsбыл допустимым ) указывает желаемое время отправления как объектDate. Значение должно быть установлено на текущее время или некоторое время в будущем. Оно не может быть в прошлом. (API преобразует все даты в UTC, чтобы обеспечить единообразную обработку в разных часовых поясах.) Для клиентов Google Maps Platform Premium Plan, если вы включаетеdepartureTimeв запрос, API возвращает лучший маршрут с учетом ожидаемых условий дорожного движения на тот момент и включает прогнозируемое время в пробках (duration_in_traffic) в ответ. Если вы не указываете время отправления (то есть если запрос не включаетdrivingOptions), возвращаемый маршрут является в целом хорошим маршрутом без учета условий дорожного движения. -
trafficModel( необязательно ) указывает предположения, которые следует использовать при расчете времени в пробке. Этот параметр влияет на значение, возвращаемое в полеduration_in_trafficв ответе, которое содержит прогнозируемое время в пробке на основе исторических средних значений. По умолчаниюbestguess. Разрешены следующие значения:-
bestguess(по умолчанию) указывает, что возвращаемоеduration_in_trafficдолжно быть наилучшей оценкой времени в пути, учитывая то, что известно как об исторических условиях дорожного движения, так и о реальном дорожном движении. Реальное дорожное движение становится тем важнее, чем ближеdepartureTimeк настоящему времени. -
pessimisticозначает, что возвращаемоеduration_in_trafficдолжно быть больше фактического времени в пути в большинство дней, хотя в отдельные дни с особенно плохими дорожными условиями это значение может превышаться. -
optimisticуказывает на то, что возвращаемоеduration_in_trafficдолжно быть короче фактического времени в пути в большинство дней, хотя в отдельные дни с особенно хорошими дорожными условиями время в пути может превышать это значение.
-
Ниже приведен пример DirectionsRequest для получения маршрута проезда:
{ origin: 'Chicago, IL', destination: 'Los Angeles, CA', travelMode: 'DRIVING', drivingOptions: { departureTime: new Date(Date.now() + N), // for the time N milliseconds from now. trafficModel: 'optimistic' } }
Системы единиц
По умолчанию направления рассчитываются и отображаются с использованием системы единиц страны или региона отправления. (Примечание: отправления, выраженные с использованием координат широты/долготы, а не адресов, всегда по умолчанию имеют метрические единицы.) Например, маршрут из "Чикаго, Иллинойс" в "Торонто, Онтарио" будет отображать результаты в милях, а обратный маршрут будет отображать результаты в километрах. Вы можете переопределить эту систему единиц, задав ее явно в запросе, используя одно из следующих значений UnitSystem :
-
UnitSystem.METRICопределяет использование метрической системы. Расстояния отображаются в километрах. -
UnitSystem.IMPERIALопределяет использование имперской (английской) системы. Расстояния отображаются в милях.
Примечание: эта настройка системы единиц влияет только на текст, отображаемый пользователю. Результат направления также содержит значения расстояния, не отображаемые пользователю, которые всегда выражаются в метрах.
Региональное смещение для направлений
Служба Google Maps API Directions возвращает результаты адресов, на которые влияет домен (регион или страна), из которого вы загрузили JavaScript bootstrap. (Поскольку большинство пользователей загружают https://maps.googleapis.com/ , это устанавливает неявный домен для Соединенных Штатов.) Если вы загружаете bootstrap из другого поддерживаемого домена, вы получите результаты, на которые влияет этот домен. Например, поиск по запросу "San Francisco" может возвращать разные результаты из приложений, загружающих https://maps.googleapis.com/ (США), чем из приложений, загружающих http://maps.google.es/ (Испания).
Вы также можете настроить службу Directions на возврат результатов, смещенных в сторону определенного региона, с помощью параметра region . Этот параметр принимает код региона, указанный как двухсимвольный (не числовой) субтег региона Unicode. В большинстве случаев эти теги напрямую сопоставляются с двухсимвольными значениями ccTLD («домен верхнего уровня»), такими как «uk» в «co.uk», например. В некоторых случаях тег region также поддерживает коды ISO-3166-1, которые иногда отличаются от значений ccTLD (например, «GB» для «Great Britain»).
При использовании параметра region :
- Укажите только одну страну или регион. Несколько значений игнорируются и могут привести к неудачному запросу.
- Используйте только двухсимвольные субтеги регионов (формат Unicode CLDR). Все остальные вводы приведут к ошибкам.
Региональное смещение поддерживается только для стран и регионов, поддерживающих направления. Ознакомьтесь с подробностями покрытия платформы Google Maps, чтобы узнать о международном покрытии API Directions (Legacy).
Инструкции по визуализации
Инициирование запроса маршрутов к DirectionsService с помощью метода route() требует передачи обратного вызова, который выполняется после завершения запроса на обслуживание. Этот обратный вызов вернет DirectionsResult и код DirectionsStatus в ответе.
Статус запроса маршрута
DirectionsStatus может возвращать следующие значения:
-
OKуказывает, что ответ содержит допустимыйDirectionsResult. -
NOT_FOUNDуказывает, что по крайней мере одно из местоположений, указанных в запросе в качестве источника, пункта назначения или путевых точек, не может быть геокодировано. -
ZERO_RESULTSуказывает на то, что маршрут между точкой отправления и точкой назначения не найден. -
MAX_WAYPOINTS_EXCEEDEDуказывает на то, что вDirectionsRequestбыло предоставлено слишком много полейDirectionsWaypoint. См. раздел ниже об ограничениях для точек маршрута . -
MAX_ROUTE_LENGTH_EXCEEDEDуказывает на то, что запрошенный маршрут слишком длинный и не может быть обработан. Эта ошибка возникает, когда возвращаются более сложные направления. Попробуйте уменьшить количество точек маршрута, поворотов или инструкций. -
INVALID_REQUESTуказывает, что предоставленныйDirectionsRequestбыл недействительным. Наиболее распространенными причинами этого кода ошибки являются запросы, в которых отсутствует исходная или конечная точка, или транзитный запрос, включающий промежуточные точки. -
OVER_QUERY_LIMITуказывает, что веб-страница отправила слишком много запросов в течение разрешенного периода времени. -
REQUEST_DENIEDуказывает, что веб-странице не разрешено использовать службу маршрутов. -
UNKNOWN_ERRORуказывает на то, что запрос маршрута не может быть обработан из-за ошибки сервера. Запрос может быть выполнен успешно, если вы попробуете еще раз.
Вам следует убедиться, что запрос маршрута вернул допустимые результаты, проверив это значение перед обработкой результата.
Отображение DirectionsResult
DirectionsResult содержит результат запроса маршрута, который вы можете обработать самостоятельно или передать объекту DirectionsRenderer , который может автоматически отобразить результат на карте.
Чтобы отобразить DirectionsResult с помощью DirectionsRenderer , необходимо сделать следующее:
- Создайте объект
DirectionsRenderer. - Вызовите
setMap()для рендерера, чтобы привязать его к переданной карте. - Вызовите
setDirections()на рендерере, передав емуDirectionsResult, как указано выше. Поскольку рендерер являетсяMVCObject, он автоматически обнаружит любые изменения своих свойств и обновит карту, когда изменятся связанные с ним направления.
В следующем примере вычисляются направления между двумя точками на Route 66, где исходная и конечная точки задаются заданными значениями "start" и "end" в раскрывающихся списках. DirectionsRenderer обрабатывает отображение полилинии между указанными точками и размещение маркеров в исходной точке, точке назначения и любых путевых точках, если применимо.
function initMap() { var directionsService = new google.maps.DirectionsService(); var directionsRenderer = new google.maps.DirectionsRenderer(); var chicago = new google.maps.LatLng(41.850033, -87.6500523); var mapOptions = { zoom:7, center: chicago } var map = new google.maps.Map(document.getElementById('map'), mapOptions); directionsRenderer.setMap(map); } function calcRoute() { var start = document.getElementById('start').value; var end = document.getElementById('end').value; var request = { origin: start, destination: end, travelMode: 'DRIVING' }; directionsService.route(request, function(result, status) { if (status == 'OK') { directionsRenderer.setDirections(result); } }); }
В теле HTML:
<div> <strong>Start: </strong> <select id="start" onchange="calcRoute();"> <option value="chicago, il">Chicago</option> <option value="st louis, mo">St Louis</option> <option value="joplin, mo">Joplin, MO</option> <option value="oklahoma city, ok">Oklahoma City</option> <option value="amarillo, tx">Amarillo</option> <option value="gallup, nm">Gallup, NM</option> <option value="flagstaff, az">Flagstaff, AZ</option> <option value="winona, az">Winona</option> <option value="kingman, az">Kingman</option> <option value="barstow, ca">Barstow</option> <option value="san bernardino, ca">San Bernardino</option> <option value="los angeles, ca">Los Angeles</option> </select> <strong>End: </strong> <select id="end" onchange="calcRoute();"> <option value="chicago, il">Chicago</option> <option value="st louis, mo">St Louis</option> <option value="joplin, mo">Joplin, MO</option> <option value="oklahoma city, ok">Oklahoma City</option> <option value="amarillo, tx">Amarillo</option> <option value="gallup, nm">Gallup, NM</option> <option value="flagstaff, az">Flagstaff, AZ</option> <option value="winona, az">Winona</option> <option value="kingman, az">Kingman</option> <option value="barstow, ca">Barstow</option> <option value="san bernardino, ca">San Bernardino</option> <option value="los angeles, ca">Los Angeles</option> </select> </div>
В следующем примере показаны маршруты с использованием различных видов транспорта между Хейт-Эшбери и Оушен-Бич в Сан-Франциско, штат Калифорния:
function initMap() { var directionsService = new google.maps.DirectionsService(); var directionsRenderer = new google.maps.DirectionsRenderer(); var haight = new google.maps.LatLng(37.7699298, -122.4469157); var oceanBeach = new google.maps.LatLng(37.7683909618184, -122.51089453697205); var mapOptions = { zoom: 14, center: haight } var map = new google.maps.Map(document.getElementById('map'), mapOptions); directionsRenderer.setMap(map); } function calcRoute() { var selectedMode = document.getElementById('mode').value; var request = { origin: haight, destination: oceanBeach, // Note that JavaScript allows us to access the constant // using square brackets and a string value as its // "property." travelMode: google.maps.TravelMode[selectedMode] }; directionsService.route(request, function(response, status) { if (status == 'OK') { directionsRenderer.setDirections(response); } }); }
В теле HTML:
<div> <strong>Mode of Travel: </strong> <select id="mode" onchange="calcRoute();"> <option value="DRIVING">Driving</option> <option value="WALKING">Walking</option> <option value="BICYCLING">Bicycling</option> <option value="TRANSIT">Transit</option> </select> </div>
DirectionsRenderer не только обрабатывает отображение полилинии и любых связанных маркеров, но также может обрабатывать текстовое отображение направлений в виде последовательности шагов. Для этого вызовите setPanel() в DirectionsRenderer , передав ему <div> , в котором будет отображаться эта информация. Это также гарантирует, что вы отобразите соответствующую информацию об авторских правах и любые предупреждения, которые могут быть связаны с результатом.
Текстовые указания будут предоставлены с использованием предпочтительной языковой настройки браузера или языка, указанного при загрузке API JavaScript с использованием параметра language . (Дополнительную информацию см. в разделе Локализация. ) В случае указания маршрута общественного транспорта время будет отображаться в часовом поясе на этой остановке общественного транспорта.
Следующий пример идентичен показанному выше, но включает панель <div> , на которой отображаются указания:
function initMap() { var directionsService = new google.maps.DirectionsService(); var directionsRenderer = new google.maps.DirectionsRenderer(); var chicago = new google.maps.LatLng(41.850033, -87.6500523); var mapOptions = { zoom:7, center: chicago } var map = new google.maps.Map(document.getElementById('map'), mapOptions); directionsRenderer.setMap(map); directionsRenderer.setPanel(document.getElementById('directionsPanel')); } function calcRoute() { var start = document.getElementById('start').value; var end = document.getElementById('end').value; var request = { origin:start, destination:end, travelMode: 'DRIVING' }; directionsService.route(request, function(response, status) { if (status == 'OK') { directionsRenderer.setDirections(response); } }); }
В теле HTML:
<div id="map" style="float:left;width:70%;height:100%"></div> <div id="directionsPanel" style="float:right;width:30%;height:100%"></div>
Объект DirectionsResult
При отправке запроса на маршрут в DirectionsService вы получаете ответ, состоящий из кода статуса и результата, который является объектом DirectionsResult . DirectionsResult — это литерал объекта со следующими полями:
-
geocoded_waypoints[]содержит массив объектовDirectionsGeocodedWaypoint, каждый из которых содержит сведения о геокодировании исходной точки, пункта назначения и путевых точек. -
routes[]содержит массив объектовDirectionsRoute. Каждый маршрут указывает способ добраться из исходной точки в конечную, указанную вDirectionsRequest. Обычно для любого запроса возвращается только один маршрут, если только полеprovideRouteAlternativesзапроса не установлено вtrue, в котором может быть возвращено несколько маршрутов.
Примечание: свойство via_waypoint устарело в альтернативных маршрутах. Версия 3.27 — последняя версия API, которая добавляет дополнительные промежуточные точки в альтернативных маршрутах. Для версий API 3.28 и выше вы можете продолжать реализовывать перетаскиваемые направления с помощью службы Directions, отключив перетаскивание альтернативных маршрутов. Только основной маршрут должен быть перетаскиваемым. Пользователи могут перетаскивать основной маршрут, пока он не совпадет с альтернативным маршрутом.
Геокодированные путевые точки
DirectionsGeocodedWaypoint содержит сведения о геокодировании пункта отправления, пункта назначения и путевых точек.
DirectionsGeocodedWaypoint — это литерал объекта со следующими полями:
-
geocoder_statusуказывает код статуса, полученный в результате операции геокодирования. Это поле может содержать следующие значения.-
"OK"означает, что ошибок не произошло; адрес был успешно проанализирован и был возвращен по крайней мере один геокод. -
"ZERO_RESULTS"указывает на то, что геокодирование прошло успешно, но не вернуло результатов. Это может произойти, если геокодеру был передан несуществующийaddress.
-
partial_matchуказывает, что геокодер не вернул точное совпадение для исходного запроса, хотя он смог сопоставить часть запрошенного адреса. Вы можете проверить исходный запрос на наличие опечаток и/или неполного адреса.Частичные совпадения чаще всего возникают для уличных адресов, которые не существуют в населенном пункте, который вы передаете в запросе. Частичные совпадения также могут быть возвращены, когда запрос соответствует двум или более местоположениям в одном и том же населенном пункте. Например, "Hillpar St, Bristol, UK" вернет частичное совпадение как для Henry Street, так и для Henrietta Street. Обратите внимание, что если запрос включает неправильно написанный компонент адреса, служба геокодирования может предложить альтернативный адрес. Предложения, инициированные таким образом, также будут отмечены как частичное совпадение.
-
place_id— уникальный идентификатор места, который можно использовать с другими API Google. Например, вы можете использоватьplace_idс библиотекой API Google Places, чтобы получить сведения о местном бизнесе, такие как номер телефона, часы работы, отзывы пользователей и многое другое. См. обзор идентификаторов мест . -
types[]— это массив, указывающий тип возвращаемого результата. Этот массив содержит набор из нуля или более тегов, идентифицирующих тип возвращаемого в результате объекта. Например, геокод «Чикаго» возвращает «локальность», что указывает на то, что «Чикаго» — это город, а также возвращает «политический», что указывает на то, что это политическая единица.
Направления Маршруты
Примечание : устаревший объект DirectionsTrip был переименован в DirectionsRoute . Обратите внимание, что маршрут теперь относится ко всему путешествию от начала до конца, а не просто к этапу родительской поездки.
DirectionsRoute содержит один результат из указанного источника и назначения. Этот маршрут может состоять из одного или нескольких участков (типа DirectionsLeg ) в зависимости от того, были ли указаны какие-либо промежуточные точки. Кроме того, маршрут также содержит информацию об авторских правах и предупреждения, которые должны отображаться пользователю в дополнение к информации о маршруте.
DirectionsRoute — это литерал объекта со следующими полями:
-
legs[]содержит массив объектовDirectionsLeg, каждый из которых содержит информацию об участке маршрута из двух мест в пределах заданного маршрута. Отдельный участок будет представлен для каждой указанной точки маршрута или пункта назначения. (Маршрут без точек маршрута будет содержать ровно одинDirectionsLeg.) Каждый участок состоит из серииDirectionSteps. -
waypoint_orderсодержит массив, указывающий порядок любых точек маршрута в вычисленном маршруте. Этот массив может содержать измененный порядок, еслиDirectionsRequestбыл переданoptimizeWaypoints: true. -
overview_pathсодержит массивLatLng, которые представляют приблизительный (сглаженный) путь полученных направлений. -
overview_polylineсодержит объект с однойpoints, который содержит закодированное полилинейное представление маршрута. Эта полилиния является приблизительным (сглаженным) путем результирующих направлений. -
boundsсодержитLatLngBounds, указывающий границы полилинии вдоль данного маршрута. -
copyrightsсодержит текст об авторских правах, который будет отображаться для этого маршрута. -
warnings[]содержит массив предупреждений, которые будут отображаться при показе этих направлений. Если вы не используете предоставленный объектDirectionsRenderer, вы должны обрабатывать и отображать эти предупреждения самостоятельно. -
fareсодержит общую стоимость проезда (то есть общую стоимость билета) на этом маршруте. Это свойство возвращается только для транзитных запросов и только для маршрутов, где информация о стоимости проезда доступна для всех транзитных участков. Информация включает:-
currency: код валюты ISO 4217, указывающий валюту, в которой выражена сумма. -
value: общая сумма тарифа в валюте, указанной выше.
-
Направления Ноги
Примечание : устаревший объект DirectionsRoute был переименован DirectionsLeg .
DirectionsLeg определяет один этап путешествия от исходной точки до пункта назначения в рассчитанном маршруте. Для маршрутов, не содержащих путевых точек, маршрут будет состоять из одного «этапа», но для маршрутов, определяющих одну или несколько путевых точек, маршрут будет состоять из одного или нескольких этапов, соответствующих конкретным этапам путешествия.
DirectionsLeg — это литерал объекта со следующими полями:
-
steps[]содержит массив объектовDirectionsStep, обозначающих информацию о каждом отдельном шаге на этапе пути. distanceуказывает общее расстояние, пройденное этим отрезком, в виде объектаDistanceследующего вида:-
valueуказывает расстояние в метрах -
textсодержит строковое представление расстояния, которое по умолчанию отображается в единицах, используемых в исходной точке. (Например, мили будут использоваться для любой исходной точки в пределах Соединенных Штатов.) Вы можете переопределить эту систему единиц, специально установивUnitSystemв исходном запросе. Обратите внимание, что независимо от используемой вами системы единиц, полеdistance.valueвсегда содержит значение, выраженное в метрах.
Эти поля могут быть неопределенными, если расстояние неизвестно.
-
durationуказывает общую длительность этого этапа в виде объектаDurationследующего вида:-
valueуказывает продолжительность в секундах. -
textсодержит строковое представление длительности.
Эти поля могут быть неопределенными, если длительность неизвестна.
-
duration_in_trafficуказывает общую продолжительность этого этапа с учетом текущих условий дорожного движения.duration_in_trafficвозвращается только в том случае, если все следующие условия верны:- Запрос не включает промежуточные точки остановки. То есть, он не включает промежуточные точки, где
stopovertrue. - Запрос предназначен специально для указания маршрута движения —
modeустановлен наdriving. - Поле
departureTimeвключено в запрос как часть поляdrivingOptions. - Условия дорожного движения доступны для запрашиваемого маршрута.
duration_in_trafficсодержит следующие поля:-
valueуказывает продолжительность в секундах. -
textсодержит понятное для человека представление длительности.
- Запрос не включает промежуточные точки остановки. То есть, он не включает промежуточные точки, где
-
arrival_timeсодержит расчетное время прибытия для этого этапа. Это свойство возвращается только для транзитных направлений. Результат возвращается как объектTimeс тремя свойствами:-
valueвремени, указанного в виде объекта JavaScriptDate. -
textвремя, указанное в виде строки. Время отображается в часовом поясе транзитной остановки. -
time_zoneсодержит часовой пояс этой станции. Значение — это название часового пояса, как определено в базе данных часовых поясов IANA , например, "America/New_York".
-
-
departure_timeсодержит предполагаемое время отправления для этого этапа, указанное как объектTime.departure_timeдоступно только для транзитных направлений. -
start_locationсодержитLatLngисходной точки этого отрезка. Поскольку Directions Web Service вычисляет направления между локациями, используя ближайший вариант транспортировки (обычно дорогу) в начальной и конечной точках,start_locationможет отличаться от предоставленной исходной точки этого отрезка, если, например, дорога не находится рядом с исходной точкой. -
end_locationсодержитLatLngпункта назначения этого отрезка. ПосколькуDirectionsServiceвычисляет направления между локациями, используя ближайший вариант транспортировки (обычно дорогу) в начальной и конечной точках,end_locationможет отличаться от предоставленного пункта назначения этого отрезка, если, например, дорога не находится рядом с пунктом назначения. -
start_addressсодержит понятный человеку адрес (обычно почтовый адрес) начала этого отрезка.
Этот контент следует читать как есть. Не анализируйте программно отформатированный адрес. -
end_addressсодержит понятный человеку адрес (обычно почтовый адрес) конечной точки этого отрезка.
Этот контент следует читать как есть. Не анализируйте программно отформатированный адрес.
Инструкции Шаги
DirectionsStep — это наиболее атомарная единица маршрута направления, содержащая один шаг, описывающий конкретную отдельную инструкцию по путешествию. Например, «Поверните налево на W. 4th St». Шаг не только описывает инструкцию, но и содержит информацию о расстоянии и продолжительности, касающуюся того, как этот шаг соотносится со следующим шагом. Например, шаг, обозначенный как «Выехать на I-80 West», может содержать длительность «37 миль» и «40 минут», что указывает на то, что следующий шаг находится в 37 милях/40 минутах от этого шага.
При использовании сервиса Directions для поиска маршрутов общественного транспорта массив шагов будет включать дополнительную информацию о транспорте в виде объекта transit . Если маршруты включают несколько видов транспорта, подробные указания будут предоставлены для шагов пешком или на машине в массиве steps[] . Например, шаг пешком будет включать указания от начального и конечного местоположения: «Идите пешком до Innes Ave & Fitch St». Этот шаг будет включать подробные указания для пешеходов по этому маршруту в массиве steps[] , например: «Направляйтесь на северо-запад», «Поверните налево на Arelious Walker» и «Поверните налево на Innes Ave».
DirectionsStep — это литерал объекта со следующими полями:
-
instructionsсодержат инструкции для этого шага в текстовой строке. -
distanceсодержит расстояние, пройденное этим шагом до следующего шага, как объектDistance. (См. описание вDirectionsLegвыше.) Это поле может быть неопределенным, если расстояние неизвестно. -
durationсодержит оценку времени, необходимого для выполнения шага, до следующего шага, в виде объектаDuration. (См. описание вDirectionsLegвыше.) Это поле может быть неопределенным, если длительность неизвестна. -
start_locationсодержит геокодированныеLatLngначальной точки этого шага. -
end_locationсодержитLatLngконечной точки этого шага. -
polylineсодержит объект с однойpoints, который содержит закодированное представление полилинии шага. Эта полилиния является приблизительным (сглаженным) путем шага. -
steps[]литерал объектаDirectionsStep, содержащий подробные указания для шагов ходьбы или езды в транзитных направлениях. Подшаги доступны только для транзитных направлений. -
travel_modeсодержитTravelMode, используемый на этом шаге. Транзитные направления могут включать комбинацию пешеходных и транзитных направлений. -
pathсодержит массивLatLngs, описывающий ход этого шага. -
transitсодержит специфическую для транзита информацию, такую как время прибытия и отправления, а также название транзитной линии.
Информация о транзите
Транзитные направления возвращают дополнительную информацию, которая не относится к другим видам транспорта. Эти дополнительные свойства раскрываются через объект TransitDetails , возвращаемый как свойство DirectionsStep . Из объекта TransitDetails вы можете получить доступ к дополнительной информации для объектов TransitStop , TransitLine , TransitAgency и VehicleType , как описано ниже.
Подробности транзита
Объект TransitDetails предоставляет следующие свойства:
-
arrival_stopсодержит объектTransitStop, представляющий станцию/остановку прибытия со следующими свойствами:-
nameназвание транзитной станции/остановки. например, «Юнион-сквер». -
locationместоположение транзитной станции/остановки, представленное в видеLatLng.
-
-
departure_stopсодержит объектTransitStop, представляющий станцию/остановку отправления. -
arrival_timeсодержит время прибытия, указанное как объектTimeс тремя свойствами:-
valueвремени, указанного в виде объекта JavaScriptDate. -
textвремя, указанное в виде строки. Время отображается в часовом поясе транзитной остановки. -
time_zoneсодержит часовой пояс этой станции. Значение — это название часового пояса, как определено в базе данных часовых поясов IANA , например, "America/New_York".
-
-
departure_timeсодержит время отправления, указанное как объектTime. -
headsignуказывает направление, в котором следует двигаться по этой линии, так как он обозначен на транспортном средстве или на остановке отправления. Часто это будет конечная станция. -
headway, когда доступно, это указывает на ожидаемое количество секунд между отъездами от той же остановки в это время. Например, со значениемheadway600 вы ожидаете ожидания десяти минут, если вам следует пропустить свой автобус. -
lineсодержит буквальный объектTransitLine, который содержит информацию о транзитной линии, используемой на этом этапе.TransitLineпредоставляет имя и оператор линии, а также другие свойства, описанные в справочной документацииTransitLine. -
num_stopsсодержит количество остановок на этом шаге. Включает остановку прибытия, но не остановка отъезда. Например, если ваши указания включают в себя уход от остановки A, проходя через остановки B и C и прибытие на остановку D,num_stopsвернется 3.
Транзитная линия
Объект TransitLine раскрывает следующие свойства:
-
nameсодержит полное имя этой транзитной строки. например "7 Avenue Express" или "14th St Crosstown". -
short_nameсодержит короткое имя этой транзитной строки. Обычно это будет номер строки, такой как «2» или «M14». -
agencies- это массив, содержащий единый объектTransitAgency. ОбъектTransitAgencyпредоставляет информацию об операторе этой линии, включая следующие свойства:-
nameсодержит название транзитного агентства. -
phoneсодержит номер телефона транзитного агентства. -
urlсодержит URL для транзитного агентства.
ПРИМЕЧАНИЕ . Если вы выполняете транзитные направления вручную вместо использования объекта
DirectionsRenderer, вы должны отобразить имена и URL -адреса транзитных агентств, обслуживающих результаты поездки. -
-
urlсодержит URL для этой транзитной линии, как это предусмотрено транзитным агентством. -
iconсодержит URL для значка, связанного с этой линией. Большинство городов будут использовать общие значки, которые варьируются в зависимости от типа автомобиля. Некоторые транзитные линии, такие как нью -йоркская система метро, имеют значки, специфичные для этой линии. -
colorсодержит цвет, обычно используемый в вывесках для этого транзита. Цвет будет указан как шестигранная строка, такая как: #FF0033. -
text_colorсодержит цвет текста, обычно используемый для вывески этой линии. Цвет будет указан как шестнадцатеричная строка. -
vehicleсодержит объектVehicle, который включает в себя следующие свойства:-
nameсодержит название транспортного средства на этой строке. например «Метро». -
typeсодержит тип транспортного средства, используемого на этой линии. См. Документацию типа транспортного средства для полного списка поддерживаемых значений. -
iconсодержит URL для значка, обычно связанного с этим типом транспортного средства. -
local_iconсодержит URL для значка, связанного с этим типом транспортного средства, на основе локальной транспортной вывески.
-
Тип транспортного средства
Объект VehicleType раскрывает следующие свойства:
| Ценить | Определение |
|---|---|
VehicleType.RAIL | Железнодорожный |
VehicleType.METRO_RAIL | Легкорель -транзит. |
VehicleType.SUBWAY | Подземный легкоругольник. |
VehicleType.TRAM | Над наземным легкоругольником. |
VehicleType.MONORAIL | Монорельса. |
VehicleType.HEAVY_RAIL | Тяжелый рельс. |
VehicleType.COMMUTER_TRAIN | Пригородная железная дорога. |
VehicleType.HIGH_SPEED_TRAIN | Высокоскоростный поезд. |
VehicleType.BUS | Автобус. |
VehicleType.INTERCITY_BUS | Межгоговый автобус. |
VehicleType.TROLLEYBUS | Троллейбус. |
VehicleType.SHARE_TAXI | Доля такси - это своего рода автобус с возможностью бросить и забрать пассажиров в любом месте на своем маршруте. |
VehicleType.FERRY | Перевозить. |
VehicleType.CABLE_CAR | Автомобиль, который работает на кабеле, обычно на земле. Воздушные канатные дорожки могут быть типа VehicleType.GONDOLA_LIFT . |
VehicleType.GONDOLA_LIFT | Воздушная канатная машина. |
VehicleType.FUNICULAR | Автомобиль, который подтягивается крутым наклоном кабелем. Фуникуляр, как правило, состоит из двух автомобилей, каждый автомобиль выступает в качестве противовес для другой. |
VehicleType.OTHER | Все остальные транспортные средства вернут этот тип. |
Проверка направлений
Компоненты DirectionsResults - DirectionsRoute , DirectionsLeg , DirectionsStep и TransitDetails - могут быть проверены и используются при анализе любых направлений.
Важно : если вы выполняете транзитные направления вручную вместо использования объекта DirectionsRenderer , вы должны отобразить имена и URL -адреса транзитных агентств, обслуживающих результаты поездки.
В следующем примере указываются направления к определенным туристическим достопримечательностям в Нью -Йорке. Мы осматриваем DirectionsStep маршрута, чтобы добавить маркеры для каждого шага и прикрепляем информацию к InfoWindow с учебным текстом для этого шага.
Примечание . Поскольку мы рассчитываем направления ходьбы, мы также отображаем любые предупреждения пользователю на отдельной панели <div> .
var map; var directionsRenderer; var directionsService; var stepDisplay; var markerArray = []; function initMap() { // Instantiate a directions service. directionsService = new google.maps.DirectionsService(); // Create a map and center it on Manhattan. var manhattan = new google.maps.LatLng(40.7711329, -73.9741874); var mapOptions = { zoom: 13, center: manhattan } map = new google.maps.Map(document.getElementById('map'), mapOptions); // Create a renderer for directions and bind it to the map. var rendererOptions = { map: map } directionsRenderer = new google.maps.DirectionsRenderer(rendererOptions) // Instantiate an info window to hold step text. stepDisplay = new google.maps.InfoWindow(); } function calcRoute() { // First, clear out any existing markerArray // from previous calculations. for (i = 0; i < markerArray.length; i++) { markerArray[i].setMap(null); } // Retrieve the start and end locations and create // a DirectionsRequest using WALKING directions. var start = document.getElementById('start').value; var end = document.getElementById('end').value; var request = { origin: start, destination: end, travelMode: 'WALKING' }; // Route the directions and pass the response to a // function to create markers for each step. directionsService.route(request, function(response, status) { if (status == "OK") { var warnings = document.getElementById("warnings_panel"); warnings.innerHTML = "" + response.routes[0].warnings + ""; directionsRenderer.setDirections(response); showSteps(response); } }); } function showSteps(directionResult) { // For each step, place a marker, and add the text to the marker's // info window. Also attach the marker to an array so we // can keep track of it and remove it when calculating new // routes. var myRoute = directionResult.routes[0].legs[0]; for (var i = 0; i < myRoute.steps.length; i++) { var marker = new google.maps.Marker({ position: myRoute.steps[i].start_point, map: map }); attachInstructionText(marker, myRoute.steps[i].instructions); markerArray[i] = marker; } } function attachInstructionText(marker, text) { google.maps.event.addListener(marker, 'click', function() { stepDisplay.setContent(text); stepDisplay.open(map, marker); }); }
В HTML -теле:
<div>
<strong>Start: </strong>
<select id="start">
<option value="penn station, new york, ny">Penn Station</option>
<option value="grand central station, new york, ny">Grand Central Station</option>
<option value="625 8th Avenue New York NY 10018">Port Authority Bus Terminal</option>
<option value="staten island ferry terminal, new york, ny">Staten Island Ferry Terminal</option>
<option value="101 E 125th Street, New York, NY">Harlem - 125th St Station</option>
</select>
<strong>End: </strong>
<select id="end" onchange="calcRoute();">
<option value="260 Broadway New York NY 10007">City Hall</option>
<option value="W 49th St & 5th Ave, New York, NY 10020">Rockefeller Center</option>
<option value="moma, New York, NY">MOMA</option>
<option value="350 5th Ave, New York, NY, 10118">Empire State Building</option>
<option value="253 West 125th Street, New York, NY">Apollo Theatre</option>
<option value="1 Wall St, New York, NY">Wall St</option>
</select>
<div>Использование путевых точек в маршрутах
Как отмечено в направлениях , вы также можете указать путевые точки (из Type DirectionsWaypoint ) при расчете маршрутов, используя службу направлений для ходьбы, велосипедных или вождения. Путевые точки недоступны для транзитных направлений. Путевые точки позволяют вам рассчитывать маршруты через дополнительные местоположения, и в этом случае возвращенный маршрут проходит через заданные пути.
waypoint состоит из следующих полей:
-
location(требуется) Указывает адрес путевой точки. -
stopover(необязательно) указывает, является ли эта путевая точка фактической остановкой на маршруте (true) или вместо этого только предпочтением маршрута через указанное местоположение (false). Остановкиtrueпо умолчанию.
По умолчанию служба направлений рассчитывает маршрут через предоставленные путевые точки в их данном порядке. Необязательно, вы можете передать optimizeWaypoints: true в DirectionsRequest , чтобы позволить службе направлений оптимизировать предоставленный маршрут путем перестройки путевых точек в более эффективном порядке. (Эта оптимизация является применением проблемы с продавцом .) Время в пути является основным фактором, который оптимизирован, но другие факторы, такие как расстояние, количество поворотов и многое другое, могут быть приняты во внимание при принятии решения о том, какой маршрут является наиболее эффективным. Все путевые точки должны быть остановки для службы направлений, чтобы оптимизировать их маршрут.
Если вы инструктируете службу направлений для оптимизации порядка своих путевых точек, их порядок будет возвращен в поле waypoint_order в объекте DirectionsResult .
В следующем примере вычисляются межстрановые маршруты в Соединенных Штатах, используя различные начальные точки, конечные точки и путевые точки. (Чтобы выбрать несколько точек пути, нажмите Ctrl-Click при выборе элементов в списке.) Обратите внимание, что мы осматриваем routes.start_address и routes.end_address , чтобы предоставить нам текст для начала и конечной точки каждого маршрута.
Машинопись
function initMap(): void { const directionsService = new google.maps.DirectionsService(); const directionsRenderer = new google.maps.DirectionsRenderer(); const map = new google.maps.Map( document.getElementById("map") as HTMLElement, { zoom: 6, center: { lat: 41.85, lng: -87.65 }, } ); directionsRenderer.setMap(map); (document.getElementById("submit") as HTMLElement).addEventListener( "click", () => { calculateAndDisplayRoute(directionsService, directionsRenderer); } ); } function calculateAndDisplayRoute( directionsService: google.maps.DirectionsService, directionsRenderer: google.maps.DirectionsRenderer ) { const waypts: google.maps.DirectionsWaypoint[] = []; const checkboxArray = document.getElementById( "waypoints" ) as HTMLSelectElement; for (let i = 0; i < checkboxArray.length; i++) { if (checkboxArray.options[i].selected) { waypts.push({ location: (checkboxArray[i] as HTMLOptionElement).value, stopover: true, }); } } directionsService .route({ origin: (document.getElementById("start") as HTMLInputElement).value, destination: (document.getElementById("end") as HTMLInputElement).value, waypoints: waypts, optimizeWaypoints: true, travelMode: google.maps.TravelMode.DRIVING, }) .then((response) => { directionsRenderer.setDirections(response); const route = response.routes[0]; const summaryPanel = document.getElementById( "directions-panel" ) as HTMLElement; summaryPanel.innerHTML = ""; // For each route, display summary information. for (let i = 0; i < route.legs.length; i++) { const routeSegment = i + 1; summaryPanel.innerHTML += "<b>Route Segment: " + routeSegment + "</b><br>"; summaryPanel.innerHTML += route.legs[i].start_address + " to "; summaryPanel.innerHTML += route.legs[i].end_address + "<br>"; summaryPanel.innerHTML += route.legs[i].distance!.text + "<br><br>"; } }) .catch((e) => window.alert("Directions request failed due to " + status)); } declare global { interface Window { initMap: () => void; } } window.initMap = initMap;
JavaScript
function initMap() { const directionsService = new google.maps.DirectionsService(); const directionsRenderer = new google.maps.DirectionsRenderer(); const map = new google.maps.Map(document.getElementById("map"), { zoom: 6, center: { lat: 41.85, lng: -87.65 }, }); directionsRenderer.setMap(map); document.getElementById("submit").addEventListener("click", () => { calculateAndDisplayRoute(directionsService, directionsRenderer); }); } function calculateAndDisplayRoute(directionsService, directionsRenderer) { const waypts = []; const checkboxArray = document.getElementById("waypoints"); for (let i = 0; i < checkboxArray.length; i++) { if (checkboxArray.options[i].selected) { waypts.push({ location: checkboxArray[i].value, stopover: true, }); } } directionsService .route({ origin: document.getElementById("start").value, destination: document.getElementById("end").value, waypoints: waypts, optimizeWaypoints: true, travelMode: google.maps.TravelMode.DRIVING, }) .then((response) => { directionsRenderer.setDirections(response); const route = response.routes[0]; const summaryPanel = document.getElementById("directions-panel"); summaryPanel.innerHTML = ""; // For each route, display summary information. for (let i = 0; i < route.legs.length; i++) { const routeSegment = i + 1; summaryPanel.innerHTML += "<b>Route Segment: " + routeSegment + "</b><br>"; summaryPanel.innerHTML += route.legs[i].start_address + " to "; summaryPanel.innerHTML += route.legs[i].end_address + "<br>"; summaryPanel.innerHTML += route.legs[i].distance.text + "<br><br>"; } }) .catch((e) => window.alert("Directions request failed due to " + status)); } window.initMap = initMap;
Ограничения и ограничения на путевые точки
Применяются следующие ограничения и ограничения использования:
- Максимальное количество путевых точек, разрешенных при использовании службы направлений в API Maps JavaScript, составляет 25, плюс происхождение и пункт назначения. Ограничения одинаковы для веб -службы API (Legacy) .
- Для веб -сервиса API DIRECTS (Legacy) клиентам разрешено 25 путевых точек, а также происхождение и пункт назначения.
- Google Maps Platform Platform Plamum Plan клиентам разрешено 25 путевых точек, плюс происхождение и пункт назначения.
- Путевые точки не поддерживаются для транзитных направлений.
Перетаскиваемые направления
Пользователи могут модифицировать динамические направления езды на велосипеде, ходьбы или вождения, отображаемые с использованием DirectionsRenderer , если они перетаскиваются , что позволяет пользователю выбирать и изменять маршруты, щелкнув и перетаскивая полученные пути на карте. Вы указываете, разрешает ли дисплей рендерера, устанавливая его свойства draggable на true . Транзитные направления не могут быть затягиваемыми.
Когда направления перетаскиваются, пользователь может выбрать любую точку на пути (или путевой точке) отображаемого результата и перемещать указанный компонент в новое место. DirectionsRenderer будет динамически обновляться, чтобы показать модифицированный путь. После выпуска к карте будет добавлена переходная путевая точка (обозначенная небольшим белым маркером). Выбор и перемещение сегмента пути изменит эту ногу маршрута, при этом выбор и перемещение маркера путевой точки (включая начальные и конечные точки) изменит ноги маршрута, проходящего через эту путевую точку.
Поскольку перетаскиваемые направления изменены и отображаются на стороне клиента, вы можете отслеживать и обрабатывать событие directions_changed в DirectionsRenderer , которые будут уведомлены, когда пользователь изменил отображаемые указания.
Следующий код показывает поездку из Перта на западном побережье Австралии в Сидней на восточном побережье. Код отслеживает событие directions_changed чтобы обновить общее расстояние от всех ног путешествия.
Машинопись
function initMap(): void { const map = new google.maps.Map( document.getElementById("map") as HTMLElement, { zoom: 4, center: { lat: -24.345, lng: 134.46 }, // Australia. } ); const directionsService = new google.maps.DirectionsService(); const directionsRenderer = new google.maps.DirectionsRenderer({ draggable: true, map, panel: document.getElementById("panel") as HTMLElement, }); directionsRenderer.addListener("directions_changed", () => { const directions = directionsRenderer.getDirections(); if (directions) { computeTotalDistance(directions); } }); displayRoute( "Perth, WA", "Sydney, NSW", directionsService, directionsRenderer ); } function displayRoute( origin: string, destination: string, service: google.maps.DirectionsService, display: google.maps.DirectionsRenderer ) { service .route({ origin: origin, destination: destination, waypoints: [ { location: "Adelaide, SA" }, { location: "Broken Hill, NSW" }, ], travelMode: google.maps.TravelMode.DRIVING, avoidTolls: true, }) .then((result: google.maps.DirectionsResult) => { display.setDirections(result); }) .catch((e) => { alert("Could not display directions due to: " + e); }); } function computeTotalDistance(result: google.maps.DirectionsResult) { let total = 0; const myroute = result.routes[0]; if (!myroute) { return; } for (let i = 0; i < myroute.legs.length; i++) { total += myroute.legs[i]!.distance!.value; } total = total / 1000; (document.getElementById("total") as HTMLElement).innerHTML = total + " km"; } declare global { interface Window { initMap: () => void; } } window.initMap = initMap;
JavaScript
function initMap() { const map = new google.maps.Map(document.getElementById("map"), { zoom: 4, center: { lat: -24.345, lng: 134.46 }, // Australia. }); const directionsService = new google.maps.DirectionsService(); const directionsRenderer = new google.maps.DirectionsRenderer({ draggable: true, map, panel: document.getElementById("panel"), }); directionsRenderer.addListener("directions_changed", () => { const directions = directionsRenderer.getDirections(); if (directions) { computeTotalDistance(directions); } }); displayRoute( "Perth, WA", "Sydney, NSW", directionsService, directionsRenderer, ); } function displayRoute(origin, destination, service, display) { service .route({ origin: origin, destination: destination, waypoints: [ { location: "Adelaide, SA" }, { location: "Broken Hill, NSW" }, ], travelMode: google.maps.TravelMode.DRIVING, avoidTolls: true, }) .then((result) => { display.setDirections(result); }) .catch((e) => { alert("Could not display directions due to: " + e); }); } function computeTotalDistance(result) { let total = 0; const myroute = result.routes[0]; if (!myroute) { return; } for (let i = 0; i < myroute.legs.length; i++) { total += myroute.legs[i].distance.value; } total = total / 1000; document.getElementById("total").innerHTML = total + " km"; } window.initMap = initMap;