Получить транзитный маршрут

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

Чем транзитные маршруты отличаются от других маршрутов

Транзитные маршруты, которые вы запрашиваете, устанавливая travelMode для TRANSIT, отличаются от маршрутов, использующих другие параметры travelMode. Вы не можете запросить все одни и те же объекты и параметры, и ответ возвращает разные поля по сравнению с другими маршрутами.

В API маршрутов шаги представляют собой единую навигационную инструкцию для всех типов путешествий. Таким образом, каждая инструкция навигации — это шаг. Реакция транзитного маршрута очень похожа на маршруты с другими видами передвижения, но с несколькими ключевыми отличиями:

Запросить различия Различия в ответах
Вы не можете указать промежуточные путевые точки. Включает детали транзита.
Невозможно найти экологически чистые маршруты Включает метаданные для каждого режима передвижения, которые содержат сводку шагов для этого режима передвижения, в `stepsOverview` (чтобы запросить эти метаданные, используйте маску поля `routes.legs.stepsOverview`).
Невозможно указать, как и нужно ли включать данные о трафике.
Невозможно указать особенности маршрута, которых следует избегать.
Для routingPreference можно указать только transitPreferences . Подробности см. в [TransitPreferences](reference/rest/v2/TransitPreferences).

Дополнительные сведения об ответе, возвращаемом API маршрутов, см. в разделе Проверка ответов на транзитные маршруты .

Чтобы получить транзитный маршрут

  1. Установите пункт отправления и назначения.

  2. Установите транзитный режим передвижения:

    travelMode: "TRANSIT"

  3. Добавьте маску поля, чтобы получить нужные поля ответа. См. раздел Запрос необходимых полей транзитного маршрута .

  4. При необходимости установите дополнительные параметры. См. раздел Установка параметров транзитного маршрута .

Запросите необходимые поля транзитного маршрута

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

Чтобы запросить эту информацию Используйте эту маску поля
Все подробности маршрута routes.*
Все детали транзита routes.legs.steps.transitDetails
Начальная позиция для каждой ноги routes.legs.steps.startLocation
Конечная позиция для каждой ноги routes.legs.steps.endLocation
Трассировка полилинии для каждого шага routes.legs.steps.polyline
Тип транспорта, используемый для каждого шага routes.legs.steps.travelMode
Ориентировочная стоимость каждого шага и маршрута, а также локализованная расчетная стоимость проезда. routes.travel_advisory.transitFare localized routes.localizedValues.transitFare

Примечание.transitFare transitFare только в том случае, если API может определить информацию о тарифах на транзит для всех шагов.

Локализованный текст для продолжительности и расстояния routes.localizedValues

Дополнительные сведения о настройке масок полей см. в разделе Выбор полей для возврата .

Установить параметры транзитного маршрута

Вот соответствующие параметры для транзитных маршрутов:

Чтобы сделать это Используйте этот параметр Примечания
Выберите транзитный режим travelMode: "TRANSIT" Необходимый. Узнать больше .
Установите время прибытия или отъезда "arrivalTime": "yyyy-mm-ddThh:mm:ssZ"

ИЛИ

"departureTime": "yyyy-mm-ddThh:mm:ssZ"
Необязательный. Вы можете указать время прибытия или время отправления. Если ни одно время не указано, по умолчанию departure_time равно текущему времени выполнения ( now ). Вы можете установить время прибытия и отправления только в пределах следующего временного окна, используя текущее время выполнения ( now ) в качестве ссылки:
  • до и включительно 7 дней до now
  • до и включительно 100 дней после now
Время выражается в виде отметки времени в формате RFC3339 UTC «Zulu». Узнать больше
Включить альтернативные маршруты "computeAlternativeRoutes": true Необязательный. Установите значение true, чтобы API маршрутов вычислял до 3 дополнительных маршрутов, если они доступны. Узнать больше
Укажите предпочтения для типа транспорта "transitPreferences": { allowedTravelModes: ["BUS","SUBWAY","TRAIN","LIGHT_RAIL","RAIL"]}

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

Необязательный. Укажите предпочтительные виды общественного транспорта. Узнать больше
Укажите предпочтения для транзитного маршрута "transitPreferences": {routingPreference: "LESS_WALKING|FEWER_TRANSFERS"} Необязательный. Укажите предпочтения транзитной маршрутизации. Узнать больше

