Режимы транспорта

В Google Maps JavaScript API выбор режима транспорта определяет способ построения маршрута, набор доступных параметров запроса и структуру возвращаемых данных. Основой работы с маршрутами выступает сервис DirectionsService и рендерер DirectionsRenderer, а ключевым параметром — travelMode.

Перечень поддерживаемых режимов

В API предусмотрено четыре основных режима перемещения:

  • DRIVING — автомобильный маршрут
  • WALKING — пешеходный маршрут
  • BICYCLING — велосипедный маршрут
  • TRANSIT — маршрут с использованием общественного транспорта

Каждый режим влияет на алгоритмы маршрутизации, учитываемые ограничения дорог и доступные атрибуты ответа.


Общая структура запроса маршрута

Работа с режимами транспорта осуществляется через объект запроса для DirectionsService.route.

const request = {
  origin: "Almaty",
  destination: "Astana",
  travelMode: google.maps.TravelMode.DRIVING
};

const directionsService = new google.maps.DirectionsService();

directionsService.route(request, (result, status) => {
  if (status === "OK") {
    console.log(result);
  }
});

Параметр travelMode определяет стратегию построения маршрута и влияет на выбор дорог, пересадок и типов сегментов пути.


Режим DRIVING

Режим автомобильной навигации ориентирован на дорожную сеть, оптимизированную для транспортных средств.

Особенности:

  • Использует дорожную сеть (highways, streets, toll roads)
  • Учитывает односторонние движения и ограничения поворотов
  • Поддерживает расчет времени с учетом трафика
  • Может учитывать альтернативные маршруты

Дополнительные параметры:

  • avoidTolls — избегать платных дорог
  • avoidHighways — избегать автомагистралей
  • avoidFerries — избегать паромных переправ
  • drivingOptions — расширенные настройки (включая traffic model)

Пример:

const request = {
  origin: "Point A",
  destination: "Point B",
  travelMode: google.maps.TravelMode.DRIVING,
  avoidTolls: true,
  avoidHighways: false,
  drivingOptions: {
    departureTime: new Date(),
    trafficModel: "bestguess"
  }
};

Учет трафика

При указании departureTime API возвращает поле duration_in_traffic, отражающее прогнозируемое время в пути с учетом дорожной ситуации.


Режим WALKING

Пешеходный режим строит маршруты по доступной для пешеходов инфраструктуре.

Особенности:

  • Использует тротуары, пешеходные дорожки и переходы
  • Может включать лестницы, парки, внутренние проходы
  • Игнорирует автомобильные ограничения
  • Оптимизирует расстояние и удобство прохода

Ограничения:

  • Недоступны автомагистрали и дороги с запретом для пешеходов
  • Маршруты могут включать сокращения через пешеходные зоны

Пример:

const request = {
  origin: "Park",
  destination: "Museum",
  travelMode: google.maps.TravelMode.WALKING
};

Режим BICYCLING

Велосипедный режим строит маршруты с учетом инфраструктуры для велосипедистов.

Особенности:

  • Использует велодорожки и второстепенные дороги
  • Избегает крупных автомагистралей
  • Учитывает велосипедную доступность улиц
  • Может предлагать более длинные, но безопасные маршруты

Поведение маршрутизации:

Алгоритм приоритетно выбирает:

  • велополосы
  • дороги с низким трафиком
  • парковые маршруты

Пример:

const request = {
  origin: "District 1",
  destination: "District 2",
  travelMode: google.maps.TravelMode.BICYCLING
};

Режим TRANSIT

Режим общественного транспорта является наиболее сложным по структуре данных.

Особенности:

  • Использует данные транспортных систем (автобусы, метро, электрички)
  • Поддерживает расписания и пересадки
  • Учитывает время отправления и прибытия
  • Возвращает сегментированный маршрут (legs → steps → transit details)

Дополнительные параметры:

  • transitOptions — настройки маршрута общественного транспорта

    • departureTime — время отправления
    • arrivalTime — время прибытия
    • modes — типы транспорта (BUS, SUBWAY, TRAIN, TRAM)
    • routingPreference — предпочтение пересадок или скорости

Пример:

