Обработка данных о поездках

Когда вы получаете данные о поездке , ваша серверная часть получает JSON-данные, подробно описывающие ход поездки водителя. Анализируя эти данные, вы можете отслеживать поездку, обновлять информацию в диспетчерских системах и интерпретировать текущие статусы поездки, чтобы определить следующий шаг для водителя по мере его продвижения или по завершении поездки.

Прочитайте данные из полезной нагрузки.

Google Maps или Waze отправляют данные о поездке на серверы Navigation Connect, когда водитель начинает навигацию, периодически по маршруту (по умолчанию каждые 60 секунд) и по прибытии в пункт назначения. Каждое сообщение в формате JSON содержит соответствующие данные о поездке, включая координаты дороги, пройденное расстояние и расчетное время прибытия (ETA).

Приведенный ниже пример кода демонстрирует данные о поездке, которые водитель получает при запуске навигации для поездки из Кингс-Кросс в Центральный Сент-Джайлс.

{
  "name": "projects/123456/trips/221B9CD6-4146-4CBF-9556-853817654938",
  "state": "ENROUTE",
  "execution": {
    "origin": {
      "point": {
        "latitude": 51.5333329,
        "longitude": -0.1265845
      }
    },
    "destination": {
      "point": {
        "latitude": 51.515598,
        "longitude": -0.1277623
      }
    },
    "location": {
      "point": {
        "latitude": 51.5333329,
        "longitude": -0.1265845
      },
      "sourceTime": "2025-05-30T12:37:26Z",
      "serverTime": "2025-05-30T12:37:26.221069Z"
    },
    "traveledDuration": "0s",
    "remainingDuration": "990s",
    "traveledDistanceMeters": 0,
    "remainingDistanceMeters": 2879,
    "stopAddedInRoute": false
  }
}

Отслеживание статуса активных поездок

Для подтверждения успешного запуска и отслеживания прогресса проверяйте поле статуса в каждом полезном грузе.

Статус Описание
NEW Маршрут создан, но водитель еще не начал движение.
ENROUTE Водитель активно прокладывает маршрут к месту назначения. Используйте этот статус, чтобы подтвердить, что поездка прошла аутентификацию и успешно началась.

Добавлены остановки для обработки ручек

Водители могут добавлять остановки к своему маршруту во время навигации. В этом случае Navigation Connect устанавливает поле execution.stopAddedInRoute в true в полезной нагрузке данных JSON. API Navigation Connect продолжает отслеживать водителя до исходного пункта назначения. Такие показатели, как расчетное время прибытия (ETA), расстояние и продолжительность поездки, увеличиваются с учетом добавленных остановок.

Способ добавления остановок зависит от навигационного приложения и соответствует его стандартной функциональности:

  • Google Maps: Водители могут добавить несколько остановок к своему маршруту.
  • Waze: Водители могут добавить только одну остановку. Если водитель попытается добавить еще одну остановку, Waze предложит ему начать новую сессию навигации вместо добавления остановки к текущему маршруту.

Для поддержки этой функции вам не нужно настраивать параметры ввода в бэкэнде.

Устранение неполадок с аутентификацией и запуском.

Если вы не получили статус ENROUTE , вероятно, произошла ошибка аутентификации. Распространенные причины включают неправильно написанные параметры API или истекший срок действия токена поездки. Проверьте время истечения срока действия токена в вашем первоначальном ответе CreateTrip .

Если статус не меняется с NEW на ENROUTE , возможно, устройство водителя препятствует аутентификации. В таких случаях Navigation Connect не отправляет сообщения об ошибках. Проверьте следующее:

  • У водителя установлена ​​версия Waze 5.15.5 или выше, либо версия Google Maps 26.14 или выше.
  • Водитель не использует Android Auto или Apple CarPlay.
  • У водителя есть активное интернет-соединение.

Обработка оставшихся данных маршрута (только для Waze)

Если при создании поездки включена функция отображения оставшегося времени в пути, ваша серверная часть получает активную полилинию маршрута и информацию о дорожной ситуации в реальном времени от текущего местоположения водителя до конечного пункта назначения.

Вы можете собирать и обрабатывать эти данные для обеспечения работы различных функций ваших приложений, включая следующие примеры:

  • Отображение оставшейся части маршрута на карте в режиме реального времени : отображение полилинии маршрута на веб- или мобильной карте, доступной для клиентов, для обеспечения наглядности поездки водителя.
  • Повышение точности расчета времени прибытия : объедините данные о привязке к дороге и скорости движения в определенные интервалы времени, чтобы улучшить внутреннюю логистику или прогнозирование времени прибытия груза.
  • Анализ соответствия маршруту : сравните оставшуюся геометрию маршрута с ожидаемыми маршрутами отправки, чтобы оценить соблюдение водителями требований.

