Клуб API Карт

Проложение маршрута

Пост в архиве.
hofg2008
30 августа 2009, 18:52

Ребята, привет. У меня есть вопросы, прошу помочь в решении задачи.


Задача: сделать так, чтобы каждый пользователь сайта мог создать на карте маршрут (ломаными линиями), сохранить его в БД и потом кинуть ссылку на страницу этого маршрута друзьям.


Н данный момент я нашел вот это: http://api.yandex.ru/maps/tools/constructor/ Однако, необходимо, чтобы пользователь нашего ресурса мог проложить маршрут именно на нашем сайте. Это возможно? Как реализовать? Что почитать? (читал сабж не нашел :( )

17 комментариев
Королев Михаил
30 августа 2009, 22:22
Всё возможно - алгоритм таков - по клику на точку можно запоминать координаты клика, ставить метку, рисовать от предидущей точки линию к ней. ну и координаты запоминать в форму, после всех правок оправляемую на сервер, для сохранеия в бд.
А как провести линию от одной точки до второй?
На карту необходимо повесить обработчик события Click, в котором можно будет получить географические координаты.
У ломанных и многоугольников есть режим редактирования.

Если Вы используете СУБД MySQL, то обратите внимание на spatial index.

Кстати, ссылку можно формировать и с помощью JavaScript.
http://rodlex.narod.ru/examples/center-map-from-get-params.html
Так и делаю, но не работает :(
var pl = new YMaps.Polyline(points); pl.StartEditing(); pl.addPoint(newGeoPoint); map.addOverlay(pl);
Что здесь не так?
Карта тут: http://rnlife.ru/map.php
Еще вот что напридумывал, но тоже не работает.
    
http://rnlife.ru/map3.php
Сам долго ковырялся, в итоге сделал - в том числе и с рисованием линии сразу по карте. Войдите сюда - http://www.websmith.ru/demo/ymaps/admin (логин - admin пароль - pass) слева в меню выберите пункт "Добавить ломаную" - и щелкните потом по карте несколько раз - думаю, это то, что вам нужно. Яваскрипт код посмотреть сможете в коде страницы.
Сделал то же самое. Можно сказать даже скопировал. Только стили линии и отметки отключил.
Вот тут карта: http://rnlife.ru/map4.php

Может глаз замылился и не вижу чего-то?
Ошибка в частности в строке 31 - об этом кстати и IE сразу сообщает var innerdesc = document.getElementsByName("koordin")[0]; вместо вашего koordin который вы зачем то туда поместили, нужно desc так как тут ориентир идет по id а не name параметру
Так или иначе не работает. Тоже обращал на это внимание. :( Больше ничего не заметили?
Думаю вам нужно скопировать все с начала и добиться работы без переименований и отключения - и без добавления того, чего изначально не было - точек и т..д Ну и работать лучше в IE - там ошибки сразу можно посмотрить, найти строку с ошибкой и уже дальше проверять.
Заработало. Что-то тронул и заработало :) И да. Спасибо за помощь, Сергей.
П.С. Посмотрел Ваш сайт. Возник вопрос. А нет ли у вас скрипта, который бы собирал информацию о товарах (название, цена, фотка и т.п.) с различных сайтов и сохранял в базу. Грубо говоря, яндекс.маркет, только сам собирающий из определенного списка сайтов информацию. Мы бы купили такой, предполагаю.
Пожалуйста. По поводу скрипта - думаю, лучше вам написать мне на e-mail (через раздел контакты например у меня на сайте) - а то тут это будет уже офтоп :-) А по поводу того, что вы хотите - сделать под заказ можно.
У меня пара вопросов:
1) Можно ли сделать так, чтобы при клике на часть ломаной (на одну из ее прямых), в балуне показывалась длина этой прямой (этого куска ломаной)? Каков алгоритм? Если я правильно понял, то нужно вычислять расстояние (distance()) между двумя вершинами ломаной, которые соединяет эта прямая. Однако как мне получить координаты этих вершин я понять не могу.
2) У меня на карте (http://rnlife.ru/routes/create/) я могу рисовать ломаную. Также при клике на кусок ломаной или на вершину оная удаляется (кусок или вершина). Как мне сделать так, чтобы когда я удаляю крайний кусок ломаной (т.е. последний нарисованный), прямая до следующей вершины (новый клик по карте) рисовалась из последней _видимой_ линии?
Заранее благодарен.
1) Воспользуйтесь методом distance();
2) Воспользутесь режимом редактирования ломанной и режимом drawing. Этот режим позволит при клике на карту добавлять новые точки в ломанную.
polyline.setEditingOptions({drawing: true});
polyline.startEditing();
Вершину, после которой добавляются новые точки, можно настроить с помощью параметра fromStart.

Или Вы имели ввиду что-то другое?
Я вот не понимаю. Когда я рисую ломаную, я ведь УЖЕ ее редактирую. Тогда какой смысл имеет включение режима редактирвоания?
Метод Дистанс(). Как получить одну и вторую вершины куска ломаной?