2012-03-28 165 views
1

我使用自己的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

請看上面給出的信息。您的意見將被徹底我們讚賞提前

回答

1

像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

1

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

如果您與正在使用該服務的其他人共享主機,則可能會被標記爲傳遞一個或其他限制。共享服務器可能意味着共享服務的限制。

+0

Ohh ..謝謝你的信息。但是,沒有一個子域使用Google地圖服務 – nmeegama 2012-03-29 04:31:37