如何使用Google Nearby API获取指定半径内的周边城市?
问题:Google Places Nearby Search返回结果远少于预期
我正在开展一个项目,需通过经纬度(lat,long)获取设备位置20公里范围内的所有城市(locality),且设备所在的locality不能出现在结果中。我并非开发者,在Postman中调用Google Places Nearby Search接口,仅得到2个结果,远少于预期的10余个。
当前调用的请求(已隐藏密钥部分):
https://maps.googleapis.com/maps/api/place/nearbysearch/json?location=48.7707452,2.0803735&radius=20000&type=locality&key=AIzxxxxxxE
返回的JSON结果:
{"html_attributions": [],"results": [{"geometry": {"location": {"lat": 48.801408,"lng": 2.130122},"viewport": {"northeast": {"lat": 48.82857804347341,"lng": 2.168480543860636},"southwest": {"lat": 48.77916591232869,"lng": 2.069908968772275}}},"icon": "https://maps.gstatic.com/mapfiles/place_api/icons/v1/png_71/geocode-71.png","icon_background_color": "#7B9EB0","icon_mask_base_uri": "https://maps.gstatic.com/mapfiles/place_api/icons/v2/generic_pinlet","name": "Versailles","photos": [{"height": 3024,"html_attributions": ["<a href=\"https://maps.google.com/maps/contrib/116593793480207812084\">Jessy Velazquez</a>"],"photo_reference": "AUjq9jkmbt7CKGCwJfn3ZlpLVC-wGt_1svXYWTyA5p9pgcmd6XCNbEcwAFFjF0xe2tuLIYm5F_42s0Q4dbI0ifJTHZy5-gfzQfSo2jMp_ATL-WfPl3jJHf8WbnRVLSslBCKg3j5jYQBU2pkyb2Tjkk7PLZSGSuv9ycLQu-j2zTBWUM9x-ejT","width": 4032}],"place_id": "ChIJvSD0dbR95kcRukqEDa0AnoY","reference": "ChIJvSD0dbR95kcRukqEDa0AnoY","scope": "GOOGLE","types": ["locality","political"],"vicinity": "Versailles"},{"geometry": {"location": {"lat": 48.7738734,"lng": 2.0360157},"viewport": {"northeast": {"lat": 48.7992215538692,"lng": 2.055979168810353},"southwest": {"lat": 48.75589319907799,"lng": 1.994393632933018}}},"icon": "https://maps.gstatic.com/mapfiles/place_api/icons/v1/png_71/geocode-71.png","icon_background_color": "#7B9EB0","icon_mask_base_uri": "https://maps.gstatic.com/mapfiles/place_api/icons/v2/generic_pinlet","name": "Montigny-le-Bretonneux","photos": [{"height": 4160,"html_attributions": ["<a href=\"https://maps.google.com/maps/contrib/100080658394344210444\">ali imoune</a>"],"photo_reference": "AUjq9jn0-yeBGJe57tERWIrudEEdhV_zdqrrtGna1VvH-vI33q2FMfh7c_YaZpK4VXR1eWFhU7MYt0rhxZujTMnM3DL7F5vOXX0zepVThDaB_I5gZ0Io2RjnXbYh4ZDInZ-0aXDY-w4xdisBO_4oAAVgot1516GAbE-He8jvgCacDUcp03w1","width": 3120}],"place_id": "ChIJDxMIwS-B5kcRHthZxYnQcNo","reference": "ChIJDxMIwS-B5kcRHthZxYnQcNo","scope": "GOOGLE","types": ["locality","political"],"vicinity": "Montigny-le-Bretonneux"}],"status": "OK"}
解决方法
1. 理解Nearby Search的结果逻辑
Nearby Search不会返回所有符合半径条件的locality,它优先展示人口多、知名度高的区域,且默认最多返回20条结果。如果结果超过20条,会返回next_page_token用于分页获取更多,但你的返回里没有这个token,说明Google判定当前范围内只有这2个高优先级的locality。
2. 改用反向地理编码+文本搜索组合
如果需要更全面的区域列表,可以按以下流程操作:
- 先通过反向地理编码获取设备所在的locality名称,方便后续排除:
https://maps.googleapis.com/maps/api/geocode/json?latlng=48.7707452,2.0803735&result_type=locality&key=你的API密钥 - 再用文本搜索(Text Search)指定区域搜索locality,之后手动过滤掉设备所在的那个:
也可以把query换成https://maps.googleapis.com/maps/api/place/textsearch/json?query=locality&location=48.7707452,2.0803735&radius=20000&key=你的API密钥city,可能会匹配到更多小区域。
3. 调整搜索半径或范围
适当扩大半径(比如到25公里),可能会返回更多周边区域,之后再通过结果里的经纬度计算实际距离,过滤掉超过20公里的结果。
4. 检查类型参数是否准确
确认type=locality是你需要的层级,有时候administrative_area_level_3这类更细的行政层级,可能对应更多小区域,可以尝试替换类型参数试试。
内容的提问来源于stack exchange,提问作者Farid SISSINHO
相关产品推荐
相关产品推荐

