Destination 是指用户打算前往或导航到的重要地图注点或特定位置。Destination 可以包含导航点、地标、入口和建筑物轮廓等信息。
通过 Geocoding API 的 SearchDestinations 端点,您可以根据不同的输入条件(例如地址、地点 ID 或纬度和经度坐标)检索有关各种目的地的详细信息。
搜索目的地请求
搜索目的地请求是向以下格式的网址发出的 HTTP POST 请求:
https://geocode.googleapis.com/v4beta/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/v4beta/geocode/destinations
您可以通过以下 3 种方式之一指定目的地搜索位置:
- 地址
- 地点 ID
- 经纬坐标
按地址搜索目的地
您可以将地址指定为非结构化字符串。地址地理编码不会解析纬度和经度坐标,也不会解析不表示地址的其他非结构化字符串。不支持使用此类字符串的请求,并且此类请求可能会导致错误响应或未指定的行为。不支持的查询示例包括:
| 查询类型 | 示例 |
|---|---|
| 纬度和经度坐标。请改用位置查询。 | "37.422131,-122.084801" |
| 概念或限制条件过多,例如在单个查询中包含多个地点、道路或城市的名称 | “Market Street San Francisco San Jose Airport” |
| Google 地图上未显示的邮政地址元素 |
"C/O John Smith 123 Main Street" "P.O. Box 13 San Francisco" |
| 商家、连锁店或类别的名称与这些实体未覆盖的地点相结合 | “德克萨斯州达拉斯附近的 Tesco” |
| 具有多种解读的模糊查询 | “充电器送达” |
| 不再使用的历史名称 | "Middlesex United Kingdom" |
| 非地理空间元素或意图 | “Ventura Harbor 有多少艘船?” |
| 非官方名称或自选名称 |
"The Jenga" "The Helter Skelter" |
| 大型政治实体(城市、州/省/自治区/直辖市、国家/地区) |
"纽约市" "加利福尼亚" "美国" |
| 没有具体地址的路线 |
“1st Ave., 纽约市,纽约州" "I-95" |
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/v4beta/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/v4beta/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/v4beta/geocode/destinations
支持的地点 ID
搜索目的地端点最适合用于表示特定可导航目的地的地点 ID。
一般支持 establishment、point_of_interest、premise、street_address 和 subpremise 等类型的地点 ID。
不支持不表示离散位置的地点 ID,例如从地址范围(例如“Main St 10-20 号”)推断出的地点 ID、没有具体编号的路线路段或 Plus Code。
为确保在使用地点自动补全功能查找地点 ID 时获得兼容性,请考虑按类型过滤结果。您可以在自动补全请求中使用 includedPrimaryTypes 参数,以仅包含上述支持的类型:
"includedPrimaryTypes": [ "establishment", "point_of_interest", "premise", "street_address", "subpremise" ]
这可确保地点自动补全功能返回的地点 ID 与 Search Destinations 方法最兼容。请注意,establishment 类型范围较广。虽然此过滤条件对于捕获许多商家位置是必需的,但它也可能包含 natural_feature 类型的地点自动补全结果,而这些类型在搜索目的地中仅获得有限的支持。
按位置搜索目的地
您可以提供纬度和经度坐标来搜索目的地:
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/v4beta/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。
搜索目的地响应
“搜索目的地”响应会提供有关位置的丰富超本地化背景信息。
本部分介绍了关键响应字段。如需详细了解所有响应字段,请参阅 API 参考文档。
primary
请求中查询所标识的主要地点。
containingPlaces
主要目的地所属的更大型实体(例如,包含商店的购物中心)。
subDestinations
主要目的地内的更具体位置(例如,建筑物内的公寓)。
entrances
entrances[] 数组中的对象具有以下字段:
location一个纬度/经度坐标对,用于定义某个地点的入口点和出口点的位置。
entrance_tags[]一个入口标记数组,用于描述入口的特征。 支持以下值:
"PREFERRED"表示此入口可能提供对返回地点的实体访问权限。一个地点可以有多个首选入口。如果某个入口没有此标记,则表示该入口位于同一建筑物内,但不一定能通往相应地点。
例如,如果返回的地点是商业街中的一家餐厅,则
"PREFERRED"入口将是通往餐厅本身的入口,而返回的其他入口将是该建筑物的其他入口,例如通往商业街中其他餐厅的入口。如果返回的地点是建筑物本身,则
"PREFERRED"入口将是通往建筑物“主要”部分的入口。例如,在购物中心内,"PREFERRED"入口是可通往主门厅区域的入口,但如果某个入口仅可通往建筑物侧面的商店,则该入口不是"PREFERRED"入口。
structureType
相应地点所代表的结构类型。
POINT点位置。
SECTION建筑物的某个分区。
BUILDING建筑物。
GROUNDS通常包含多栋建筑的大型区域,例如大学园区、公寓楼群或购物中心。
navigationPoints
地理编码响应中的 navigationPoints 字段包含一个点列表,这些点有助于前往相应地点。具体而言,在从该地点出发或前往该地点的道路网络上进行路线规划时,它们应作为起点或终点使用。每个导航点都包含以下值:
navigationPointToken是一个令牌,包含navigationPoints字段中的上下文信息。您可以将此令牌发送到路线规划和导航 API,以改善应用中的路线规划和河流体验。如需了解详情,请参阅使用导航点令牌规划路线。location包含导航点的纬度和经度值。此位置始终非常靠近道路网络,是前往或离开某个地点的理想停靠点或出发地。该点有意略微偏离道路中心线,以便清晰标记相应地点所在的道路一侧。travelModes是导航点可用的出行方式列表:"DRIVE"是与行车路线对应的出行模式。"WALK"是与步行路线对应的出行模式。
usages是导航点支持的用途列表。使用情况可以是:"DROPOFF""PICKUP""PARKING"
arrivalSummary
依托 AI 技术的分析洞见,可帮助您顺利抵达目的地。请参阅 AI 赋能的摘要。
landmarks
附近值得注意的地点,可帮助用户了解目的地的周边环境。
回答格式
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", "meal_takeaway", "food_delivery", "american_restaurant", "restaurant", "food_store", "store", "food", "point_of_interest", "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/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 } }, "relationalDescription": { "text": "Near Chase Bank", "languageCode": "en" }, "tags": [ "ARRIVAL", "ADDRESS" ], "straightLineDistanceMeters": 61.182193756103516, "travelDistanceMeters": 63.075645446777344 }, { "place": { "place": "places/ChIJteQ0Fum2j4ARGi3tqK4Zm14", "displayName": { "text": "Safeway", "languageCode": "en" }, "primaryType": "grocery_store", "types": [ "grocery_store", "butcher_shop", "florist", "deli", "supermarket", "bakery", "food_delivery", "market", "manufacturer", "food_store", "store", "food", "service", "point_of_interest", "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 } }, "relationalDescription": { "text": "Around the corner from Safeway", "languageCode": "en" }, "tags": [ "ARRIVAL", "ADDRESS" ], "straightLineDistanceMeters": 158.65606689453125, "travelDistanceMeters": 131.1669921875 }, { "place": { "place": "places/ChIJu-PSYui2j4ARNiwOwBApGqk", "displayName": { "text": "Oil Changers", "languageCode": "en" }, "types": [ "car_repair", "service", "point_of_interest", "establishment" ], "formattedAddress": "Oil Changers, 1240 W El Camino Real, Sunnyvale, CA 94087, USA", "postalAddress": { "regionCode": "US", "languageCode": "en", "postalCode": "94087", "administrativeArea": "CA", "locality": "Sunnyvale", "addressLines": [ "1240 W El Camino Real" ] }, "structureType": "POINT", "location": { "latitude": 37.3743054, "longitude": -122.0584272 } }, "relationalDescription": { "text": "Down the road from Oil Changers", "languageCode": "en" }, "tags": [ "ARRIVAL" ], "straightLineDistanceMeters": 140.52459716796875, "travelDistanceMeters": 143.24220275878906 }, { "place": { "place": "places/ChIJKRbl5oG3j4ARwuvPGUmtCj0", "displayName": { "text": "Apni Mandi Farmers Market Sunnyvale", "languageCode": "en" }, "primaryType": "grocery_store", "types": [ "grocery_store", "cake_shop", "supermarket", "asian_grocery_store", "indian_restaurant", "meal_takeaway", "bakery", "manufacturer", "wholesaler", "restaurant", "food_store", "store", "food", "point_of_interest", "establishment" ], "formattedAddress": "Apni Mandi Farmers Market Sunnyvale, 1111 W El Camino Real, Sunnyvale, CA 94087, USA", "postalAddress": { "regionCode": "US", "languageCode": "en", "postalCode": "94087-1056", "administrativeArea": "CA", "locality": "Sunnyvale", "addressLines": [ "1111 W El Camino Real" ] }, "structureType": "POINT", "location": { "latitude": 37.3737199, "longitude": -122.0522958 } }, "relationalDescription": { "text": "Near Apni Mandi Farmers Market Sunnyvale", "languageCode": "en" }, "tags": [ "ADDRESS" ], "straightLineDistanceMeters": 410.37435913085938, "travelDistanceMeters": 479.49893188476562 }, { "place": { "place": "places/ChIJ8enMlui2j4AR2xXK5EHDhBs", "displayName": { "text": "Starbird Chicken", "languageCode": "en" }, "primaryType": "chicken_restaurant", "types": [ "chicken_restaurant", "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": { "coordinates": [ [ [ -122.057003840785, 37.3747648209809 ], [ -122.057136852459, 37.3747919153144 ], [ -122.057205005705, 37.3745815131859 ], [ -122.057071994114, 37.3745544186944 ], [ -122.057003840785, 37.3747648209809 ] ] ], "type": "Polygon" } }, "relationalDescription": { "text": "Near Starbird Chicken", "languageCode": "en" }, "tags": [ "ADDRESS" ], "straightLineDistanceMeters": 87.348007202148438, "travelDistanceMeters": 214.08084106445312 } ], "entrances": [ { "location": { "latitude": 37.3735328, "longitude": -122.05694879999999 }, "tags": [ "PREFERRED" ], "place": "places/ChIJY8sv5-i2j4AR_S6BlDDR42w" } ], "navigationPoints": [ { "navigationPointToken": "ChIJeMt61tqvQkARWT2716SDXsASEgljyy_n6LaPgBH9LoGUMNHjbBoSCWPLL-foto-AEf0ugZQw0eNsIhIJhf5y6ei2j4ARz7yBW5KAPI4", "location": { "latitude": 37.3738659, "longitude": -122.05693620000001 }, "travelModes": [ "DRIVE", "WALK" ], "usages": [ "PARKING" ] } ] } ] }
必需参数
- API 请求中必须包含以下 3 个参数之一,用于指定要搜索目的地的地址、地点或位置:
addressQuery- 要搜索的地址。place- 要搜索的地点对应的地点 ID。locationQuery- 要搜索的位置的纬度和经度坐标。
FieldMask
通过创建响应字段掩码来指定要在响应中返回的字段列表。使用网址参数
$fields或fields,或者使用 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/v4beta/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/v4beta/geocode/destinations - 隔离建筑物:使用
反馈
这是 Geocoding API 的一个实验性端点。欢迎发送电子邮件至 geocoding-feedback-channel@google.com 提供反馈。