Карты Google, рисуйте линии между более чем 8 путевыми точками

У нас есть 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 точками. Пожалуйста, помогите мне


person Pavan Alapati    schedule 18.03.2015    source источник
comment
возможный дубликат API Карт Google [API направлений] ограничение путевых точек?   -  person A1rPun    schedule 18.03.2015
comment
возможный связанный с этим вопрос API Карт Google для получения маршрута автобуса   -  person geocodezip    schedule 18.03.2015
comment
возможный связанный с этим вопрос полилинии JavaScript Google Maps: проблема в подключение всех заданных местоположений GPS   -  person geocodezip    schedule 18.03.2015
comment
См. мой ответ на аналогичный вопрос с полным примером кода stackoverflow.com/questions/8779886/   -  person mikep    schedule 17.04.2017


Ответы (3)


Короткий ответ не в одном запросе.

В документации к Маршруты Google Maps указано, что

MAX_WAYPOINTS_EXCEEDED указывает на то, что в запросе указано слишком много путевых точек. Максимально допустимое количество путевых точек — 8, плюс исходная и конечная точки. (Клиенты Google Maps API for Work могут содержать запросы, содержащие до 23 путевых точек.)

Под заголовком Ограничения использования

Пользователи бесплатного API получают до 8 путевых точек (плюс пункт отправления и пункт назначения) в каждом запросе и в общей сложности 2500 запросов направлений в течение 24 часов.

Таким образом, если вы запускаете несколько запросов, выбирая 8 путевых точек (плюс исходная и конечная точка) за раз, вы можете добиться этого. Просто обратите внимание, что максимум 2500 запросов направлений в сутки.

person Sphvn    schedule 18.03.2015
comment
ему просто нужно отправить несколько запросов - person A1rPun; 18.03.2015
comment
Что ты имеешь в виду? Я удаляю отрицательный голос, когда ответ редактируется :) - person A1rPun; 18.03.2015
comment
@A1rPun спасибо за ответ. Пожалуйста, скажите мне. если у меня есть 24 широты и долготы в моем json. как отправить несколько запросов. - person Pavan Alapati; 18.03.2015
comment
@PavanAlapati Я думаю, вам нужно создать для этого еще один вопрос StackOverflow. Кстати, Sphvn ответил на этот вопрос;) - person A1rPun; 18.03.2015

Вы должны использовать несколько запросов, как предлагает другой ответ. Вот пример:

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);
}

Он также принимает ответ OVER_QUERY_LIMIT в учетной записи, которую вы получаете от множества вызовов API. В этом случае он повторит запрос маршрута.

person Tim Cools    schedule 05.01.2016

Как говорили другие, это невозможно сделать с помощью Google JavaScript API. Однако Google разрешает до 23 путевых точек с запросом на стороне сервера. Поэтому, используя PHP и JavaScript, я смог найти обходной путь.

Я объяснил это здесь вместе с кодом.

Что вам нужно сделать, так это получить «порядок путевых точек» из запроса на стороне сервера, а затем заставить JavaScript указывать вам направления между каждым местоположением.

person Jacob Richman    schedule 10.08.2016