如何通过Google Places API仅返回sublocality类型的地点补全结果?
嘿,直接给你结论:不可行。
Google Places API的Autocomplete接口里,regions是一个预定义的聚合类型,它包含你提到的locality、sublocality等子类型,但API本身不支持在自动补全请求阶段直接指定仅返回sublocality这一种子类型——types参数只能接受预定义的聚合类型(比如regions、establishment)或者部分特定单个类型,但遗憾的是sublocality并不被允许作为Autocomplete的直接types参数值。
不过有两种替代方案可以帮你实现类似需求:
客户端二次筛选:
先通过autocomplete.setTypes(['regions'])获取所有regions相关的补全预测,然后在拿到返回结果后,手动过滤出types数组中包含sublocality的条目。举个JavaScript的示例:// 监听补全结果变化 autocomplete.addListener('place_changed', () => { const place = autocomplete.getPlace(); // 只保留类型为sublocality的结果 if (place.types.includes('sublocality')) { // 处理符合要求的地点 console.log('符合要求的子区域:', place.name); } else { // 提示用户选择子区域类型的结果 alert('请选择子区域类型的地点'); } });这种方式的缺点是会先获取所有regions相关结果,再做过滤,但能满足你仅保留sublocality结果的需求。
结合Place Details API验证:
当用户选择某个补全结果后,调用Place Details API获取该地点的完整类型信息,再判断是否属于sublocality。如果不符合,可以提示用户重新选择。这种方式更精准,但需要额外的API调用,要注意配额消耗。
需要提醒的是,如果你尝试直接把types设为['sublocality'],API会返回错误,因为这个类型不被Autocomplete接口支持。
内容的提问来源于stack exchange,提问作者Connor Lloyd Moore

