计算路线摘要

如需使用文本搜索(新版)或附近搜索(新版)计算到响应中每个地点的行程时长和距离,请执行以下操作:

  1. 在请求中传递 routingParameters.origin 参数,以指定路线起点的经纬度坐标。此参数是必需的,用于计算响应中每个地点的时长和距离。

  2. 在字段掩码中添加 routingSummaries,以便响应包含 routingSummaries 数组。此数组包含从路线规划起点到回答中每个地点的时长和距离。

借助 APIs Explorer,您可以发出实时请求,以便熟悉 API 和 API 选项:

在以下请求中,您将计算到文本搜索(新版)响应中每个地点的行程时长和距离:

curl -X POST -d '{
  "textQuery" : "Spicy Vegetarian Food in Sydney, Australia",
  "routingParameters": {
    "origin": {
      "latitude": -33.8688,
      "longitude": 151.1957362
    }
  }
}' \
-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'

响应包含两个 JSON 数组:places 数组包含匹配的地点,routingSummaries 数组包含前往每个地点的时长和距离:

{
  "places": [
    {
      object (Place)
    }
  ]
  "routingSummaries": [
    {
      object (RoutingSummary)
    }
}

routingSummaries 数组中的每个元素都位于 places 数组中相应地点的位置。也就是说,routingSummaries[0] 处的元素对应于 places[0] 处的地点。

routingSummaries 的数组长度与 places 的数组长度相同。如果某个地点的 routingSummary 不可用,则数组条目为空。

由于此示例计算的是从路线起点到每个地点的时长和距离,因此响应中的 routingSummaries.legs 字段包含一个 Leg 对象,其中包含从路线起点到地点的 duration 和 distanceMeters。

{
  "places": [
    {
      "formattedAddress": "1, Westfield Sydney Central Plaza, 450 George St, Sydney NSW 2000, Australia",
      "displayName": {
        "text": "Gözleme King Sydney",
        "languageCode": "en"
      }
    },
    {
      "formattedAddress": "367 Pitt St, Sydney NSW 2000, Australia",
      "priceLevel": "PRICE_LEVEL_MODERATE",
      "displayName": {
        "text": "Mother Chu's Vegetarian Kitchen",
        "languageCode": "en"
      }
    },
    …
  ]
  "routingSummaries": [
    {
      "legs": [
        {
          "duration": "597s",
          "distanceMeters": 2607
        }
      ],
      "directionsUri": "https://www.google.com/maps/dir/-33.8688,151.1957362/''/data=!4m6!4m5!1m0!1m2!1m1!1s0x6b12ae3fa97cd745:0x6aecf365bf497c08!3e0"
    },
    {
      "legs": [
        {
          "duration": "562s",
          "distanceMeters": 2345
        }
      ],
      "directionsUri": "https://www.google.com/maps/dir/-33.8688,151.1957362/''/data=!4m6!4m5!1m0!1m2!1m1!1s0x6b12ae3da97f60c1:0x845f3273bd764f6c!3e0"
    },
   …
  ]
}

从此示例中,您可以看到从路线起点到结果中第一个地点的时长和距离分别为 597 秒和 2, 607 米。

在此示例中,您将计算到附近搜索响应中每个地点的行程时长和距离。此示例会搜索澳大利亚悉尼的餐馆,并将位置限制和路线起点设置为相同的纬度和经度坐标:

  curl -X POST -d '{
    "includedTypes": ["restaurant"],
    "maxResultCount": 10,
    "locationRestriction": {
      "circle": {
        "center": {
          "latitude": -33.8688,
          "longitude": 151.1957362},
        "radius": 500.0
      }
    },
    "routingParameters": {
      "origin": {
        "latitude": -33.8688,
        "longitude": 151.1957362
      }
    }
  }' \
  -H 'Content-Type: application/json' -H "X-Goog-Api-Key:API_KEY" \
  -H "X-Goog-FieldMask: places.displayName,routingSummaries" \
  https://places.googleapis.com/v1/places:searchNearby

您不必为 locationRestriction 和路线规划起点使用相同的坐标。例如,您可以将 locationRestriction 设置为悉尼的中心点,以便将搜索结果偏向该圆圈。但随后您将路线起点设置为您家的坐标,即搜索圈内的其他位置。然后,该请求会将搜索结果偏向该圆圈,并根据您住宅的位置计算路线摘要。

指定旅行选项

默认情况下,时长和距离计算针对的是汽车。不过,您可以在搜索中控制车辆类型以及其他选项。

  • 使用 routingParameters.travelMode 参数将交通方式设置为 DRIVE、BICYCLE、WALK 或 TWO_WHEELER。如需详细了解这些选项,请参阅路线可用的车辆类型。

  • 使用 routingParameters.routingPreference 属性将路线偏好选项设置为 TRAFFIC_UNAWARE(默认)、TRAFFIC_AWARE 或 TRAFFIC_AWARE_OPTIMAL。每个选项的数据质量和延迟时间各不相同。如需了解详情,请参阅指定是否以及如何添加路况数据。

    routingParameters.routingPreference 属性会影响预览版(正式发布前)directionsUri 字段中包含的路线,因为 Google 地图会在打开链接时显示路况选项。

  • 使用 routingParameters.routeModifiers 属性指定 avoidTolls、avoidHighways、avoidFerries 和 avoidIndoor。如需详细了解这些选项,请参阅指定要避开的路线特征。

在下一个示例中,您将出行方式指定为 DRIVE,并避开高速公路:

curl -X POST -d '{
  "textQuery" : "Spicy Vegetarian Food in Sydney, Australia",
  "routingParameters": {
    "origin": {
      "latitude": -33.8688,
      "longitude": 151.1957362
    },
    "travelMode":"DRIVE",
    "routeModifiers": {
      "avoidHighways": 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'

试试看!

借助 APIs Explorer,您可以发出示例请求,以便熟悉 API 和 API 选项。

  1. 选择页面右侧的 API 图标 api。

  2. (可选)修改请求参数。

  3. 选择执行按钮。在对话框中,选择要用于发出请求的账号。

  4. 在 APIs Explorer 面板中,选择全屏图标 fullscreen 以展开 APIs Explorer 窗口。