状态QUERY_OVER_LIMIT从谷歌地图API V3

问题描述:

我使用自己的API在我的几个功能应用,即 响应 - 获取到目的地的方向 - 获取距离几个位置 - 接收位置的地址通过定位与地图上的标记状态QUERY_OVER_LIMIT从谷歌地图API V3

应用概要(本地优惠现在)

应用程序是一个免费的应用程序,允许位于澳大利亚当地企业,发布有关他们的商业计划书/交易。用户可以创建一个商业账户(免费),并提供他们的业务位置(使用谷歌地图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。对这个问题使用Google(参考文献:https://developers.google.com/maps/documentation/javascript/usage)后,我已掌握的是,发生上述问题,或者如果 每天--the请求限制超过25个000的地图加载 OR - 截至每秒

发送过多的请求据我所知,申请不符合上述任何一项要求,但仍收到警告。请让我知道我可以就这个问题做的,以克服这种错误

我是不是要购买营业执照 或 由于目前的应用程序是一个非盈利的一个,我应该申请谷歌地球Outeach格兰特 OR 只是继续没有任何改变

下面是发送一个请求示例:

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

请看上面给出的信息。您的意见将被彻底我们赞赏提前

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

另一个要留意的限制是每10秒100个元素的短期限制。当您超过此限制时,您会在几秒钟内遇到OVER_QUERY_LIMIT错误(即直到10秒的窗口启动),然后您才能够再次使用该服务。

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

+0

我已经体验了24小时窗口,所以我必须放弃允许在24小时内查询2500个元素的每日限制 – nmeegama 2012-03-29 04:34:38

Limit为DistanceMatrix-服务

由于是不同的:

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

所以请首先,你有多少个起点/目的地请求。当来源*目的地超过100个时,您应该达到查询限制和10秒。 在这种情况下(假设您只有1个出身地点),您要求多少“企业”?


编辑: 由于请求不超过查询/ 10秒的限制,这可能是因为你反复通过日常的限制。您的请求会返回12个元素,因此您将在24小时内超过200个请求的限制,发生这种情况吗?

+0

我改变了我的算法,以便我可以克服极限 – nmeegama 2012-03-29 04:32:30

+0

@ Dr.Molle这个限制是基于deivce id(Android设备)还是映射键在清单中使用?此外,上面提到的元素是查询中的元素还是元素的响应? Bcoz,谷歌没有明确提到我们收到的任何回应内容..请让我知道..谢谢 – 2013-12-02 05:44:44

+0

关键并不重要,当您通过服务器请求Web服务时,限制将通过服务器共享-IP,当您通过JavaScript的Maps-API在客户端使用它时,限制将以每个用户为限。这些限制不适用于手机API。与元素相关:限制适用于查询中的元素,因此当您通过1个请求查询10个来源和11个目的地,达到请求限制。 – 2013-12-02 09:25:48

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

+0

Ohh ..谢谢你的信息。但是,没有一个子域使用Google地图服务 – nmeegama 2012-03-29 04:31:37