Клуб API Карт

Маршрутизация множества точек из массива

Пост в архиве.

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

for (var j=1;j<=28;j++) {

var tochka1, tochka2;

tochka1 = ArrayOfDistAndWins[0][0];

tochka2 = ArrayOfDistAndWins[j][j];

ymaps.route([tochka1, tochka2

]).then ( function (route) {

ArrayOfDistAndWins[0][j] = (parseInt(route.getLength(),10)/1000).toFixed(2);

RecordGlavTable(); //выводит матрицу в таблицу

});

и все бы хорошо, только функция route вызывается только после прохождения всего цикла, т.е. в итоге записан лишь последний результат. Как вызвать запись на каждом шаге? Не совсем понимаю конструкцию .then и как она работает, может хоть подскажете где почитать?

5 комментариев
А что у Вас за проект?
Есть ссылка?

Ссылки нет, пока пишу локально. Вообще это часть магистерской диссертации, пытаюсь реализовать алгоритм Кларка-Райта

Просто согласно пользовательскому соглашению АПИ Карт можно применять только для сайтов

 

2.3.2. Сервис может использоваться Пользователем только в рамках сайтов или мобильных приложений, доступных для бесплатного открытого использования неограниченным кругом лиц. Сервис не может использоваться для проектов, требующих оплаты, или иным образом ограничивающих доступ к ним третьих лиц. Необходимость зарегистрироваться не считается ограничением доступа в рамках настоящего пункта.

 

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

http://api.yandex.ru/maps/doc/jsapi/2.1/ref/reference/coordSystem.geo.xml

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

Метод then является частью стандарта Promises

Описан в документации

http://api.yandex.ru/maps/doc/jsapi/2.1/ref/reference/vow.Promise.xml