本文档是对使用旧版 GMP API 的 旧文章 的更新。本文档中的内容已更新为 2023-24 年推出的新版 Places API 和 2023 年推出的 Routes API。
通常,当用户驾车前往地图注点 (POI) 时,实际上需要导航到附近的地点,例如停车场或入口。想象一下,一位司机需要前往机场或购物中心。前往机场时,司机试图到达航站楼或下客点,而不是机场综合体的中心。同样,对于有车的用户来说,购物中心旁边的停车场可能是一个更好的选择。在这种情况下,在开发应用或服务来引导司机时,首先要找到他们要去的位置,然后为司机提供该位置附近的可选目的地。这种方法让您能够为客户提供更好的服务,并表明您重视客户的时间,只需付出少量但明智的开发工作,即可利用 Google Maps Platform 提供的位置数据。

我们将展示如何按顺序或组合使用新的 Places API 和 Routes API,以确定目的地旁边的合适停车地点。此解决方案旨在消除不确定性,并减少在驾车靠近最终目的地时查找停车位的多次互动。请查看两个示例,详细了解如何在这些情况下实现这些功能。
示例 1 - 没有停车场的旅游景点
选择一个不直接与路边相连的地点,以便必须单独检索路线, **目的地** 是巴黎的**巴黎圣母院** , **起点** 我们将使用**巴黎东站** (48.87697775149635, 2.3592247806755564)。

司机从车站出发,大约 16 分钟后到达巴黎圣母院以北。巴黎圣母院是岛上著名的旅游景点,有桥梁通道,一些单行道,附近没有大型停车场,因此这应该是一个有趣的挑战。
1. Places API 请求
此示例 Places API 请求使用文本搜索来查找巴黎圣母院。如需了解详情,请参阅 开发者文档 。这些示例中的“$APIKEY”是您在 Google Cloud 控制台中启用的 Google Maps Platform Places API 和 Routes API 的 API 密钥。 如需更详细的说明,请参阅 Google Maps Platform 使用入门 文档。
新的 Places API 请求采用新格式。响应字段不再是固定的,作为开发者,您必须在标头中定义 fieldmask。fieldmask 的使用在文档中定义。
curl -X POST --data @notre_dame.json \
-H 'Content-Type: application/json' -H "X-Goog-Api-Key: $APIKEY" \
-H 'X-Goog-FieldMask: places.id,places.displayName,places.formattedAddress,places.location' \
'https://places.googleapis.com/v1/places:searchText'
使用“notre_date.json”内容作为搜索参数:
{
"textQuery": "Notre Dame, Paris",
"languageCode": "en"
}
对上述请求的响应给出了以下纬度和经度坐标:
{
"places": [
{
"id": "ChIJATr1n-Fx5kcRjQb6q6cdQDY",
"formattedAddress": "6 Parvis Notre-Dame - Pl. Jean-Paul II, 75004 Paris, France",
"location": {
"latitude": 48.852968200000007,
"longitude": 2.3499021
},
"displayName": {
"text": "Cathédrale Notre-Dame de Paris",
"languageCode": "en"
}
}
]
}
如您所见,这些坐标确实精确地指向了巴黎圣母院。
|
|
作为开发者或服务提供商,最好自动提示司机“正在寻找巴黎圣母院附近的停车场吗?”,或者如果司机有电动汽车,您可能需要搜索充电站。用户体验会因设备和屏幕而异,但在这种情况下,简短对话框文本在短时间后消失可能值得考虑。如需查找巴黎圣母院附近的停车场,请使用类型为“parking”和“electric_vehicle_charging_station”的 Places API 附近搜索,半径为 500 米。以下示例会将结果偏向巴黎圣母院 500 米范围内的停车场。
curl -X POST -d '{
"includedTypes": ["parking", "electric_vehicle_charging_station"],
"maxResultCount": 10,
"rankPreference": "DISTANCE",
"locationRestriction": {
"circle": {
"center": {
"latitude": 48.852968200000007,
"longitude": 2.3499021},
"radius": 500.0
}
}
}' \
-H 'Content-Type: application/json' -H "X-Goog-Api-Key: $APIKEY" \
-H "X-Goog-FieldMask: places.displayName,places.location" \
https://places.googleapis.com/v1/places:searchNearby
第一个结果是位于 48.854981, 2.350629 的充电站,但当您运行此示例时,结果可能会有所不同。在下一部分中,我们将使用此位置发出 Routes API 请求。
**2. Routes API 请求
如需查找从车站到巴黎圣母院附近充电站的路线,您需要发出 Routes API 请求。只需设置起点和目的地参数即可。如需了解更多选项,请参阅开发者 文档 。
curl -X POST -d '{
"origin":{
"location":{
"latLng":{
"latitude": 48.87697775149635,
"longitude": 2.3592247806755564
}
}
},
"destination":{
"location":{
"latLng":{
"latitude": 48.854981,
"longitude": 2.350629
}
}
},
"travelMode": "DRIVE",
"routingPreference": "TRAFFIC_AWARE",
"departureTime": "2024-05-16T15:01:23.045123456Z",
"computeAlternativeRoutes": false,
"routeModifiers": {
"avoidTolls": false,
"avoidHighways": false,
"avoidFerries": false
},
"languageCode": "en-US",
"units": "METRIC"
}' \
-H 'Content-Type: application/json' -H "X-Goog-Api-Key: $APIKEY" \
-H 'X-Goog-FieldMask: routes.duration,routes.distanceMeters,routes.legs,routes.polyline.encodedPolyline' \
'https://routes.googleapis.com/directions/v2:computeRoutes'
Routes API 响应通常包含多个路线建议。如需在响应中包含路线数据,请在 fieldmask 中定义“routes.legs”。每条路线都包含多个“legs”,而这些“legs”又包含多个“steps”,显示行驶距离和坐标。如需查找可驾车到达的最终坐标,请使用所选路线中最后一个 leg 的最后一个 step 的“endLocation”字段。“latitude”: 48.854937299999996, “longitude”: 2.3505841999999997
此位置可能看起来不是首选,但当您查看地图或 Google 街景视图时,您会发现此位置距离巴黎圣母院很近,步行大约 6-7 分钟即可到达。