Пример: Получить маршрут на транзите

В следующем примере создается транзитный маршрут со следующими параметрами:

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

  • Запрашивает альтернативные маршруты.

  • Предоставляет маску поля, которая возвращает сведения о транзите:

curl -X POST -H 'content-type: application/json' -d '{
  "origin": {
    "address": "Humberto Delgado Airport, Portugal"
  },
  "destination": {
    "address": "Basílica of Estrela, Praça da Estrela, 1200-667 Lisboa, Portugal"
  },
  "travelMode": "TRANSIT",
  "computeAlternativeRoutes": true,
  "transitPreferences": {
     routingPreference: "LESS_WALKING",
     allowedTravelModes: ["TRAIN"]
  },
}' \
-H 'Content-Type: application/json' \
-H 'X-Goog-Api-Key: YOUR_API_KEY' \
-H 'X-Goog-FieldMask: routes.legs.steps.transitDetails' \
'https://routes.googleapis.com/directions/v2:computeRoutes'

В ответе показаны поля route.legs.steps.transitDetails для двух маршрутов:

{
  "routes": [
    {
    "legs": [
        {
        "steps": [
          {},
          {},
          {},
          {
          "transitDetails": {
            "stopDetails": {
            "arrivalStop": {
              "name": "Saldanha",
              "location": {
                "latLng": {
                  "latitude": 38.73532,
                  "longitude": -9.14543
                }
              }
            },
            "arrivalTime": "2023-08-26T10:49:42Z",
            "departureStop": {
              "name": "Aeroporto",
              "location": {
                "latLng": {
                  "latitude": 38.769047799999996,
                  "longitude": -9.1284593
                }
              }
            },
            "departureTime": "2023-08-26T10:32:10Z"
              },
              "localizedValues": {
              "arrivalTime": {
                  "time": {
                    "text": "11:49"
                  },
                  "timeZone": "Europe/Lisbon"
              },
              "departureTime": {
                "time": {
                  "text": "11:32"
                },
                "timeZone": "Europe/Lisbon"
              }
            },
              "headsign": "São Sebastião",
              "transitLine": {
                "agencies": [
                  {
                    "name": "Metropolitano de Lisboa, E.P.E.",
                    "phoneNumber": "+351 21 350 0115",
                    "uri": "https://www.metrolisboa.pt/"
                  }
                ],
                "name": "Vermelha",
                "color": "#f23061",
                "nameShort": "Vm",
                "textColor": "#000000",
                "vehicle": {
                  "name": {
                    "text": "Metrô"
                  },
                "type": "SUBWAY",
                "iconUri": "//maps.gstatic.com/mapfiles/transit/iw2/6/subway2.png"
                }
              },
              "stopCount": 11
            }
          },
        {},
        {
          "transitDetails": {
            "stopDetails": {
              "arrivalStop": {
                "name": "Rato",
                "location": {
                  "latLng": {
                    "latitude": 38.7201022,
                    "longitude": -9.1540562
                  }
              }
            },
            "arrivalTime": "2023-08-26T11:01:37Z",
            "departureStop": {
              "name": "Saldanha",
                "location": {
                  "latLng": {
                    "latitude": 38.73527,
                    "longitude": -9.1455200000000012
                  }
                }
              },
              "departureTime": "2023-08-26T10:57:57Z"
            },
            "localizedValues": {
              "arrivalTime": {
                "time": {
                  "text": "12:01"
                },
                "timeZone": "Europe/Lisbon"
              },
              "departureTime": {
                "time": {
                  "text": "11:57"
                },
                "timeZone": "Europe/Lisbon"
              }
            },
            "headsign": "Rato",
            "transitLine": {
              "agencies": [
                {
                "name": "Metropolitano de Lisboa, E.P.E.",
                "phoneNumber": "+351 21 350 0115",
                "uri": "https://www.metrolisboa.pt/"
                }
              ],
              "name": "Amarela",
              "color": "#f2c200",
              "nameShort": "Am",
              "textColor": "#000000",
              "vehicle": {
                "name": {
                  "text": "Metrô"
                },
                "type": "SUBWAY",
                "iconUri": "//maps.gstatic.com/mapfiles/transit/iw2/6/subway2.png"
              }
            },
            "stopCount": 4
          }
        },
        {},
        {},
        {},
        {},
        {},
        {}
        ]
      }
    ]
  }
]
}
,

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

