Google Places API:调用getDetails时如何获取原description字段内容?
我之前也碰到过这个问题,Google Places API的这两个接口返回的地址字段确实有差异——Autocomplete的description是为前端展示优化的友好文本(会包含地标名称),而getDetails返回的formatted_address是标准的邮政格式地址,所以两者内容不一样。
这里有两个靠谱的解决办法:
直接保存Autocomplete返回的
description
这是最简单也最准确的方式。当你调用getPlacePredictions拿到结果时,每个预测项已经包含了description字段,你可以把这个值和对应的place_id一起存储(比如存在前端变量或者后端数据库里)。之后需要展示的时候,直接用这个保存好的description就行,完全不用依赖getDetails去重新生成。毕竟Google已经帮你生成好最适合展示的文本了,何必自己再折腾呢?从
getDetails的结果中手动拼接
如果因为某些原因必须从getDetails的响应里生成类似description的内容,你可以组合结果里的name字段和地址组件来拼接。比如,把地标名称(name)和行政区、州、国家这些部分组合起来,模拟Autocomplete的格式。举个简单的JS代码示例:
function generateMatchingDescription(place) { const addressSegments = []; // 从address_components里提取需要的地址部分 place.address_components.forEach(component => { const types = component.types; if (types.includes('administrative_area_level_2') || types.includes('administrative_area_level_1') || types.includes('country')) { addressSegments.push(component.long_name); } }); // 组合名称和地址段 return `${place.name}, ${addressSegments.join(', ')}`; }不过要注意,不同地区的地址组件类型可能有差异,你可能需要根据业务覆盖的地区调整判断逻辑,才能保证拼接出来的格式和Autocomplete的
description完全一致。
总的来说,优先选第一种方法,既省事儿又能保证格式完全匹配。
内容的提问来源于stack exchange,提问作者eyalhakim