Navigation Connect возвращает оставшиеся сведения о маршруте в поле execution.remainingRoute , независимо от того, отправляете ли вы запрос GetTrip или получаете обновления, управляемые событиями, с помощью Google Cloud Pub/Sub. Однако формат и структура этих данных зависят от используемого метода получения.

метод GetTrip

При вызове метода GetTrip формат ответа для полилинии зависит от параметра routePolylineFormat , указанного в вашем запросе. Для получения дополнительной информации см. раздел «Настройка форматов полилиний» .

Для всех форматов полилиний Navigation Connect возвращает информацию о трафике в виде отдельного списка объектов SpeedReadingInterval в поле execution.remainingRoute.trafficInformation . Эти объекты сопоставляют категории трафика с индексами полилиний, используя следующие значения:

  • startPolylinePointIndex : Начальный индекс интервала движения на полилинии.
  • endPolylinePointIndex : Конечный индекс интервала трафика.
  • speed : Категория трафика для этого участка: NORMAL , SLOW или TRAFFIC_JAM .

Обновления Google Cloud Pub/Sub

При получении данных о поездке с помощью Pub/Sub обновления всегда возвращают оставшиеся данные о маршруте в виде единой FeatureCollection GeoJSON в поле execution.remainingRoute .

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

См. пример полезной нагрузки Pub/Sub.

Приведенный ниже пример кода демонстрирует структуру GeoJSON, возвращаемую в поле execution.remainingRoute объекта updatedTrip сообщения Pub/Sub:

{
  "type": "FeatureCollection",
  "features": [
    {
      "type": "Feature",
      "geometry": {
        "type": "LineString",
        "coordinates": [
          [-122.3934, 37.7955],
          [-122.4010, 37.7980]
        ]
      },
      "properties": {
        "speed": "SLOW"
      }
    },
    {
      "type": "Feature",
      "geometry": {
        "type": "LineString",
        "coordinates": [
          [-122.4010, 37.7980],
          [-122.4058, 37.8025],
          [-122.4187, 37.8021]
        ]
      },
      "properties": {
        "speed": "NORMAL"
      }
    }
  ]
}
    

Оптимизация размера полезной нагрузки

Поскольку массивы координат имеют большой размер, включение оставшихся данных маршрута в сообщения Pub/Sub может значительно увеличить размер полезной нагрузки (до 13–14 КБ на сообщение). При частом обновлении данных этот объем может увеличить нагрузку на серверную часть и затраты на использование ресурсов.

Для оптимизации потока используйте параметр pubsubFieldMask в объекте TripConfig при создании поездки, чтобы исключить поля с большим объемом текста. Подробнее см. раздел «Дополнительные настройки» .

Обработка конечных состояний поездки

Когда водитель достигает пункта назначения или прекращает навигацию, полезная нагрузка возвращает одно из следующих конечных состояний. Используйте эти статусы для запуска соответствующих следующих шагов в вашем приложении.

Статус Описание Рекомендуемые действия
ARRIVED Водитель добрался до места назначения. Проверьте remainingDistanceMeters . Если водитель припарковался неподалеку, но не по указанным координатам, рассмотрите возможность добавления пешеходного маршрута в ваше приложение.
SUSPENDED Водитель вручную вышел из режима пошаговой навигации до прибытия в пункт назначения.
Поскольку Google Maps или Waze не возвращают водителей автоматически в ваше приложение, если они преждевременно завершают сессию, водителю приходится вручную нажимать кнопку возврата.
Чтобы помочь водителям завершить поездку, сравните execution.location с пунктом назначения. Если расстояние еще не достигнуто, предоставьте кнопку или ссылку для возобновления поездки или переключения в пешеходный режим.
FAILED Из-за технической ошибки соединение прервалось. Это происходит, если приложение не может рассчитать маршрут или появляется предупреждение о безопасности. Водитель может продолжать движение, но вы не будете получать обновления. Вернитесь к ручному отслеживанию статуса в вашем приложении.
CLIENT_ERROR Этот статус появляется по одной из следующих причин:
  • Водитель отзывает свое согласие.
  • Водитель использует неподдерживаемую платформу, такую ​​как Android Auto или Apple CarPlay.
  • Ваше приложение повторно использует токен поездки для поездки с другим пунктом назначения.
  • Водитель находится в Соединенных Штатах в любой момент поездки, но в вашем приложении не включена функция обмена данными в США, как вы подтвердили при настройке приложения .
Вернитесь к ручному отслеживанию статуса в вашем приложении.