const request = {
  origin: "Station A",
  destination: "Station B",
  travelMode: google.maps.TravelMode.TRANSIT,
  transitOptions: {
    departureTime: new Date(),
    modes: ["BUS", "SUBWAY"],
    routingPreference: "FEWER_TRANSFERS"
  }
};

Структура ответа TRANSIT

Ответ включает дополнительные поля:

  • transit_details

    • line — информация о маршруте
    • vehicle — тип транспорта
    • departure_stop и arrival_stop
    • num_stops — количество остановок

Сравнение режимов с точки зрения данных ответа

Различия между режимами отражаются не только в маршрутах, но и в структуре ответа:

  • DRIVING — акцент на дорожных сегментах и трафике
  • WALKING — упрощенные шаги без транспортных объектов
  • BICYCLING — маршруты с приоритетом альтернативных дорог
  • TRANSIT — многоуровневая структура с расписаниями и пересадками

Комбинирование режимов в интерфейсных сценариях

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

function calculateRoute(mode) {
  const request = {
    origin: "Start",
    destination: "End",
    travelMode: mode
  };

  directionsService.route(request, (result, status) => {
    if (status === "OK") {
      directionsRenderer.setDirections(result);
    }
  });
}

calculateRoute(google.maps.TravelMode.WALKING);
calculateRoute(google.maps.TravelMode.DRIVING);

Такой подход позволяет сравнивать маршруты по времени, расстоянию и структуре.


Влияние режима транспорта на оптимизацию маршрута

Алгоритм маршрутизации внутри API использует разные критерии оптимизации:

  • минимизация времени (DRIVING, TRANSIT)
  • минимизация расстояния (WALKING, BICYCLING)
  • баланс безопасности и доступности (BICYCLING)
  • учет расписаний и пересадок (TRANSIT)

Каждый режим фактически переключает набор графов дорожной сети, по которым строится путь.


Работа с альтернативными маршрутами

Для режимов DRIVING и TRANSIT можно запрашивать альтернативные маршруты:

const request = {
  origin: "A",
  destination: "B",
  travelMode: google.maps.TravelMode.DRIVING,
  provideRouteAlternatives: true
};

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


Влияние параметров геокодирования и ограничений

Режим транспорта тесно связан с дополнительными параметрами:

  • waypoints — промежуточные точки маршрута
  • optimizeWaypoints — оптимизация порядка точек
  • region — приоритет региона маршрутизации

Пример с промежуточными точками:

const request = {
  origin: "A",
  destination: "D",
  waypoints: [
    { location: "B", stopover: true },
    { location: "C", stopover: true }
  ],
  travelMode: google.maps.TravelMode.DRIVING
};

Особенности визуализации маршрутов

DirectionsRenderer автоматически адаптирует отображение в зависимости от режима:

  • DRIVING — выделение дорог с учетом трасс
  • WALKING — упрощенная линия маршрута
  • BICYCLING — визуально акцентированные альтернативные пути
  • TRANSIT — сегментированная линия с иконками транспорта

Дополнительно доступны:

  • кастомизация полилиний (polylineOptions)
  • скрытие маркеров
  • настройка уровня детализации шагов

Ограничения и поведение API

Некоторые ограничения зависят от режима:

  • TRANSIT требует доступных транспортных данных в регионе
  • BICYCLING может не поддерживаться в некоторых странах
  • WALKING ограничен географической доступностью пешеходных маршрутов
  • DRIVING зависит от качества дорожной карты и актуальности трафика

При отсутствии данных API возвращает статус ошибки маршрута, например ZERO_RESULTS.


Итерации маршрутов и переключение режимов в логике приложения

При динамическом выборе режима транспорта важно учитывать повторное вычисление маршрута:

  • изменение travelMode требует нового запроса
  • кэширование маршрутов возможно только на уровне приложения
  • визуализация должна сбрасываться перед новым рендером

Типовой цикл:

  1. изменение режима
  2. формирование нового request
  3. вызов DirectionsService.route
  4. обновление DirectionsRenderer

Роль travelMode в архитектуре навигационных систем

travelMode выступает центральным параметром, определяющим:

  • структуру графа маршрутизации
  • набор доступных дорог и связей
  • тип метрик оптимизации
  • формат данных ответа

Таким образом, режим транспорта не является просто параметром запроса, а переключает поведение всей подсистемы построения маршрутов внутри API.