Google地图,在8个以上的航点之间绘制线条

时间:2015-03-18 09:11:23

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

我们有json。在json有10纬度和10经度。我们尝试在这些点之间绘制线。但是我们得到了状态代码google.maps.DirectionsResult.MAX_WAYPOINTS_EXCEEDED。所以在删除了两个点之后。现在我们试图画出8点之间的线,它工作得很好。但是在json中,有一段时间经过50到100纬度和经度。我们试过这样的

 var aa=waypts[0].location.k;
  var bb=waypts[0].location.D;

  var cc=waypts[waypts.length-1].location.k
  var dd=waypts[waypts.length-1].location.D;

var start1= new google.maps.LatLng(aa,bb);
var end1=new google.maps.LatLng(cc, dd);

  var request = {
      origin: start1,
      destination: end1,
      waypoints: waypts,
      optimizeWaypoints: true,
      travelMode: google.maps.TravelMode.DRIVING
  };
  debugger;

  directionsService.route(request, function(response, status) {
  debugger;
    if (status == google.maps.DirectionsStatus.OK) {
      directionsDisplay.setDirections(response);
      var route = response.routes[0];
    }
  });

首先告诉我如何划分超过8分。请指导我

3 个答案:

答案 0 :(得分:5)

简短回答不是单一请求。

Google Maps Directions的文档说明了

  

MAX_WAYPOINTS_EXCEEDED表示航路点过多   请求中提供的最大允许航点为8,加上   起源和目的地。 (Google Maps API for Work客户可以   包含最多23个航路点的请求。)

在使用限制标题下

  

免费API的用户最多可获得8个航点(加上原点和   目的地)允许在每个请求和总共2,500个方向   每24小时的请求。

因此,如果您运行多个请求,则可以一次获取8个航点(加上起点和终点)。请注意每24小时最多2,500个路线请求。

答案 1 :(得分:1)

您应该使用多个请求,如另一个答案所示。这是一个例子:

var service = new maps.DirectionsService();
function calcRoute(points, startIndex) {

    var start = points[startIndex];
    var destinationIndex = startIndex + 8 > points.length - 1 ? points.length - 1 : startIndex + 8;
    var destination = points[destinationIndex];

    function handlerRouteResult(result, status) {

        var path = [];
        if (status === maps.DirectionsStatus.OVER_QUERY_LIMIT) {
            setTimeout(function() {
                calcRoute(points, startIndex);
            }, 100);
        }
        else if (status === maps.DirectionsStatus.OK) {
            var overviewPath = result.routes[0].overview_path;
            for (var routePointIndex = 0; routePointIndex < overviewPath.length; routePointIndex++) {
                path.push(overviewPath[routePointIndex]);
            }
        } else {
            for (var pointIndex = startIndex; pointIndex <= destinationIndex; pointIndex++) {
                path.push(points[pointIndex]);
            }
        }

        var line = new maps.Polyline({
            map: map,
            strokeColor: '#235c23',
            path: path
        });
    }

    var waypoints = [];
    for (var waypointIndex = startIndex; waypointIndex < destinationIndex - 1; waypointIndex++) {
        waypoints.push({ location: points[waypointIndex] });
    }

    service.route({
        origin: start,
        destination: destination,
        travelMode: maps.DirectionsTravelMode.DRIVING,
        waypoints: waypoints
    }, handlerRouteResult);
}

for (var i = 0; i < pathPoints.length - 1; i += 8) {
    calcRoute(pathPoints, i);
}

您还会收到许多API调用中的OVER_QUERY_LIMIT响应。在这种情况下,它将重试路由查询。

答案 2 :(得分:0)

正如其他人所说,使用谷歌的JavaScript API做到这一点是不可能的。但是,Google确实允许最多23个带有服务器端请求的航路点。因此,使用PHP和JavaScript,我能够解决方法。

我解释了here以及代码。

您需要做的是从服务器端请求获取“航点订单”,然后让JavaScript为您提供每个位置之间的路线。