Как объединить сводки маршрутов с поиском по маршруту

Вы можете объединить расчеты сводки маршрута с поиском вдоль маршрута. В этом случае текстовый поиск (New) возвращает в ответе продолжительность поездки и расстояние до каждого места, а затем от каждого места до конечного пункта маршрута.

Чтобы использовать новый текстовый поиск для расчета сводки маршрута вместе с поиском по маршруту:

  1. Используйте Routes API, чтобы рассчитать маршрут, который возвращает ломаную линию маршрута в ответе.

  2. Используйте параметр searchAlongRouteParameters.polyline.encodedPolyline, чтобы передать ломаную линию маршрута в текстовый поиск (New) и сместить результаты поиска в сторону маршрута. В ответе будут места, которые соответствуют критериям поиска и находятся рядом с указанным маршрутом.

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

API Explorer позволяет отправлять запросы в реальном времени, чтобы вы могли ознакомиться с API и его возможностями.

По умолчанию текстовый поиск (New) выполняет поиск по всему маршруту:

curl -X POST -d '{
  "textQuery" : "Spicy Vegetarian Food",
  "searchAlongRouteParameters": {
    "polyline": {
      "encodedPolyline": "ROUTE_POLYLINE"
    }
  }
}' \
-H 'Content-Type: application/json' -H 'X-Goog-Api-Key: API_KEY' \
-H 'X-Goog-FieldMask: places.displayName,places.formattedAddress,places.priceLevel,routingSummaries' \
'https://places.googleapis.com/v1/places:searchText'

Ответ содержит два массива: массив places с подходящими местами и массив routingSummaries с длительностью и расстоянием до каждого места.

{
  "places": [
    {
      "formattedAddress": "1199 El Camino Real, San Bruno, CA 94066, USA",
      "priceLevel": "PRICE_LEVEL_INEXPENSIVE",
      "displayName": {
        "text": "Vegan Mob - Vegan BBQ and Soul Food",
        "languageCode": "en"
      }
    },
    {
      "formattedAddress": "839 Kearny St, San Francisco, CA 94108, USA",
      "priceLevel": "PRICE_LEVEL_MODERATE",
      "displayName": {
        "text": "Enjoy Vegetarian",
        "languageCode": "en"
      }
    },
   …
],
  "routingSummaries": [
    {
      "legs": [
        {
          "duration": "285s",
          "distanceMeters": 1616
        },
        {
          "duration": "2466s",
          "distanceMeters": 58147
        }
      ],
      "directionsUri": "https://www.google.com/maps/dir/37.42268,-122.08473/''/37.77877,-122.38781/data=!4m7!4m6!1m0!1m2!1m1!1s0x808f87f9ede375f5:0xa37171fea1a16b28!1m0!3e0"
    },
    {
      "legs": [
        {
          "duration": "696s",
          "distanceMeters": 4704
        },
        {
          "duration": "2787s",
          "distanceMeters": 58901
        }
      ],
      "directionsUri": "https://www.google.com/maps/dir/37.42268,-122.08473/''/37.77877,-122.38781/data=!4m7!4m6!1m0!1m2!1m1!1s0x808580f4cebdb06f:0xd3af09e5742234f2!1m0!3e0"
    },
   …
  ]
}

Для каждой записи в массиве legs текстовый поиск (новый) возвращает время поездки, состоящей из двух этапов:

  • Первый этап содержит продолжительность поездки и расстояние от пункта отправления до места. В этом примере время и расстояние от начальной точки до первого места в результатах составляют 285 секунд и 1616 метров.

  • Второй отрезок содержит время в пути и расстояние от места до пункта назначения. В этом примере продолжительность и расстояние составляют 2466 секунд и 58 147 метров.

Укажите пункт отправления, способ передвижения и модификаторы маршрута

Вы можете изменить расчет сводки по поиску и маршруту, указав пункт отправления, способ передвижения, модификаторы маршрута и предпочтения маршрута. Способ передвижения и модификаторы маршрута работают так же, как и при расчете сводных данных о маршруте без указания маршрута, как показано в разделе Указание параметров поездки.

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

В следующем примере вы указываете в качестве пункта отправления координаты Сан-Матео (Калифорния), задаете избегание платных дорог и устанавливаете количество результатов равным 5:

  curl -X POST -d '{
    "textQuery" : "Spicy Vegetarian Food",
    "maxResultCount": 5,
    "searchAlongRouteParameters": {
      "polyline": {
        "encodedPolyline": "ROUTE_POLYLINE"
      }
    },
    "routingParameters": {
      "origin": {
        "latitude": 37.56617,
        "longitude": -122.30870
      },
      "travelMode":"DRIVE",
      "routeModifiers": {
        "avoidTolls": true
      }
    }
  }' \
  -H 'Content-Type: application/json' -H 'X-Goog-Api-Key: API_KEY' \
  -H 'X-Goog-FieldMask: places.displayName,places.formattedAddress,places.priceLevel,routingSummaries' \
  'https://places.googleapis.com/v1/places:searchText'

На изображении ниже показана карта с ломаной линией маршрута, новым пунктом отправления (светло-синий маркер) и местами из результатов поиска (зеленые маркеры). Обратите внимание, что все результаты находятся вдоль маршрута, но за Сан-Матео:

Результаты поиска из источника обновления.

Попробовать

С помощью API Explorer можно отправлять тестовые запросы, чтобы ознакомиться с API и его возможностями.

  1. Нажмите на значок API api в правой части страницы.

  2. При необходимости измените параметры запроса.

  3. Нажмите кнопку Execute (Выполнить). В диалоговом окне выберите аккаунт, который хотите использовать для отправки запроса.

  4. На панели API Explorer нажмите на значок полноэкранного режима fullscreen, чтобы развернуть окно API Explorer.