搜索目的地

欧洲经济区 (EEA) 开发者

Destination 是指用户打算前往或导航到的重要兴趣点或特定位置。Destination 可以包含导航点、地标、入口和建筑物轮廓等信息。

通过 Geocoding API 的 SearchDestinations 端点,您可以根据不同的输入条件(例如地址、地点 ID 或纬度和经度坐标)检索有关各种目的地的详细信息。

搜索目的地请求

搜索目的地请求是向以下格式的网址发出的 HTTP POST 请求:

https://geocode.googleapis.com/v4alpha/geocode/destinations

在 JSON 请求正文或标头中传递所有参数,作为 POST 请求的一部分。例如:

curl -X POST -d '{
  "place": "places/ChIJY8sv5-i2j4AR_S6BlDDR42w"
}' \
-H 'Content-Type: application/json' -H "X-Goog-Api-Key: API_KEY" \
-H "X-Goog-FieldMask: *" \
https://geocode.googleapis.com/v4alpha/geocode/destinations

您可以通过以下 3 种方式之一指定目的地搜索位置:

  • 地址
  • 地点 ID
  • 经纬坐标

按地址搜索目的地

您可以将地址指定为非结构化字符串:

curl -X POST -d '{
  "addressQuery": {
    "addressQuery": "601 S Bernardo Ave, Sunnyvale, CA 94087, USA"
  }
}' \
-H 'Content-Type: application/json' -H "X-Goog-Api-Key: API_KEY" \
-H "X-Goog-FieldMask: *" \
https://geocode.googleapis.com/v4alpha/geocode/destinations

或作为 postalAddress

curl -X POST -d '{
  "addressQuery": {
    "address": {
      "addressLines": ["601 S Bernardo Ave"],
      "locality": "Sunnyvale",
      "postalCode": "94087",
      "administrativeArea": "CA",
      "regionCode": "US"
    }
  }
}' \
-H 'Content-Type: application/json' -H "X-Goog-Api-Key: API_KEY" \
-H "X-Goog-FieldMask: *" \
https://geocode.googleapis.com/v4alpha/geocode/destinations

在处理 HTML 表单中捕获的地址组成部分时,您通常会使用 postalAddress 格式。

按地点 ID 搜索目的地

您可以通过提供地点 ID 来检索目的地:

curl -X POST -d '{
  "place": "places/ChIJY8sv5-i2j4AR_S6BlDDR42w"
}' \
-H 'Content-Type: application/json' -H "X-Goog-Api-Key: API_KEY" \
-H "X-Goog-FieldMask: *" \
https://geocode.googleapis.com/v4alpha/geocode/destinations

按位置搜索目的地

您可以通过提供纬度和经度坐标来搜索目的地:

curl -X POST -d '{
  "locationQuery": {
    "location": {
      "latitude": 37.37348780,
      "longitude": -122.05678064
    }
  }
}' \
-H 'Content-Type: application/json' -H "X-Goog-Api-Key: API_KEY" \
-H "X-Goog-FieldMask: *" \
https://geocode.googleapis.com/v4alpha/geocode/destinations

使用 OAuth 发出请求

Geocoding API v4 支持使用 OAuth 2.0 进行身份验证。如需将 OAuth 与 Geocoding API 搭配使用,必须为 OAuth 令牌分配正确的范围。Geocoding API 支持以下范围,以便与 Destinations 端点搭配使用:

  • https://www.googleapis.com/auth/maps-platform.geocode - 与所有 Geocoding API 端点搭配使用。

此外,您还可以为所有 Geocoding API 端点使用常规 https://www.googleapis.com/auth/cloud-platform 范围。该范围在开发期间很有用,但在生产期间则不然,因为这是一个通用范围,允许访问所有端点。

如需了解详情和示例,请参阅使用 OAuth

“搜索目的地”响应

有关位置的超本地化背景信息

“搜索目的地”响应会提供有关位置的丰富超本地化背景信息。关键字段包括:

  • primary:请求中查询所标识的主要地点。
  • containingPlaces:主要目的地所属的更大型实体(例如,包含商店的购物中心)。
  • subDestinations:主要目的地内更具体的位置(例如,建筑物内的公寓)。
  • entrances:目的地的具体入口点和出口点。
  • navigationPoints:适合导航到终点的道路附近位置。
  • arrivalSummary:利用 AI 赋能的数据洞见来帮助您顺利抵达。请参阅 AI 赋能的摘要
  • landmarks:附近值得注意的地点,可帮助用户了解目的地的周边环境。

如需详细了解所有响应字段,请参阅 API 参考文档

