Клуб API Карт

Редактирование маршрута

Пост в архиве.
hivehicks
22 сентября 2010, 18:04

Я хочу повторить функционал редактирования маршрутов в картах.

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

Во-вторых, как мне ставить промежуточные метки на маршруте? Я отслеживаю Click на роуте, получаю координаты щелчка и... дальше затрудняюсь. Подскажите пожалуйста :) P.S. По ходу мне нужно найти, между какими точками ломаной ставится очередная и добавлять ее с помощью addPoint и высчитанным индексом, но я что-то не пойму как это сделать.

18 комментариев
1. Можно создавать новую ломаную, а можно устанавливать новые точки с помощью метода setPoint().
2. Посмотрите схожее обсуждение: http://clubs.ya.ru/mapsapi/replies.xml?item_no=12438
Видимо ссылка не та, тут я ничего не нашел.
Я могу как-то узнать, между какими точками ломаной находится другая точка?
Извините, ссылка, действительно, не та.
http://clubs.ya.ru/mapsapi/replies.xml?item_no=11465
Да, я читал этот топик, и все так и делаю. Основные вопрос в том, каждый ли раз при перемещении точек создавать новый объект Router или как-то можно апдейтить старый и как найти, между какими точками находится курсор.
В полилинии реализованна вставка точки между двух точек.

Можно назначить точке контекстное меню "добавить точку здесь"

Или вывести список ключевых точек в виде таблицы и добавлять туда.



Я знаю что она там есть. Вопрос в том, как именно определить тот самый index.
Это к индексу никакого отношения не имеет
"Ищет на ломаной линии точку, ближайшую к anchorPoint. Возвращает объект, содержащий координаты ближайшей точки и индекс начальной вершины сегмента ломаной,  на котором лежит найденная точка. Если ломаная не содержит точек, возвращает null."
А можно как-то найти индекс не точки ломаной, а индекс way point точки, после которой я должен поставить новую way point точку? Я правильно, что если мне удастся это сделать, я просто генерю новый массив way point точек, состоящий из way point точек моего текущего роутера + вставленная с нужным индексом новая way point точка (куда пользователь нажал), после чего создаю новый объект Router с этим массивом и по его событию Success удаляю старый роутер?
Опять же на выручку вам придет метод geClosestPoint().
Пользователь добавил новую точку и нужно определить перед (или после) какой via-точки ее расположить (на сколько я понял имелись ввиду именно via-точки, а не way).
1. Определяете индекс для новой точки. Например, получилось 18.
2. Высчитываете индексы для имеющихся via-точек (их можно высчитать только при первом добавлении маршрута). Например, получилось 5, 17, 20.
3. Выбираете после какой via-точки поставить новую. По нашем примеру нужно будет поставить после второй точки.

Успехов!
Вы правы, абсолютно никакого отношения. Прямо ни малейшего.
Если бы вы вдумались в проблему, вы бы поняли, что мне недостаточно знать индекс одной точки. Мне нужно знать, ставить ли мне новую точку ДО или ПОСЛЕ точки с найденным индексом, а для этого нужно знать два индекса.
Если бы вы вчитались в цитату Саши выше, вы бы обнаружили, что метод возвращает 1) координаты ближайшей точки на ломаной; 2) индекс предыдущей точки. Т. е. новую точку нужно добавлять с индексом + 1.
Извиняюсь, как раз его-то цитату я и пропустил. Спасибо, теперь проблема решилась.
BTW, цитата была из описания метода, на который я дал ссылку.
Это я тоже понял ;)
Все-таки я пока так и не понял, как мне поставить точку между двумя другими (как найти индекс, куда ее вставлять методом addPoint()). Как это делается у вас в Яндекс.Маршрутах?