【问题标题】:Google maps: hitting google query limit on maps javascript v3 api谷歌地图:在地图 javascript v3 api 上达到谷歌查询限制
【发布时间】:2013-02-27 17:43:00
【问题描述】:

我需要运行几千个 api 调用才能获得一些距离,但我一直在达到查询限制。即使在我将脚本设置为每 1 秒调用一次后,我仍然会在前 120-170 次调用后得到 QUERY_LIMIT 作为响应。在那之后,他们继续快速堆积。所以过了一会儿,我需要几秒钟甚至几分钟才能得到真正的回应。

脚本每 1 秒调用一次以获取行驶距离。如果返回 ZERO_RESULT,那么它会在最后添加一个步行距离调用。如果用 ZERO_RESULT 响应,我只需通过坐标计算径向距离。 如果它达到查询限制,它会在末尾广告另一个相同值的调用。

这是我的代码:

function getDistance( lat1, lon1, lat2, lon2, relId, mode, nr, total ) {
  setTimeout( function(){
      var directionsService = new google.maps.DirectionsService();
      if( mode == 'driving' ) travelmode = google.maps.TravelMode.DRIVING;
      else { travelmode = google.maps.TravelMode.WALKING }
      var request = {
        origin: new google.maps.LatLng( lat1, lon1 ),
        destination: new google.maps.LatLng( lat2, lon2 ),
        travelMode: travelmode
      };
      directionsService.route(request, function(result, status) {
        if (status == google.maps.DirectionsStatus.OK) {
            distance = parseInt( result.routes[0].legs[0].distance.value )/1000;
            $.ajaxLoadSync( 'getDistance', SITE_ROOT+'admin/modules/settings/calculateDistance.php', 'lat1='+lat1+'&long1='+lon1+'&lat2='+lat2+'&long2='+lon2+'&relId='+relId+'&distance='+distance );
        } else if( status == google.maps.DirectionsStatus.ZERO_RESULTS && mode == 'driving' ){
            var walkingCount = 0;
            var limitCount = 0;
            if( $('#limit_hit').html() != '' ) limitCount = parseInt($('#limit_hit').html());
            if( $('#walking_dist').html() != '' ) walkingCount = parseInt($('#walking_dist').html());
            var offset = walkingCount + limitCount;
            $('#walking_dist').html( walkingCount + 1 );
            setTimeout(function() { getDistance( lat1, lon1, lat2, lon2, relId, 'walking', nr, total ) }, total*1000+offset*1000 );
        } else if( status == google.maps.DirectionsStatus.ZERO_RESULTS && mode == 'walking' ){
            var noResult = 0;
            if( $('#no_res').html() != '' ) noResult = parseInt($('#no_res').html());
            $('#no_res').html( noResult + 1 );
            $.ajaxLoadSync( 'getDistance', SITE_ROOT+'admin/modules/settings/calculateDistance.php', 'lat1='+lat1+'&long1='+lon1+'&lat2='+lat2+'&long2='+lon2+'&relId='+relId+'&distance=-1' );
        } else if( status == google.maps.DirectionsStatus.OVER_QUERY_LIMIT ){
            var walkingCount = 0;
            var limitCount = 0;
            if( $('#limit_hit').html() != '' ) limitCount = parseInt($('#limit_hit').html());
            if( $('#walking_dist').html() != '' ) walkingCount = parseInt($('#walking_dist').html());
            var offset = walkingCount + limitCount;
            $('#limit_hit').html( limitCount + 1 );
            setTimeout(function() { getDistance( lat1, lon1, lat2, lon2, relId, mode, nr, total ) }, total*1000+offset*1000 );
        }
      });
  }, nr*1000 );
}

我会感谢任何帮助或提示。

【问题讨论】:

  • 是的,我知道这一点。我应该每秒有 10 个请求,但即使是 1/s 我也有问题
  • 那么你可能已经超过了每日限制。
  • 那不可能。在第一个 130-170 请求之后,我收到了 QUERY_LIMIT 响应(正如我在上面写的那样)。另外,我通过了每日限制,我将无法在接下来的 24 小时内获得任何结果

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


【解决方案1】:

我需要运行几千个 api 调用才能获得一些距离

那是你的问题。

使用 Google Directions API 的查询限制为每天 2,500 个路线请求

如果您需要更多,您可能需要查看Google Maps API for Business。每天提供更多的请求。

您也可以点击其中一个usage limits.。那里有一些关于如何解决它的建议。

【讨论】:

  • 实际上您收到了 25,000 个 v3 api 请求。但正如我之前提到的,我没有达到每日限额。 QUERY_LIMITS 在前 150 个左右的请求之后开始发生。
【解决方案2】:

如果您正在寻找大量行驶距离结果,请调查DistanceMatrix

但是,这些服务都不适用于数千个请求。您可能需要重新考虑您的设计(或调查营业执照)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-07-30
    • 1970-01-01
    • 1970-01-01
    • 2011-03-25
    • 1970-01-01
    • 1970-01-01
    • 2017-01-10
    • 1970-01-01
    相关资源
    最近更新 更多