Клуб API Карт

Выделение меток прямоугольником с помощью мыши

Пост в архиве.
edamov
8 февраля 2013, 19:14

Есть ли возможность реализовать функционал выделения части меток мышкой? Если да, то подскажите, пожалуйста, каким образом это можно сделать?

К примеру, можно ли выделенным меткам менять цвета и сохранять их в массив для последующей обработки?

Используется API 2.

 

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

Первое, что приходит на ум:

создать 2 коллекции

AllPlacemarks=new ymaps.GeoObjectArray()

SelectedPlacemarks=new ymaps.GeoObjectArray()

myMap.geoObjects.add(AllPlacemarks)

myMap.geoObjects.add(SelectedPlacemarks)

При создании (или загрузке извне) метки  помещаем ее в коллекцию AllPlacemarks

AllPlacemarks.add(myPlacemark)

 и вешаем на нее событие

myPlacemark.events.add("click", function (e) { 

myPlacemark.options.set("preset","......") //ставим тот пресет, который хотим для выденных меток

SelectedPlacemarks.add(myPlacemark) // и перемещаем в коллекцию выделенных меток

})

 

Имелось ввиду выделение мышкой нескольких меток за один раз (так как на рабочем столе можно выделить ярлыки:-)).

А вы предложили, как я понял, при клике на каждую метку.

А, да, невнимательно прочитала заголовок топика.

Ну тогда при щелчке по карте создавать на ней прямоугольник, отслеживая движение мыши, менять "на лету" его геометрию. И по какому-то событию, например повтороному щелчку (тут надо уточнить, что лучше будет), перестать менять геометрию и заняться метками:

перебрать все метки в коллекции, определить, координаты которых из них попадают в границы прямоугольника и переложить в коллекцию выделенных меток с одновременной сменой пресета. Затем удалить выделяющий прямоугольник. Как-то так?

Вот, сваяла пример, может быть, несколько неуклюжий, но работает

    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
http://www.w3.org/1999/xhtml">

    Выделение группы меток прямоугольником
   

   
   
   



Выделение группы меток прямоугольником. Щелкните по карте для создания зоны. Щелкните повторно для окончания выделения






В данном примере я проверяла, что выделение идет и надо менять размер прямоугольника на основании свойства visible самого прямоугольника. Полгаю есть более изящные решения - выставлять какой-то логический флаг или проверять, что прямоугольник добавлен на карту, но это уже кому как нравится :)

Здравствуйте, спасибо за замечательный пример.

Пробую использовтаь его в API 2.1, но почему-то получается ошибка, вот этот пример на jsfiddle с подключенной версией 2.1:

http://jsfiddle.net/5vd96yz9/

Он в неизменном виде, а вообще я читал документ по миграции на 2.1 и там получались небольшие комсетические изменения, но глобально ничего не изменилось в плане возникновения ошибок.

Из самих ошибок к сожалению что-то понять весьма затруднительно - они растут из глубин минифицированного кода библиотеки.

Но питаю надежду что может окинув опытным взглядом что-то сможете посоветовтаь. Спасибо.

 

 

Кажется разобрался уже сам, спасибо.

 

Надо сделать такие изменения:

 

1. Заменить

e.get('coordPosition');

на

e.get('coords');

 

2. Заменить

SelectionBox.options.set({"strokeColor":"#0000ff", "fillColor":"#0000ff", "fillOpacity":0.2, "visible":false});

на

SelectionBox.options.set({"strokeColor":"#0000ff", "fillColor":"#0000ff", "fillOpacity":0.2, "visible":false, hasBalloon:false, hasHint: false});

3. Заменить

"twirl#redIcon"

на

"islands#redIcon"

 

Обновленный вариант здесь:

http://jsfiddle.net/5vd96yz9/1/