Чем транзитные маршруты отличаются от других маршрутов

Транзитные маршруты, которые вы запрашиваете, устанавливая travelMode для TRANSIT, отличаются от маршрутов, использующих другие параметры travelMode. Вы не можете запросить все одни и те же объекты и параметры, и ответ возвращает разные поля по сравнению с другими маршрутами.

В API маршрутов шаги представляют собой единую навигационную инструкцию для всех типов путешествий. Таким образом, каждая инструкция навигации — это шаг. Реакция транзитного маршрута очень похожа на маршруты с другими видами передвижения, но с несколькими ключевыми отличиями:

Запросить различия Различия в ответах
Вы не можете указать промежуточные путевые точки. Включает детали транзита.
Невозможно найти экологически чистые маршруты Включает метаданные для каждого режима передвижения, которые содержат сводку шагов для этого режима передвижения, в `stepsOverview` (чтобы запросить эти метаданные, используйте маску поля `routes.legs.stepsOverview`).
Невозможно указать, как и нужно ли включать данные о трафике.
Невозможно указать особенности маршрута, которых следует избегать.
Для routingPreference можно указать только transitPreferences . Подробности см. в [TransitPreferences](reference/rest/v2/TransitPreferences).

Дополнительные сведения об ответе, возвращаемом API маршрутов, см. в разделе Проверка ответов на транзитные маршруты .

Чтобы получить транзитный маршрут

  1. Установите пункт отправления и назначения.

  2. Установите транзитный режим движения:

    travelMode: "TRANSIT"

  3. Добавьте маску поля, чтобы получить нужные поля ответа. См. раздел Запрос необходимых полей транзитного маршрута .

  4. При необходимости установите дополнительные параметры. См. раздел Установка параметров транзитного маршрута .

Запросите необходимые поля транзитного маршрута

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

Чтобы запросить эту информацию Используйте эту маску поля
Все подробности маршрута routes.*
Все детали транзита routes.legs.steps.transitDetails
Начальная позиция для каждой ноги routes.legs.steps.startLocation
Конечная позиция для каждой ноги routes.legs.steps.endLocation
Трассировка полилинии для каждого шага routes.legs.steps.polyline
Тип транспорта, используемый для каждого шага routes.legs.steps.travelMode
Ориентировочная стоимость каждого шага и маршрута, а также локализованная расчетная стоимость проезда. routes.travel_advisory.transitFare localized routes.localizedValues.transitFare

Примечание.transitFare transitFare только в том случае, если API может определить информацию о тарифах на транзит для всех шагов.

Локализованный текст для продолжительности и расстояния routes.localizedValues

Дополнительные сведения о настройке масок полей см. в разделе Выбор полей для возврата .

Установить параметры транзитного маршрута

Вот соответствующие параметры для транзитных маршрутов:

Чтобы сделать это Используйте этот параметр Примечания
Выберите транзитный режим travelMode: "TRANSIT" Необходимый. Узнать больше .
Установите время прибытия или отъезда "arrivalTime": "yyyy-mm-ddThh:mm:ssZ"

ИЛИ

"departureTime": "yyyy-mm-ddThh:mm:ssZ"
Необязательный. Вы можете указать время прибытия или время отправления. Если ни одно время не указано, по умолчанию departure_time равно текущему времени выполнения ( now ). Вы можете установить время прибытия и отправления только в пределах следующего временного окна, используя текущее время выполнения ( now ) в качестве ссылки:
  • до 7 дней включительно до now
  • до и включительно 100 дней после now
Время выражается в виде отметки времени в формате RFC3339 UTC «Zulu». Узнать больше
Включить альтернативные маршруты "computeAlternativeRoutes": true Необязательный. Установите значение true, чтобы API маршрутов вычислял до 3 дополнительных маршрутов, если они доступны. Узнать больше
Укажите предпочтения для типа транспорта "transitPreferences": { allowedTravelModes: ["BUS","SUBWAY","TRAIN","LIGHT_RAIL","RAIL"]}

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

Необязательный. Укажите предпочтительные виды общественного транспорта. Узнать больше
Укажите предпочтения для транзитного маршрута "transitPreferences": {routingPreference: "LESS_WALKING|FEWER_TRANSFERS"} Необязательный. Укажите предпочтения транзитной маршрутизации. Узнать больше

