调用Google Maps API获取POI仅返回20条结果,如何获取全部POI?
嗨,这个问题我帮很多开发者解决过——Google Maps Places API不管是Nearby Search还是Text Search,默认每次最多返回20条结果,要拿到目标区域的全量POI,核心就是利用它的分页机制来迭代获取,下面给你拆解具体步骤和要踩的坑:
解决Google Maps API获取全量POI的方法
1. 先搞懂API的分页逻辑
当你发起搜索请求后,如果目标区域内的POI总数超过20条,API的响应里会额外返回一个next_page_token字段。这个令牌就是用来请求下一页结果的“通行证”,每一页最多20条,直到没有更多结果时,响应里就不会再出现这个令牌了。
2. 具体操作步骤
- 第一步:发起初始搜索请求,指定你的区域范围(比如用
location+radius定义圆形区域,或者bounds定义矩形范围)、POI类型(type参数,比如restaurant、gas_station),以及你的API密钥。举个伪代码请求示例:
GET https://maps.googleapis.com/maps/api/place/nearbysearch/json?location=37.7749,-122.4194&radius=5000&type=cafe&key=YOUR_API_KEY - 第二步:检查返回的响应,如果有
next_page_token,一定要等待1-2秒再发起下一次请求(API需要时间生成下一页的结果,直接请求会报INVALID_REQUEST错误)。下一次请求把参数换成pagetoken=拿到的next_page_token,其他区域相关参数保持不变。 - 第三步:重复第二步,直到响应里没有
next_page_token,这时候你就拿到了当前搜索条件下的所有POI结果。
3. 必须注意的几个关键点
- API配额限制:每一次分页请求都会消耗你的API配额,所以提前估算好总请求数,避免超出配额导致服务中断。
- 单搜索结果上限:Google Places API对单次搜索的总结果数有上限(比如Nearby Search最多返回60条),如果你的目标区域很大、POI数量远超这个数,就得把大区域拆分成多个小的子区域(比如网格划分),分别发起搜索后再合并结果。
- 去重处理:拆分区域搜索时,边界处的POI可能会被多次抓取,最后要通过
place_id(每个POI的唯一标识)来做去重处理。 - 请求频率:除了分页的1-2秒间隔,还要遵守API的请求频率限制,避免被限流。
4. 额外补充:如果需要更详细的POI信息
如果只拿到基础信息不够,你可以先收集所有POI的place_id,再批量调用Place Details接口获取详细数据,但同样要注意配额和请求频率的问题。
内容的提问来源于stack exchange,提问作者Nikhil Savaliya
相关产品推荐
相关产品推荐

