谷歌地图javascript API中的Directionservice路线上的SetTimeout

时间:2016-03-10 08:19:28

标签: javascript google-maps

我正在使用Google Map JavaScript API的Directionservice。实际上我无法在地图中显示超过10条路线。如果我试图显示超过10条路线,那么它会抛出OVER_QUERY_LIMIT错误。 即使设置了setTimeout函数后也无法显示所有路由。我只使用20条路线在地图上显示,而不能显示这20条路线。但是如果我使用setInterval函数,那么我就可以看到所有路由,但是也无法使用clearInterval函数停止间隔,因此它将进入无限循环。

function buildRoute(from, to, fromId, toId, index) {
  setTimeout(function() {
    var directionsService = new google.maps.DirectionsService();
    var color = setColor(index);
    var rendererOptions = {
      map: myMap,
      suppressMarkers: true,
      polylineOptions: {
        strokeColor: color
      }
    };

    var directionsRequest = {
      origin: from,
      destination: to,
      travelMode: getTraveMode(),
      unitSystem: google.maps.UnitSystem.METRIC
    };

    directionsService.route(directionsRequest, function(response, status) {

      count = count + 1;
      console.log(count + " " + fromId + " " + toId);
      if (status != google.maps.DirectionsStatus.OK)
        console.log(status);
      if (status == google.maps.DirectionsStatus.OK) {
        counter = counter + 1;
        var directionsDisplay = new google.maps.DirectionsRenderer(
          rendererOptions);
        directionsDisplay.setDirections(response);
        custimiseDriection(response, fromId, toId, color);
        if (counter == totRoutes) {
          // clearInterval();
          displayTimeandDistance();
        }
      }
    })
  }, 1000)
}

SetTimeout函数在下面的代码中的不同位置使用,如下所示,但无法克服OVER_QUERY_LIMIT。

  1. setTimeOut(buildRoute(from,to,fromId,toId,index),1000)
  2. 只是在setTimeout函数
  3. 中附上了directionservice.route函数
  4. 刚封好了directionservice.route的回调函数代码是setTimeout函数。
  5. 以下是Chrome控制台中OVER_QUERY_LIMIT错误的屏幕截图。 OVER QUERY LIMIT Error

1 个答案:

答案 0 :(得分:0)

创建客户端DirectionService以响应用户交互,这就是您的请求受到限制的原因 - 您不能指望JS Maps API库能够在突发中执行10个以上的请求。

如果您需要对多条路线进行分析,可以考虑使用服务器端路线服务,因为它的使用限制为documented,您可以启用结算以获得更高的配额。