Клуб API Карт

Как реализовать функционал "Конструктора схем проезда"?

boicoff
1 августа 2009, 02:23

Нужно сделать в админке сайта, примерный аналог Конструктора схем проезда, т.е. чтобы администратор мог зайти в админку и создать или отредактировать путь. Два часа бился с Polyline, но смог сделать чтобы линия строилась от предыдущей точки, примерно вот так:

<script src="http://api-maps.yandex.ru/1.0/?key=тут ключ"
    type="text/javascript"></script>

    <script type="text/javascript">
var map;
var placemark;
        window.onload = function () {


  map = new YMaps.Map( document.getElementById("YMapsID") );map.setCenter( new YMaps.GeoPoint(37.64, 55.76), 10, YMaps.MapType.MAP );
  map.addControl(new YMaps.TypeControl());
  map.addControl(new YMaps.ToolBar());
  map.addControl(new YMaps.Zoom());
  //map.addControl(new YMaps.MiniMap());
  map.addControl(new YMaps.ScaleLine());

  YMaps.Events.observe(map, map.Events.Click, function (mEvent) {


var bounds = map.getBounds(),
    pointLb  = bounds.getLeftBottom(),
    span = bounds.getSpan();
    var point = mEvent.getGeoPoint();
    var placemark = new YMaps.Placemark(point);
    map.addOverlay(placemark);



if(document.getElementById("edit-field-coords-0-value").value)
{

        var pl = new YMaps.Polyline([ new YMaps.GeoPoint.fromString(document.getElementById("edit-field-coords-0-value").value),
                                          mEvent.getGeoPoint()
                                        ]);

            map.addOverlay(pl);
}
$("#edit-field-coords-0-value").val(mEvent.getGeoPoint());

  });


        }
    </script>


Соответственно с таким вариантом не о каком редактировании речи не идёт. Есть какие-нибудь мысли по этой теме?


ПС. И ещё, mEvent.getGeoPoint() работает только если указан адрес http://api-maps.yandex.ru/1.0/, а если указать http://api-maps.yandex.ru/1.1/, то координаты не определяются, а в консоль пишет:

Ошибка: mEvent.getGeoPoint is not a function

как лечить?


9 комментариев
Подписаться на комментарии к посту
В версии 1.1 есть возможность включить режим редактирования ломанной:
http://api.yandex.ru/maps/jsapi/doc/ref/reference/polyline.xml#startEditing

В версии 1.1 в слушатель события первым параметром передается ссылка на объект, в частности в обработчик события Click карты передается указатель на карту, а вторым параметром YMaps.MouseEvent:
http://api.yandex.ru/maps/jsapi/doc/ref/reference/map.xml#Click
А можно хотя бы простенький пример, как по клику отрезок AB  продолжить отрезком BC?
О! Вроде заработало добавление линии к концу предыдущей. Вот только не пойму, как сделать изменяемые точки и вслед за ними изменяемые линии. Точнее точки-то изменяемые сделал, как в примере, но только не могу понять, как привязать булеты к конкретным точкам полилинии и как это всё потом сохранить и редактировать при необходимости.

Скажите хотя бы каков должен быть алгоритм 
Уф. Вроде заработало.
Теперь другой вопрос.

Например, я рисую линию и помимо добавления точки по клику записываю координаты этой точки. Но потом замечаю, что точка стоит неправильно и сдвигаю её. Как мне получить новые координаты сдвинутой точки и её номер? Конечно я могу после редактирования "пробежаться" по всем точкам и собрать их координаты, но надеюсь есть другой способ.
Слушайте событие PositionChange и с помощью метода getPoints() получайте обновленный список точек линии.

А зачем Вы хотите получать именно измененную точку? Расскажите поподробнее алгоритм, по которому Вы действуете.
Администратор вводит участоки улиц, по которым прокладывается маршрут. Т.е. выбирает в форме "Улица Тенистая 1-6" и ставит точки на карте, потом выбирает "Улица Тенистая 7-10" и продолжает ставить точки.

Получается, что, например "Тенистая 1-6" это точки с 1 по 5, а "Тенистая 7-10" это точки с 7 по 14. И если администратор захочет отредактировать точки 1-6, то будет известо для какой улицы это происходило.

Вот только есть ещё одна ситуация, которая меня беспокоит. Как контролировать точки добавленные или удаленные из середины маршрута?
Создавайте для улицы "Улица Тенистая 1-6" и "Улица Тенистая 7-10" две ломанных (т.е. для каждого отдельного участка - своя ломанная) и после окончания редактирования пробегайтесь по списку ломанных и собирайте координаты точек.
Хорошее решение. Попробую.
Привет, получилось чтонить? Тоже интересует данный вопрос, буду рад если поделишься решением в случае успеха