【问题标题】:Google Maps, draw lines between more than 8 waypoints谷歌地图,在超过 8 个航点之间画线
【发布时间】:2015-03-18 09:11:22
【问题描述】:

我们有 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个点之间画线。请指导我

【问题讨论】:

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


【解决方案1】:

不在单个请求中的简短回答。

Google Maps Directions 的文档指出

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

在使用限制标题下

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

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

【讨论】:

  • 他只需要发送多个请求
  • 什么意思?编辑答案时,我删除了反对票:)
  • @A1rPun 感谢您的回复。请告诉我。如果我的 json 中有 24 个纬度和经度。如何发送多个请求。
  • @PavanAlapati 我认为您需要为此创建另一个 StackOverflow 问题。顺便说一句,Sphvn 回答了这个问题;)
【解决方案2】:

您应该按照其他答案的建议使用多个请求。这是一个例子:

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 响应。在这种情况下,它将重试路由查询。

【讨论】:

    【解决方案3】:

    正如其他人所说,使用 Google 的 JavaScript API 是不可能的。但是,Google 确实允许服务器端请求最多 23 个航点。因此,使用 PHP 和 JavaScript,我能够解决问题。

    我用代码解释了here

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-05-01
      • 2012-06-10
      • 2021-11-12
      • 2019-04-08
      • 2014-03-29
      • 2012-11-06
      • 1970-01-01
      • 2016-02-27
      相关资源
      最近更新 更多