Клуб API Карт

Маршрут из массива координат

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

Необходимо построить маршрут по координатам объекта.

При подаче в ymaps.route цифровых координат (так, как показано в примерах документыции) всё работает нормально, но мне необходимо построить маршрут получая координаты из массива.

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

для простоты пытаюсь сделать на двух точках - маршрут не строится:

var coords = new Array();

var point1 = {};

var point2 = {};

ymaps.geocode('Россия, Москва, 1-я Тверская-Ямская улица, 11', {result: 1}).then(function (res) {

      point1 = res.geoObjects.get(0);

});

ymaps.geocode('Россия, Москва, Большой Харитоньевский переулок, 12а', {result: 1}).then(function (res) {

      point2 = res.geoObjects.get(0);

});

ymaps.route([point1.geometry.getCoordinates(), point2.geometry.getCoordinates()],{mapStateAutoApply: true}).then(

      function (route) {myMap.geoObjects.add(route);}, function (error) {

            alert(\"Возникла ошибка: \" + error.message);

      });

 

 

Скрипт выдаёт ошибку: Uncaught TypeError: Cannot call method 'getCoordinates' of undefined

В чём может быть ошибка? Пытался сохранять числовые координаты в массиве и использовать их в route, но тоже не работает.

Спасибо.

8 комментариев

1. Вызовы геокодера и маршрутизатора возвращают результат спустя время (асинхронно) Их нельзя использовать в таком стиле

2. Маршрутизатор и сам умеет геокодировать

ему сразу можно передать точки ввиде адреса и не ходить в геокодер

1. суть понял, спасибо. Тогда напрашивается вопрос: можно ли как-то выполнить построение маршрута после полного геокодирования (т.е. выполнить route только после завершения всех geocode)?

2. об этом я знаю, НО "Количество обращений к функции геокодирования ограничено 25000 запросов для одного сайта в сутки. (пункт 2.3.5)". Правильно ли я понимаю, что и каждое обращение к функции geocode и геокодирование каждого адреса в маршруте называется геокодированием? если да, то в таком случае (в связи с тем, что точки маршрута часто повторяются и их довольно много) этот предел быдет достаточно быстро достигнут. Поэтому я посчитал необходимым как-то сохранить результаты геокодирования в массиве... вот только пока не ясно как(.

1. можно вызвать маршрутизатор в функции-обработчике (в той что передается в метод then) геокодирования

2. Если точки у вас одни и теже прогеокодируйте их на сервере по http один раз и на клиенте работайте с координатами

Спасибо за ответы! Буду пробовать.

Добрый день. не могли бы вы подсказать в моём вопросе тоже!!! сразу скажу, у меня не очень большой опыт использования JS и Яндекс api.

Мой код:

 

                destinations1 = {

У Вас путаница

YMaps.Events.observe это из АПИ 1.x

метод then из АПИ 2.0

Эти версии между собой не совместимы.

Внимательно почитайде документацию на ту версию, которую хотите использовать

спасибо за оперативный ответ!

да, согласен, с then-ом не прав.

вообще говоря метод then я пробовал от безысходности, когда всё что мог уже перебрал

на сайте используется api 1.х

 

ещё заметил, что если после

for (idelem in city_name) {
                    YMaps.Events.observe(geocoder, geocoder.Events.Load, function (geocoder) {
                    var geoCoords = geocoder.get(0).getGeoPoint();   
                    destinations1[idelem] = geoCoords;                   
                    });

 

вызвать

alert("1")

}

 

то массив заполняется.....

 

и всё же, как можно сделать чтобы массив заполнялся???

не надо ничего делать от безысходности, надо читать документацию и думать.

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