回答格式

SearchDestinations 会返回以下 JSON 格式的 SearchDestinationsResponse

{
  "destinations": [
    {
      "primary": {
        "place": "places/ChIJY8sv5-i2j4AR_S6BlDDR42w",
        "displayName": {
          "text": "Arby's",
          "languageCode": "en"
        },
        "primaryType": "fast_food_restaurant",
        "types": [
          "fast_food_restaurant",
          "sandwich_shop",
          "deli",
          "american_restaurant",
          "meal_takeaway",
          "restaurant",
          "food_store",
          "food",
          "point_of_interest",
          "store",
          "establishment"
        ],
        "formattedAddress": "Arby's, 601 S Bernardo Ave, Sunnyvale, CA 94087, USA",
        "postalAddress": {
          "regionCode": "US",
          "languageCode": "en",
          "postalCode": "94087",
          "administrativeArea": "CA",
          "locality": "Sunnyvale",
          "addressLines": [
            "601 S Bernardo Ave"
          ]
        },
        "structureType": "BUILDING",
        "location": {
          "latitude": 37.3734545,
          "longitude": -122.05693269999998
        },
        "displayPolygon":
{ ... } { "type": "Polygon", "coordinates": [ [ [ -122.056930138027, 37.3735253692531 ], [ -122.056960139391, 37.3735372663597 ], [ -122.056994129366, 37.3734828786847 ], [ -122.056969677395, 37.3734731161089 ], [ -122.057061762447, 37.3733261309656 ], [ -122.056979388817, 37.3732935577128 ], [ -122.056798860285, 37.3735818838642 ], [ -122.056875858081, 37.3736121235316 ], [ -122.056930138027, 37.3735253692531 ] ] ] }
}, "containingPlaces": [ { "place": "places/ChIJYfdAFum2j4ARIcL2tjME3Sw", "displayName": { "text": "Cherry Chase Shopping Center", "languageCode": "en" }, "primaryType": "shopping_mall", "types": [ "shopping_mall", "point_of_interest", "establishment" ], "formattedAddress": "Cherry Chase Shopping Center, 663 S Bernardo Ave, Sunnyvale, CA 94087, USA", "postalAddress": { "regionCode": "US", "languageCode": "en", "postalCode": "94087-1020", "administrativeArea": "CA", "locality": "Sunnyvale", "addressLines": [ "663 S Bernardo Ave" ] }, "structureType": "GROUNDS", "location": { "latitude": 37.3731231, "longitude": -122.0578211 }, "displayPolygon":
{ ... } { "type": "Polygon", "coordinates": [ [ [ -122.057112227103, 37.3714618008523 ], [ -122.057076849821, 37.3715743611411 ], [ -122.056963607756, 37.3719081793948 ], [ -122.056865279559, 37.3722026053835 ], [ -122.056687872374, 37.3727258358476 ], [ -122.056580005889, 37.3730511370747 ], [ -122.056498845827, 37.3732994782583 ], [ -122.056338259713, 37.3737878663325 ], [ -122.056618678291, 37.373887693582 ], [ -122.056912102521, 37.3740010327191 ], [ -122.057532418159, 37.3742476426462 ], [ -122.057673926626, 37.3742441740031 ], [ -122.057735663106, 37.3742328516943 ], [ -122.057766531332, 37.3742220604378 ], [ -122.057797572967, 37.37420520725 ], [ -122.057828267759, 37.3741852342085 ], [ -122.058060299297, 37.3740060842535 ], [ -122.058199726081, 37.3737861673422 ], [ -122.05836707267, 37.373524542556 ], [ -122.058569622393, 37.3732018598683 ], [ -122.0587638478, 37.3728890198039 ], [ -122.058934661823, 37.3726036257774 ], [ -122.059164956851, 37.3722498383629 ], [ -122.058997784906, 37.3721804442035 ], [ -122.057936479838, 37.3717605636234 ], [ -122.057495827092, 37.3715860151634 ], [ -122.057112227103, 37.3714618008523 ] ] ] }
} ], "landmarks":
[ ... ] [ { "place": { "place": "places/ChIJteQ0Fum2j4ARGi3tqK4Zm14", "displayName": { "text": "Safeway", "languageCode": "en" }, "primaryType": "grocery_store", "types": [ "grocery_store", "florist", "butcher_shop", "deli", "bakery", "food_delivery", "supermarket", "market", "food_store", "food", "point_of_interest", "store", "establishment" ], "formattedAddress": "Safeway, 639 S Bernardo Ave, Sunnyvale, CA 94087, USA", "postalAddress": { "regionCode": "US", "languageCode": "en", "postalCode": "94087", "administrativeArea": "CA", "locality": "Sunnyvale", "addressLines": [ "639 S Bernardo Ave" ] }, "structureType": "POINT", "location": { "latitude": 37.3727912, "longitude": -122.0581172 } }, "tags": [ "ARRIVAL", "ADDRESS" ], "relationalDescription": { "text": "Around the corner from Safeway", "languageCode": "en" }, "straightLineDistanceMeters": 158.65607, "travelDistanceMeters": 131.16699 }, { "place": { "place": "places/ChIJ8enMlui2j4AR2xXK5EHDhBs", "displayName": { "text": "Starbird Chicken", "languageCode": "en" }, "types": [ "fast_food_restaurant", "restaurant", "food", "point_of_interest", "establishment" ], "formattedAddress": "Starbird Chicken, 1241 W El Camino Real, Sunnyvale, CA 94087, USA", "postalAddress": { "regionCode": "US", "languageCode": "en", "postalCode": "94087-1028", "administrativeArea": "CA", "locality": "Sunnyvale", "addressLines": [ "1241 W El Camino Real" ] }, "structureType": "BUILDING", "location": { "latitude": 37.3746764, "longitude": -122.05708860000001 }, "displayPolygon":
{ ... } { "type": "Polygon", "coordinates": [ [ [ -122.057003840785, 37.3747648209809 ], [ -122.057136852459, 37.3747919153144 ], [ -122.057205005705, 37.3745815131859 ], [ -122.057071994114, 37.3745544186944 ], [ -122.057003840785, 37.3747648209809 ] ] ] }
}, "tags": [ "ARRIVAL", "ADDRESS" ], "relationalDescription": { "text": "Near Starbird Chicken", "languageCode": "en" }, "straightLineDistanceMeters": 87.34801, "travelDistanceMeters": 214.08084 }, { "place": { "place": "places/ChIJXXTe7Oi2j4ARoMTA-D6Hjpg", "displayName": { "text": "Chase Bank", "languageCode": "en" }, "primaryType": "bank", "types": [ "bank", "atm", "finance", "point_of_interest", "establishment" ], "formattedAddress": "Chase Bank, 1234 W El Camino Real, Sunnyvale, CA 94087, USA", "postalAddress": { "regionCode": "US", "languageCode": "en", "postalCode": "94087", "administrativeArea": "CA", "locality": "Sunnyvale", "addressLines": [ "1234 W El Camino Real" ] }, "structureType": "POINT", "location": { "latitude": 37.373579, "longitude": -122.05752700000001 } }, "tags": [ "ARRIVAL", "ADDRESS" ], "relationalDescription": { "text": "Near Chase Bank", "languageCode": "en" }, "straightLineDistanceMeters": 61.182194, "travelDistanceMeters": 63.075645 }, { "place": { "place": "places/ChIJlbIO1Oi2j4ARp17Uf24xkHk", "displayName": { "text": "Madras Café", "languageCode": "en" }, "primaryType": "indian_restaurant", "types": [ "indian_restaurant", "coffee_shop", "cafe", "restaurant", "food_store", "food", "point_of_interest", "store", "establishment" ], "formattedAddress": "Madras Café, 1177 W El Camino Real, Sunnyvale, CA 94087, USA", "postalAddress": { "regionCode": "US", "languageCode": "en", "postalCode": "94087-1026", "administrativeArea": "CA", "locality": "Sunnyvale", "addressLines": [ "1177 W El Camino Real" ] }, "structureType": "POINT", "location": { "latitude": 37.3743, "longitude": -122.0549333 } }, "tags": [ "ARRIVAL", "ADDRESS" ], "relationalDescription": { "text": "Near Madras Café", "languageCode": "en" }, "straightLineDistanceMeters": 204.45102, "travelDistanceMeters": 235.12041 } ]
, "entrances": [ { "location": { "latitude": 37.373531299999996, "longitude": -122.05694519999999 }, "tags": [ "PREFERRED" ], "place": "places/ChIJY8sv5-i2j4AR_S6BlDDR42w" } ], "navigationPoints": [ { "location": { "latitude": 37.3738659, "longitude": -122.05693620000001 }, "travelModes": [ "DRIVE", "WALK" ], "usages": [ "UNKNOWN" ] } ] } ] }