Пример: Получить маршрут на транзите

В следующем примере создается транзитный маршрут со следующими параметрами:

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

  • Запрашивает альтернативные маршруты.

  • Предоставляет маску поля, которая возвращает сведения о транзите:

curl -X POST -H 'content-type: application/json' -d '{
  "origin": {
    "address": "Humberto Delgado Airport, Portugal"
  },
  "destination": {
    "address": "Basílica of Estrela, Praça da Estrela, 1200-667 Lisboa, Portugal"
  },
  "travelMode": "TRANSIT",
  "computeAlternativeRoutes": true,
  "transitPreferences": {
     routingPreference: "LESS_WALKING",
     allowedTravelModes: ["TRAIN"]
  },
}' \
-H 'Content-Type: application/json' \
-H 'X-Goog-Api-Key: YOUR_API_KEY' \
-H 'X-Goog-FieldMask: routes.legs.steps.transitDetails' \
'https://routes.googleapis.com/directions/v2:computeRoutes'

В ответе показаны поля route.legs.steps.transitDetails для двух маршрутов:

{
  "routes": [
    {
    "legs": [
        {
        "steps": [
          {},
          {},
          {},
          {
          "transitDetails": {
            "stopDetails": {
            "arrivalStop": {
              "name": "Saldanha",
              "location": {
                "latLng": {
                  "latitude": 38.73532,
                  "longitude": -9.14543
                }
              }
            },
            "arrivalTime": "2023-08-26T10:49:42Z",
            "departureStop": {
              "name": "Aeroporto",
              "location": {
                "latLng": {
                  "latitude": 38.769047799999996,
                  "longitude": -9.1284593
                }
              }
            },
            "departureTime": "2023-08-26T10:32:10Z"
              },
              "localizedValues": {
              "arrivalTime": {
                  "time": {
                    "text": "11:49"
                  },
                  "timeZone": "Europe/Lisbon"
              },
              "departureTime": {
                "time": {
                  "text": "11:32"
                },
                "timeZone": "Europe/Lisbon"
              }
            },
              "headsign": "São Sebastião",
              "transitLine": {
                "agencies": [
                  {
                    "name": "Metropolitano de Lisboa, E.P.E.",
                    "phoneNumber": "+351 21 350 0115",
                    "uri": "https://www.metrolisboa.pt/"
                  }
                ],
                "name": "Vermelha",
                "color": "#f23061",
                "nameShort": "Vm",
                "textColor": "#000000",
                "vehicle": {
                  "name": {
                    "text": "Metrô"
                  },
                "type": "SUBWAY",
                "iconUri": "//maps.gstatic.com/mapfiles/transit/iw2/6/subway2.png"
                }
              },
              "stopCount": 11
            }
          },
        {},
        {
          "transitDetails": {
            "stopDetails": {
              "arrivalStop": {
                "name": "Rato",
                "location": {
                  "latLng": {
                    "latitude": 38.7201022,
                    "longitude": -9.1540562
                  }
              }
            },
            "arrivalTime": "2023-08-26T11:01:37Z",
            "departureStop": {
              "name": "Saldanha",
                "location": {
                  "latLng": {
                    "latitude": 38.73527,
                    "longitude": -9.1455200000000012
                  }
                }
              },
              "departureTime": "2023-08-26T10:57:57Z"
            },
            "localizedValues": {
              "arrivalTime": {
                "time": {
                  "text": "12:01"
                },
                "timeZone": "Europe/Lisbon"
              },
              "departureTime": {
                "time": {
                  "text": "11:57"
                },
                "timeZone": "Europe/Lisbon"
              }
            },
            "headsign": "Rato",
            "transitLine": {
              "agencies": [
                {
                "name": "Metropolitano de Lisboa, E.P.E.",
                "phoneNumber": "+351 21 350 0115",
                "uri": "https://www.metrolisboa.pt/"
                }
              ],
              "name": "Amarela",
              "color": "#f2c200",
              "nameShort": "Am",
              "textColor": "#000000",
              "vehicle": {
                "name": {
                  "text": "Metrô"
                },
                "type": "SUBWAY",
                "iconUri": "//maps.gstatic.com/mapfiles/transit/iw2/6/subway2.png"
              }
            },
            "stopCount": 4
          }
        },
        {},
        {},
        {},
        {},
        {},
        {}
        ]
      }
    ]
  }
]
}