从充电站停车位到巴黎圣母院的步行路线
示例 1 摘要
如您所见,查找汽车停车位只需要几个 API 调用,并向司机显示建议。这可以为您的用户节省时间,因为他们不必在单行道上行驶,也不必在拥挤的旅游景点中寻找停车位。总结一下,我们发出了以下 API 请求:
- Places API 文本搜索请求,用于查找巴黎圣母院的坐标
- Places API 附近搜索,用于查找距离这些坐标 500 米范围内的电动汽车充电站停车场
- Routes API 请求,用于查找前往充电站的路线
示例 2 - 引导前往大型机场的航站楼

再考虑一个示例,司机试图到达一个包含多个地点、POI 或潜在下客点的大型区域。司机从英国温布利球场 (51.557263604707224, -0.2794575145680608) 出发,试图到达伦敦希思罗机场 5 号航站楼 。
新的 Places API 自动补全功能非常棒,它能够将主要类型 定义为搜索条件,并结合 API 预测的子场所作为潜在搜索结果。在这种情况下,这意味着搜索机场和停车场也会返回航站楼或停车场。您可以在文档中找到要包含或排除的类型的完整列表。
curl -X POST -d '{
"input": "Heathrow",
"includedPrimaryTypes": ["airport", "parking"]
}' \
-H 'Content-Type: application/json' -H "X-Goog-Api-Key: $APIKEY" \
https://places.googleapis.com/v1/places:autocomplete
上面的查询为我们提供了航站楼列表以及这些航站楼的各个下客点。从结果列表中,我们可以找到“London Heathrow Airport Terminal 5”及其地点 ID:
"place_id" : "ChIJo21hnPxxdkgRksRL0KQRWII",
使用“placeId”参数,我们可以告知 Routes API,我们试图到达某个地点,而不是一些任意坐标。
curl -X POST -d '{
"origin":{
"location":{
"latLng":{
"latitude": 51.557263604707224,
"longitude": -0.2794575145680608
}
}
},
"destination":{
"placeId": "ChIJo21hnPxxdkgRksRL0KQRWII"
},
"travelMode": "DRIVE",
"routingPreference": "TRAFFIC_AWARE",
"departureTime": "2024-05-16T15:01:23.045123456Z",
"computeAlternativeRoutes": false,
"languageCode": "en-US",
"units": "METRIC"
}' \
-H 'Content-Type: application/json' -H "X-Goog-Api-Key: $APIKEY" \
-H 'X-Goog-FieldMask: routes.duration,routes.distanceMeters,routes.legs,routes.polyline.encodedPolyline' \
'https://routes.googleapis.com/directions/v2:computeRoutes'
同样,与上一个示例一样,通过读取 JSON 响应中的所有步骤,您将找到旅程的最后一部分以及终点位置的纬度和经度坐标 (51.4714348, “longitude”: -0.48967890000000003)。

示例 2 摘要
与上一个示例一样,为司机提供改进的引导所需的开发工作量非常小,并且可以衡量为司机节省的时间。我们发出了以下请求:
- Places API 自动补全(新)请求,用于查找希思罗机场 5 号航站楼
- Routes API 请求,用于获取从温布利到 5 号航站楼的路线
此示例仅介绍了新 Places API 功能的一小部分。请查看一些新的地点类型,例如简易机场和国际机场。
总结
如您所见,为驾车出行的客户提供优质服务所需的开发工作量相当小,您可以展示您是如何考虑客户需求的。
出于开发目的,您可以使用许多可用的库和工具来帮助您为客户构建服务。请查看我们公开提供的 Google Maps Platform GitHub 代码库。
后续操作
GMP 使用入门:https://developers.google.com/maps/get-started
建议的深入阅读内容
Places API 自动补全(新)文档:https://developers.google.com/maps/documentation/places/web-service/place-autocomplete
Routes API 文档:https://developers.google.com/maps/documentation/routes
贡献者
主要作者:Mikko Toivanen | Google Maps Platform 解决方案工程师