为何Google Places API仅返回单个结果却不包含城市信息?
解决Google Places API通过邮编获取城市/国家信息的问题
我完全懂你的困扰——用Autocomplete API查邮编时,加了types=(country)参数反而没拿到想要的城市和国家信息,这其实是对参数用途的误解导致的。
问题根源
types=(country)参数的作用是强制API只返回国家类型的预测结果,但你输入的邮编SW1A 1AA是具体的地址,和国家类型不匹配,所以API没法返回符合要求的结构化信息。而且Autocomplete本身更适合做输入提示,而非精准的地址解析工作。
最佳解决方案:改用Geocoding API
要从邮编里提取明确的城市、国家等结构化信息,Google的Geocoding API才是正确的选择,它专门处理地址与地理坐标的双向解析,会返回非常详细的地址组件。
- 调用示例(替换
[YOUR_KEY]为你的API密钥):https://maps.googleapis.com/maps/api/geocode/json?key=[YOUR_KEY]&address=SW1A%201AA - 解析返回结果:
在响应的results[0].address_components数组里,你可以根据types字段筛选出需要的信息:- 城市:找
types包含"locality"的组件,其long_name就是伦敦(London) - 国家:找
types包含"country"的组件,long_name是United Kingdom,short_name是GB
- 城市:找
如果坚持用Autocomplete API的替代方案
如果你一定要用Autocomplete,那需要调整参数:
- 去掉
types=(country),改用types=(regions)(这个类型包含城市、地区、国家等区域级结果) - 可以结合
components=country:gb参数缩小范围,避免返回其他国家的无关结果 - 从返回结果的
structured_formatting.main_text或terms数组里提取城市信息,但这种方式不如Geocoding API的结果精准可靠
举个调整后的Autocomplete调用示例:
https://maps.googleapis.com/maps/api/place/autocomplete/json?key=[YOUR_KEY]&input=sw1a%201aa&types=(regions)&components=country:gb
这样就能得到包含伦敦信息的预测结果,再从中提取你需要的字段。
内容的提问来源于stack exchange,提问作者Zoe Edwards




