You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

CodeIgniter项目中Google Maps Geocoding API调用受限及报错求助

解决CodeIgniter中Google地理编码API的QUERY_OVER_LIMIT与Undefined Offset问题

Hey there, let's fix these two issues you're facing with your CodeIgniter project step by step:

1. 先搞定 QUERY_OVER_LIMIT 错误

这个报错说明你触发了Google地理编码API的请求配额限制。现在Google的免费API配额非常有限,而且无API密钥的请求几乎无法正常使用了。你需要做这几件事:

  • 登录Google Cloud Console,创建一个API密钥,然后启用「Geocoding API」服务
  • 在你的请求URL中添加密钥参数,格式是&key=你的API密钥
  • 如果你的请求量较大,考虑升级到付费方案(Google有基础免费额度,超出后按实际用量计费)

2. 修复 Undefined offset: 0 错误

这个问题有两个直接诱因:

  • 你代码里的条件判断用了赋值运算符 = 而非比较运算符 ==,导致即使API返回非OK状态,代码依然会进入分支去访问$geo['results'][0],而此时results数组是空的
  • 给$latlng['lng']赋值时,错误地用了['lat'],应该取['lng']

修正后的完整代码

$address = $this->input->post('key');
// 替换成你自己的API密钥,同时修正API路径(原代码里的geoco/json是笔误,应该是geocode/json)
$apiKey = '你的Google API密钥';
$geoUrl = 'http://maps.googleapis.com/maps/api/geocode/json?address=' . urlencode($address) . '&sensor=false&key=' . $apiKey;
$geo = file_get_contents($geoUrl);
$geo = json_decode($geo, true);

// 这里用双等号做状态判断,而非赋值
if ($geo['status'] == 'OK') {
    $latlng['lat'] = $geo['results'][0]['geometry']['location']['lat'];
    // 修正lng的取值字段
    $latlng['lng'] = $geo['results'][0]['geometry']['location']['lng'];
    echo json_encode($latlng);
} else {
    // 返回具体错误状态方便调试,比只返回0更实用
    echo json_encode(['error' => $geo['status']]);
}

额外小提醒:file_get_contents可能会因为服务器配置禁用而失效,你可以考虑用CodeIgniter自带的CURL工具类或者Guzzle来发起请求,兼容性会更好。

内容的提问来源于stack exchange,提问作者Anonymous

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 03:43:18