Google Routes API:公交模式下指定字段掩码返回空响应
问题描述
调用Google Routes API的computeRoutes接口时,设置travelMode: TRANSIT,通过字段掩码routes.legs.steps.startLocation或routes.legs.steps.endLocation请求数据,返回的steps为空对象;但使用字段掩码*时,能正常看到对应位置数据。
示例请求:
curl -X POST "https://routes.googleapis.com/directions/v2:computeRoutes" \ -H "Content-Type: application/json" \ -H "X-Goog-FieldMask: routes.legs.steps.endLocation" \ -H "X-Goog-Api-Key: API_KEY" \ -d '{ "origin": { "location": { "latLng": { "latitude": 40.748817, "longitude": -73.985428 } } }, "destination": { "location": { "latLng": { "latitude": 40.758896, "longitude": -73.985130 } } }, "travelMode": "TRANSIT" }'
响应结果:
{ "routes": [ { "legs": [ { "steps": [ {}, {}, {}, {}, {}, {}, {} ] } ] } ] }
解决方案
这个问题源于TRANSIT模式下,路线步骤(steps)是多态结构(包含步行、公交换乘等不同类型),Google Routes API需要识别步骤的核心类型标识,才能正确返回嵌套的位置数据,仅单独请求位置字段会导致API无法匹配对应数据结构,返回空对象。
可通过以下两种方式解决:
- 同时请求步骤类型与位置字段
调整字段掩码,加入步骤的类型标识字段travelMode,示例请求:
curl -X POST "https://routes.googleapis.com/directions/v2:computeRoutes" \ -H "Content-Type: application/json" \ -H "X-Goog-FieldMask: routes.legs.steps.startLocation,routes.legs.steps.endLocation,routes.legs.steps.travelMode" \ -H "X-Goog-Api-Key: API_KEY" \ -d '{ "origin": { "location": { "latLng": { "latitude": 40.748817, "longitude": -73.985428 } } }, "destination": { "location": { "latLng": { "latitude": 40.758896, "longitude": -73.985130 } } }, "travelMode": "TRANSIT" }'
- 请求步骤下的全部核心字段
使用更宽泛的字段掩码routes.legs.steps,直接获取步骤的所有核心数据:
curl -X POST "https://routes.googleapis.com/directions/v2:computeRoutes" \ -H "Content-Type: application/json" \ -H "X-Goog-FieldMask: routes.legs.steps" \ -H "X-Goog-Api-Key: API_KEY" \ -d '{ "origin": { "location": { "latLng": { "latitude": 40.748817, "longitude": -73.985428 } } }, "destination": { "location": { "latLng": { "latitude": 40.758896, "longitude": -73.985130 } } }, "travelMode": "TRANSIT" }'
内容的提问来源于stack exchange,提问作者Joe
相关产品推荐
相关产品推荐

