Google地图地理位置状态OVER_QUERY_LIMIT

时间:2013-02-08 22:38:52

标签: php google-maps geolocation geocoding

据我所知,谷歌每天要求收取2,500张请求......但是,EARTH无法在今天提出这么多请求,而且我只是继续获得'OVER_QUERY_LIMIT'

$street_no = get_post_meta($prop->ID, 'street_no', true);
$street = get_post_meta($prop->ID, 'street', true);
$street_suffix = get_post_meta($prop->ID, 'street_suffix', true);

$addr = urlencode( $street_no." ".$street." ".$street_suffix." BC Canada" );
$url = 'http://maps.googleapis.com/maps/api/geocode/json?address='.$addr.'&sensor=true';
$json_result = json_decode(file_get_contents($url));

if ( $json_result->status === "OVER_QUERY_LIMIT" ) :
    sleep(2);
    $json_result = json_decode(file_get_contents($url));
endif;

正如你所看到的,如果我得到OVER_QUERY_LIMIT的状态,我告诉脚本要睡2秒然后继续...这似乎在今天早上的某个时候起作用,但现在我可以甚至只能对一个地址进行地理编码。

我不知道此时该怎么做......这使我的申请完全无用。

5 个答案:

答案 0 :(得分:5)

也许你每秒发送的查询太多了?

查看此主题:

OVER_QUERY_LIMIT while using google maps

答案 1 :(得分:4)

配额由共享IP的所有用户共享,因此同一共享IP上的其他网站必须使用Google Geocoder。

有关详细信息,请参阅this thread in the Google Maps API v2 group

BTW - 机架空间是猜测......

解决方法是使用基于客户端的地理编码,但验证您的使用是否符合使用条款。

webservice now supports a key,另一种选择是在请求中使用密钥,以便获得自己的配额。

答案 2 :(得分:1)

我用heroku托管的java应用程序遇到了类似的问题。我解决它的方法是设置一个微EC2实例并在其上安装Dante作为代理服务器运行。然后我只通过代理路由我的gecoding请求,并且每天可以完成2,000个请求。显然,值得缓存结果以最小化api调用。 EC2实例在第一年是免费的,之后仍然没有那么昂贵,你可以使用它不仅仅是Dante。

我已经在这里写了详细信息:Using Google geocoding from Heroku

答案 3 :(得分:0)

我在Heroku上的服务器上调用地理编码REST接口时遇到了同样的问题(在Amazon EC2上托管)

如果我可以在请求中使用我的Maps API密钥并且它们跟踪每个api密钥的呼叫数量,则可以修复此问题。

我同意这是一个严重的问题......

Bing,MapQuest和其他人都有免费的地理编码API - 你(和我)应该看看那些。

答案 4 :(得分:0)

您可以使用QuotaGuard之类的托管代理服务来停止来自共享IP的请求,这样您在使用Rackspace / Heroku等时就不会被Google阻止。