必需参数

  • API 请求中必须包含以下 3 个参数之一,用于指定要搜索目的地的地址、地点或位置:
    • addressQuery - 要搜索的地址。
    • place - 要搜索的地点对应的地点 ID。
    • locationQuery - 要搜索的位置的纬度和经度坐标。
  • FieldMask

    通过创建响应字段掩码来指定要在响应中返回的字段列表。 使用网址参数 $fieldsfields,或者使用 HTTP 标头 X-Goog-FieldMask,将响应字段掩码传递给方法。例如,以下请求将仅返回主要目的地的入口、导航点和地点 ID。

      curl -X POST -d '{"place": "places/ChIJG3kh4hq6j4AR_XuFQnV0_t8"}' \
        -H "X-Goog-Api-Key: API_KEY" \
        -H "Content-Type: application/json" \
        -H "X-Goog-FieldMask: destinations.entrances,destinations.navigationPoints,destinations.primary.place" \
        https://geocode.googleapis.com/v4alpha/geocode/destinations
      

    响应中没有默认的返回字段列表。如果您省略字段掩码,该方法会返回错误。将字段掩码设置为 *,以便返回所有字段。如需了解详情,请参阅选择要返回的字段

可选参数

  • travelModes

    指定要返回的 navigationPoints 类型。 系统会过滤掉其他出行方式的导航点。如果未设置 travelModes,则可以返回所有出行方式的导航点。

  • languageCode

    返回结果所用的语言。

    • 请参阅支持的语言列表。Google 会经常更新支持的语言,因此该列表可能并非详尽无遗。
    • 如果未提供 languageCode,则 API 默认为 en。如果您指定的语言代码无效,API 会返回 INVALID_ARGUMENT 错误。
    • 该 API 会尽力提供用户和当地人都能看懂的街道地址。为了实现这一目标,它会返回本地语言的街道地址,并在必要时根据首选语言将地址音译为用户可读的文字。所有其他地址均以首选语言返回。地址组成部分全部以同一种语言返回,该语言是从第一个组成部分中选择的。
    • 如果首选语言中没有相应名称,API 会使用最接近的匹配项。
    • 首选语言对 API 选择返回的结果集以及返回顺序有较小的影响。地理编码器会根据语言以不同的方式解读缩写,例如街道类型的缩写,或者在一种语言中有效但在另一种语言中无效的同义词。
  • regionCode

    地区代码,以 双字符 CLDR 代码值表示。没有默认值。大多数 CLDR 代码都与 ISO 3166-1 代码相同。

    在对地址进行地理编码(即正向地理编码)时,此参数可以影响但不会完全限制服务返回指定区域的结果。在对位置或地点进行地理编码时(反向地理编码地点地理编码),可以使用此参数设置地址格式。在任何情况下,此参数都可能会根据适用法律影响搜索结果。

  • placeFilter

    可让您过滤 locationQuery 搜索的结果,以满足您的要求,例如仅返回建筑物目的地或仅返回具有明确地址的目的地。

    按结构粒度过滤

    借助 structureType 过滤条件,您可以指定查询返回的结构类型:

    • 隔离建筑物:使用 "structureType": "BUILDING" 在地图上显示建筑物轮廓或获取特定结构的详细信息。
    • 了解复合体:使用 "structureType": "GROUNDS" 可确保主要结果是总体依据。在查询大学校园或购物中心等较大区域时,此功能非常有用。
    • 侧重于单元/部分:使用 "structureType": "SECTION" 标识建筑物内的部分。

    确保地址有用

    并非所有地点都有明确的街道级地址。addressability 过滤条件可帮助您控制结果中地址的质量:

    • 需要明确的主地址:为确保主要目的地结果始终包含街道级地址或名称,请使用 "addressability": "PRIMARY"。这对于需要清晰地址的导航或显示目的非常有用。
    • 允许子目的地中的地址:如果主要地点可能没有地址,但其中的单元(例如建筑物中的公寓)有地址,"addressability": "WEAK" 可确保至少主要地点或其某个子目的地有地址。
    • 任意结果:如果地址存在与您的使用场景无关,请使用 "addressability": "ANY"
    示例:过滤出可寻址的建筑物
    curl -X POST -d '{
      "locationQuery": {
        "location": {
          "latitude": 37.37348780,
          "longitude": -122.05678064
        },
        "placeFilter": {
          "structureType": "BUILDING",
          "addressability": "PRIMARY"
        }
      },
      "languageCode": "en"
    }' \\
    -H 'Content-Type: application/json' -H "X-Goog-Api-Key: API_KEY" \\
    -H "X-Goog-FieldMask: place" \\
    https://geocode.googleapis.com/v4alpha/geocode/destinations
    

反馈

这是 Geocoding API 的一个实验性端点。欢迎发送电子邮件至 geocoding-feedback-channel@google.com 提供反馈。