状态QUERY_OVER_LIMIT收到来自Google Maps API v3的回复

时间:2012-03-28 09:57:18

标签: google-maps google-maps-api-3

我在申请中使用你的api有几个功能,即 - 获取前往目的地的路线 - 到达多个地点的距离 - 通过在地图上找到标记来接收位置地址

应用程序摘要(Local-Deals-Now)

该应用程序是一个免费应用程序,允许位于澳大利亚的本地企业发布与其业务相关的优惠/交易。用户可以创建一个企业帐户(免费)并提供其业务的位置(使用谷歌地图api),并按日期和时间向系统添加优惠/交易。然后,公共用户/消费者可以查看这些优惠(或按距离,位置,日期,关键字等搜索:-....使用distancematrix api计算当前用户位置的优惠距离。)

上述申请目前正处于发展阶段,可通过http://www.chuli.fclhosting.com/访问。面临的问题是使用距离矩阵API来计算当前登录用户位置到业务的距离。我在服务器端使用API​​如下

$curl = curl_init();
        $uri = "http://maps.googleapis.com/maps/api/distancematrix/json?origins=".$originString."&destinations=".$destinationsString."&mode=driving&language&sensor=false";
        die($uri);
        $options = array(
                CURLOPT_URL => $uri,
                CURLOPT_HTTPHEADER => array(),
                CURLOPT_COOKIE => '',
                CURLOPT_RETURNTRANSFER => true
        );
        curl_setopt_array($curl, $options);
        $responseBody = curl_exec($curl);
        $responseHeaders = curl_getinfo($curl);
        $data = $responseBody;
        $responseContentType = $responseHeaders['content_type'];

        if ((strpos($responseContentType, 'json') !== false) || (substr(html_entity_decode(trim($data)), 0, 1) == "{")) {
            $jsonData = json_decode($data, true);
            if (!is_null($jsonData)) {
                $data =$jsonData;
            }
        }

         for ($i = 0; $i < count($data['origin_addresses']); $i++) {
            for ($j = 0; $j < count($data['destination_addresses']); $j++) {

                $from = $data['origin_addresses'][$i];
                $to = $data['destination_addresses'][$j];
                if($data['rows'][$i]['elements'][$j]['status']=="OK" && $data['rows'][$i]['elements'][$j]['distance']['value']<= ($distance*1000)) {
                    $businessDistanceArray[$businesses[$j]->getId()] = $data['rows'][$i]['elements'][$j]['distance']['text'];
                } else {
                    $businessDistanceArray[$businesses[$j]->getId()] = sfConfig::get('app_offer_not_applicable');
                }

            }
        }

最近我开始收到一条警告/错误,声明OVER_QUERY_LIMIT。在谷歌上搜索问题(参考:https://developers.google.com/maps/documentation/javascript/usage)我已经掌握了,如果出现上述问题 - 每天的请求限制超过25 000个地图加载 要么 - 每秒发送太多请求

据我所知,应用程序不符合上述任何一项要求,但仍然收到警告。请让我知道我可以做些什么来解决这个错误

我是否必须购买营业执照 要么 如果我申请Google Earth Outeach Grant,目前申请是无利可图的 要么 只需继续,不做任何更改

以下是发送的示例请求:

http://maps.google.com/maps/api/distancematrix/json?origins=-25.198526444487587,133.20029780312507&destinations=-33.767636351789754,147.41606950000005|-33.905755787445024,151.15402221679688|-32.02195365825273,115.90862329062497|-37.79805567326585,145.01495173583987|-36.8839206402564,144.20859858437507|-31.362071510290537,117.42054612812501|-23.609959,143.72078599999998|-37.819317,145.12404889999993|-37.8186394,145.12360620000004|-37.816506,145.11867699999993|-37.815524,145.12131499999998|-30.708111,134.56642599999998&mode=driving&language&sensor=false

请查看上面给出的信息。我们非常感谢您的反馈

提前致谢

3 个答案:

答案 0 :(得分:1)

DistanceMatrix-Service的Limit不同:

100 elements per query.
100 elements per 10 seconds.
2 500 elements per 24 hour period.

因此,请先检查您要求的出发地/目的地数量。当origin *目的地超过100时,您应该已达到查询限制并且10秒。 在这种情况下(假设您只有1个来源),您要求多少“业务”?


修改 由于请求未超过查询限制/ 10秒,可能是您反复传递每日限制。您的请求返回12个元素,因此您将在24小时内超过约200个请求的限制,这可能发生吗?

答案 1 :(得分:1)

Dr.Molle说,有两个不同的限制。您超过了每日限制,允许在24小时内查询2500个元素。发生这种情况时,您将获得连续的OVER_QUERY_LIMIT错误,直到该24小时时间窗口到期并且您的配额刷新为止。

要注意的另一个限制是每10秒100个元素的短期限制。当你超过这个限制时,你会遇到OVER_QUERY_LIMIT错误几秒钟(即直到10秒窗口启动),然后你就可以再次使用该服务了。

如果这是一个面向用户的应用程序,它加载了Google Maps JavaScript API,并且由于某些用户操作而执行了这些距离矩阵查询,那么JavaScript Distance Matrix Service绝对值得探索。 JavaScript应用程序的限制是在您的网站用户之间分配的,而不是后端服务器。

答案 2 :(得分:0)

如果您与正在使用该服务的其他人共享托管,您可能会被标记为传递一个或其他限制。共享服务器可能意味着共享服务限制。