Клуб API Карт

Лимит количества точек в маршруте

djapostle
14 августа 2012, 05:08

необходимо получить расстояния между точками. для этого строю маршрут и получаю длины его сегментов.

обнаружилась проблема при большом количестве точек маршрута - маршрут из 100+ точек.

браузер выдаёт ошибку (см. PrintScreen)

маршрут строится на основе координат, точки маршрута повторяются.

Пример: 

 ymaps.route([

[48.788887, 44.801040],

[48.775850, 44.763814],

...

[48.788887, 44.801040],

[48.785343, 44.791464]

], { mapStateAutoApply: true }).then(function (route) { myMap.geoObjects.add(route); }, function (error) { alert("Возникла ошибка: " + error.message); });

При небольшом количестве точек всё работает.

Вопросы:

  1. есть ли какое то ограничение на количество точек в маршруте с которым маршрутизатор не может справиться или стоит какой-то запрет?
  2. возможно ли исправить ситуацию строя например маршрут частями (например по 20 точек, запоминать расстояния и затем строить следующий и т.п.) без перезагрузки страницы?
  3. как решить данную проблему?

8 комментариев
Подписаться на комментарии к посту

Какое то ограничение конечно же есть. Возможно вы просто упираетесь ограничение длины URL.

А зачем вам считать расстояние между точками именно так?

Почему вам не подходит http://api.yandex.ru/maps/doc/jsapi/2.x/ref/reference/ICoordSystem.xml#getDistance

мм... так это же функция с массивом в javascript... она разве связана с длиной URL?

предложенная функция не подходит, т.к. она считает кротчайшее расстояние по прямой, а мне нужна именно длина маршрута между точками.

Когда вы вызываете ymaps.route идет get запрос на сервер.

ааа.. и правда же. можно ли как то решить данную проблему? может быть отправлять несколько запросов частями? если так, то есть ли где-то описание вида запроса и ответа яндекс карт?

А что Вас смущает, мне кажется что можно просто отправить несколько запросов например по 20-ть точек просто началом каждого следующего маршрута будет конечная точка предыдущего маршрута. ну и после каждого запроса запрашивать длину, ну или что вам еще нужно а потом просуммировать.

 

 

именно это я бы и хотел сделать. вот только не знаю как это реализовать... всмысле чтобы отправить эти запросы надо знать в какой форме их принимает сервер и что выдаёт в результате. но в документации я такого не обнаружил(

Спасибо за ответы

myRouter = ymaps.route( [],//здесь массив твоих точек маршрута,
    {
        mapStateAutoApply: true//дополнительный параметры
    });   
    myRouter .then(function(router) {
        route = router;     
       route.getLength()//растояние в метрах указаного маршрута;
    },
   function (error) {
            alert('Невозможно расчитать растояние для этого маршрута');
      }

вот пример моего кода где вытаскивается длина определенного маршрута. конечно незнаю насколько будет правильно но такое просто пустите в цыкле просто изменяя координаты маршрута и суммируйте длинну

заработало. спасибо за помощь.

Если кому интересно проблема была решена циклическим вызовом функции route (по совету ) строящей маршрут по 10 точек. (возможно можно использовать и больше точек за раз, но я пока что предел не испытывал)