计算路由摘要

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

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

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

借助 API 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 对象,该对象包含从路线起点到地点的 durationdistanceMeters

{
  "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 秒和 2607 米。

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

  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 参数将传输模式设置为 DRIVEBICYCLEWALKTWO_WHEELER。如需详细了解这些选项,请参阅路线的可用车辆类型

  • 使用 routingParameters.routingPreference 属性将路由偏好设置选项设置为 TRAFFIC_UNAWARE(默认)、TRAFFIC_AWARETRAFFIC_AWARE_OPTIMAL。每种选项的数据质量和延迟时间各不相同。如需了解详情,请参阅指定是否要包含流量数据以及如何包含

    routingParameters.routingPreference 属性确实会影响“预览(GA 之前)”directionsUri 字段中包含的路线,因为 Google 地图在打开链接时会显示交通选项。

  • 使用 routingParameters.routeModifiers 属性指定 avoidTollsavoidHighwaysavoidFerriesavoidIndoor。如需详细了解这些选项,请参阅指定要避开的路线地图项

在下一个示例中,您将旅行模式指定为 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'