如何通过Google Places API获取单个邮编覆盖的所有城市?
解决Google Places API获取跨城市邮编对应所有城市的问题
我之前也碰到过一模一样的情况——Places Text Search的设计逻辑就是返回邮编关联的主城市,不会主动枚举所有覆盖的区域。要拿到一个邮编对应的全部城市,你得换用Google Geocoding API,并通过components参数做精准过滤,这比Text Search靠谱多了。
具体解决步骤:
1. 用Geocoding API的components参数发起查询
Geocoding API支持通过components参数锁定目标邮编,这样会返回所有和该邮编绑定的地理实体,包括多个城市。请求示例如下:
https://maps.googleapis.com/maps/api/geocode/json?components=postal_code:94608&key=YOUR_API_KEY
2. 解析结果提取所有城市
这个请求的results数组会包含多条记录,你只需要遍历这些条目,筛选出types数组里包含locality(城市类型标识)的结果就行。针对邮编94608,你会在结果里同时看到:
- "formatted_address": "Emeryville, CA 94608, USA"
- "formatted_address": "Oakland, CA 94608, USA"
3. 为什么之前的方法失效?
- Places Text Search:它的定位是返回最相关的单个地点,优先展示邮编最常关联的主城市,不会枚举所有覆盖区域。
- 单一坐标反向地理编码:你之前用的坐标大概率落在Oakland的范围内,反向编码自然只会返回该城市。就算遍历viewport内的多个点,效率也远不如直接用Geocoding API的components参数。
额外小提示
如果需要更详细的城市属性(比如边界、人口数据),可以把每个城市对应的place_id传入Place Details API获取,但如果只是单纯拿城市列表,Geocoding API的结果就完全够用了。
内容的提问来源于stack exchange,提问作者Ben Orona
相关产品推荐
相关产品推荐

