Клуб API Карт

YMaps.Router - не могу передать адрес как переменную и перестроить маршрут

mobdp
30 июня 2011, 15:15

Вот после длительных мучений разобрался с роутером и составил вот такой скрипт:

YMaps.jQuery(function() {

var router = new YMaps.Router(
['Днепропетровск, Титова 10', 'Днепропетровск, Титова 20'], // Список точек // Киров, ул. Энгельса, 59
[1], // Здесь задаем индексы транзитных точек (точек, через которые мы хотим проехать без остановки) в массиве points
{ viewAutoApply: true } // Эта опция позволяет автоматически выставлять центр и коэффициент масштабирования карты


YMaps.Events.observe(router, router.Events.Success, function() {
$("#YMapsDistance").html(router.getDistance() + ' м.');
}

function updateRouter(a) {
router = new YMaps.Router(
['Киров, ул. Энгельса, 59', a], // Список точек
[1], // Здесь задаем индексы транзитных точек (точек, через которые мы хотим проехать без остановки) в массиве points
{ viewAutoApply: true } // Эта опция позволяет автоматически выставлять центр и коэффициент масштабирования карты


YMaps.Events.observe(router, router.Events.Success, function() {
$("#YMapsDistance").html(router.getDistance() + ' м.');
}
} //fn

$('#order-fld-2').bind('change', function() {
  //alert('Changed!\n'+$(this).val()
  updateRouter($(this).val()
}

} //YM.jQ fn

 

Первый кусок (до функции) просто считает расстояние между заданными точками.

Мне необходимо в поле ввести адрес, и посчитать расстояние от заданной точки до введенной (т.е. передать строку в функцию и переделать  
YMaps.Router).

 

У меня не получается, подскажите, пожалуйста, где ошибка?

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

а что не получается?

наверное перед тем как строить (обновлять) новый маршрут

нужно удалить с карты старый

А вообще у нас есть модуль - редактор маршрута

он для этих целей больше подходит

У меня карты вообще там нету (хотя, может вставлю ее как бонус).

Мне нужно только маршрут между точками А и Б проложить и померять его.

 

Еще ковырялся со скриптами, получилось сделать все-таки. Правда я использовал 2 переменные под роутеры (1 сразу загружается с данными, а 2 после передачи строки). Массив для роутера я формировал с отдельных переменных, и при запуске роутера я просто передал имя массива.

YMaps.jQuery(function() {
var t = ['Днепропетровск, Титова 10', 'Днепропетровск, Титова 20'];
var router = new YMaps.Router(
t, // Список точек // Киров, ул. Энгельса, 59
[1], // Здесь задаем индексы транзитных точек (точек, через которые мы хотим проехать без остановки) в массиве points
{ viewAutoApply: true } // Эта опция позволяет автоматически выставлять центр и коэффициент масштабирования карты
);

YMaps.Events.observe(router, router.Events.Success, function() {
$("#YMapsDistance").html(router.getDistance() + ' м.');
});

function updateRouter(a) {

//alert('a: '+a);
var c = ['Днепропетровск, Героев Сталинграда 60', a];
//alert(c[1]);
router2 = new YMaps.Router(
c, // Список точек
[1], // Здесь задаем индексы транзитных точек (точек, через которые мы хотим проехать без остановки) в массиве points
{ viewAutoApply: true } // Эта опция позволяет автоматически выставлять центр и коэффициент масштабирования карты
);

YMaps.Events.observe(router2, router2.Events.Success, function() {
$("#YMapsDistance").html(router2.getDistance() + ' м.');
});

YMaps.Events.observe(router2, router2.Events.GeocodeError, function() {
alert('router2 Событие неудачного построения маршрута, вследствие ошибки геокодирования.');
});

YMaps.Events.observe(router2, router2.Events.RouteError, function() {
alert('router2 Событие неудачного построения маршрута, вследствие невозможности проложить путь к точке.');
});

YMaps.Events.observe(router2, router2.Events.Fault, function() {
alert('router2 Событие неудачной загрузки ответа с сервера маршрутизации.');
});

var map = new YMaps.Map(document.getElementById("YMapsID")), geoResult;
map.addOverlay(router2);
var geocoder = new YMaps.Geocoder(a, {results: 1, boundedBy: map.getBounds()});
YMaps.Events.observe(geocoder, geocoder.Events.Load, function () {
// Если объект был найден, то добавляем его на карту
// и центрируем карту по области обзора найденного объекта
if (this.length()) {
geoResult = this.get(0);
map.addOverlay(geoResult);
map.setBounds(geoResult.getBounds());
}else {
alert("Ничего не найдено")
}
});

} //fn

$('#order-fld-2').bind('change', function() {
//alert('Changed!\n'+$(this).val());
updateRouter($(this).val());
});

}); //YM.jQ fn
 Почему не работало с передачей переменной, а с передачей массива работает - не понятно.