Google Maps API查询异地城市却返回本地结果问题求助
问题排查与解决
核心问题:location参数格式不符合API要求
Google Places API(不管是Text Search还是Nearby Search)的location参数只接受纬度,经度格式的字符串(比如"47.2529,-122.4443"),不支持"Tacoma WA"这类文本地址。当你传入文本地址时,API无法解析该参数,会自动 fallback 到请求发起IP对应的地理位置(也就是你所在的明尼阿波利斯),这就是结果不对的原因。
修正方案
方案1:先将文本地址转成经纬度(推荐)
调用Geocoding API把地址转换成经纬度,再传入location参数,同时可以搭配radius参数限定搜索范围:
def get_geocode(address): geocode_params = {"address": address, "key": GOOGLE_API_KEY} resp = requests.get("https://maps.googleapis.com/maps/api/geocode/json", params=geocode_params) results = resp.json().get("results", []) if results: loc = results[0]["geometry"]["location"] return f"{loc['lat']},{loc['lng']}" return None def get_places(query, location): lat_lng = get_geocode(location) if not lat_lng: return [] parameters = { "query": query, "location": lat_lng, "radius": 50000, # 50公里范围,可按需调整 "key": GOOGLE_API_KEY } all_results = [] response = requests.get(ENDPOINT, params=parameters) results = response.json().get("results", []) all_results.extend(results) return all_results
方案2:直接在查询中包含地点(适合Text Search)
如果使用的是Places Text Search API,可以把地点合并到query参数里,再搭配region参数辅助限定范围:
def get_places(query, location): full_query = f"{query} {location}" parameters = { "query": full_query, "region": "us", # 限定美国地区,可按需调整 "key": GOOGLE_API_KEY } all_results = [] response = requests.get("https://maps.googleapis.com/maps/api/place/textsearch/json", params=parameters) results = response.json().get("results", []) all_results.extend(results) return all_results
Cloud Console相关排查
- 确认你使用的API服务(比如Places Text Search、Nearby Search)已在Cloud Console中启用,未启用会直接返回错误,但不会导致位置偏移。
- API密钥的IP限制只会影响是否能调用API,不会改变返回结果的地理位置。不存在所谓的“默认地理位置”配置项,所以问题和Cloud Console设置无关。
测试建议
直接在浏览器中构造API请求测试(替换你的密钥):
https://maps.googleapis.com/maps/api/place/textsearch/json?query=cafe&location=47.2529,-122.4443&key=YOUR_API_KEY
如果返回塔科马的结果,说明参数逻辑没问题,再把代码对齐即可。
内容的提问来源于stack exchange,提问作者Justin Clark
相关产品推荐
相关产品推荐

