Клуб API Карт

Найдено на тему «поиск по коллекции»:
Поиск по собственным объектам загруженным с помощью ObjectManager`а
ытя
28 апреля 2016, 16:28

Добрый день, а есть ли у кого пример как реализовать поиск по собственным объектам, которые были загружены на карту с помощью ObjectManager?

Я пытался делать, взяв за основу данный пример: https://tech.yandex.ru/maps/jsbox/2.1/custom_search и даже получаю результат поиска, но не работает самаое главное, при выборе объекта из выпадающего списка я получаю ошибку в консоль "Uncaught TypeError: Cannot read property '1' of undefined" и больше ничего не происходит.

Собственно как я пытался сделать:

Создаю обжект менеджер:

objectManager = new ymaps.ObjectManager({
    clusterize: true,
    gridSize: 32,
    groupByCoordinates: true,
});
myMap.geoObjects.add(objectManager)

И загружаю в него данные (этот момент опустил)

Создаю экземляр класса ymaps.control.SearchControl:

var mySearchControl = new ymaps.control.SearchControl({
    options: {
        provider: new CustomSearchProvider(objectManager),
        noPlacemark: true,
        resultsPerPage: 5,
        size: 'large'
    }
});

И собственно сам провайдер:

function CustomSearchProvider(points)
{
    this.points = points;
}

CustomSearchProvider.prototype.geocode = function (request, options)
{
    var deferred = new ymaps.vow.defer(),
    geoObjects = new ymaps.GeoObjectCollection(),
    offset = options.skip || 0,
    limit = options.results || 20;

    var search_points = this.points.objects.getAll();

    var points = [];
    for (var i = 0, l = search_points.length; i < l; i++)
    {
        var point = search_points[i];

        if(point.properties.search_text.toLowerCase().indexOf(request.toLowerCase()) != -1)
        {
            points.push(point);
        }
    }

    points = points.splice(offset, limit);
    for (var i = 0, l = points.length; i < l; i++)
    {
        var point = points[i],
            coords = point.properties.coords;

        geoObjects.add(new ymaps.Placemark(coords,
        {
            name: point.properties.address,
            description: point.properties.text,
            boundedBy: [coords, coords]
        }));
    }

    deferred.resolve(
    {
        geoObjects: geoObjects,
        metaData: {
            geocoder: {
                request: request,
                found: geoObjects.getLength(),
                results: limit,
                skip: offset
            }
        }
    });
    return deferred.promise();
};

Помогите советом, что я делаю не так?

6 комментариев
ObjectManager,поиск,поиск по коллекции,SearchControl
Как правильно открыть балун в поиске?
Артём Ершов
24 апреля 2013, 13:01

Добавил на карту поиск по своим объектам по аналогии с примером в песочнице (http://api.yandex.ru/maps/jsbox/custom_search) с единственным отличием, что там на карту добавлена геоколлекция, а у меня кластеры. Слушаю событие resultselect (тоже кстати не верно, потому что оно происходит до перехода к метке который разумеется закроет только что открытый балун, а как правильно пока не знаю) и перебираю элементы кластера сравнивая их айдишники Если элемент отображён на данный момент на карте не кластером, а отдельной меткой, то проблем нет, в противном случае не работает. Вообщем в итоге всё доросло до кода ниже и всё равно не работает) Помогите люди добрые советом дельным или примером подходящим.

 

 getState = function (point) {
     return clusterer.getObjectState(point);
 }
 mySearchControl.events.add("resultselect", function (e) {
     Index = e.get("resultIndex");
     mySearchControl.getResult(Index).then(function (result) {
         id = result.properties.get("id");
         clusterer.each(function (item) {
             var state = getState(item);
             cluster = state.isClustered && state.cluster;
             if (cluster) {
                 cluster.properties.get("geoObjects").each(function (item) {
                     if (item.properties.get('id') == id) {
                         cluster.state.set("activeObject", item);
                         cluster.balloon.open();
                     }
                 });
             } else {
                 if (item.properties.get('id') == id) {
                     item.balloon.open();
                 }
             }
         });
     });
 });

 

6 комментариев
кластеризатор,API 2.0,поиск по коллекции,балун
Пример: поиск по собственным геообъектам
tekunova
25 июня 2012, 15:11
Пример: поиск по собственным геообъектам
В API Яндекс.Карт есть стандартная функция: поиск адресов на карте. Помимо этого API позволяет организовать поиск по собственным объектам, добавленным на карту. При этом вы можете использовать стандартный контрол API (SearchControl) для отображения поисковой строки и выдачи результатов поиска. Достаточно добавить стандартному SearchControl свой класс источника данных (provider), который ищет в переданной коллекции меток.

Посмотреть пример в новом окне.

Использование стандартного контрола может сильно упростить вам задачу. Не нужно рисовать и верстать ни поисковую строку, ни выдачу результатов поиска.

На карте покрытия сети Мегафона в Москве можно посмотреть, как выглядит SearchControl и результаты поиска по адресам. Ждем ваших примеров использования поиска по собственным объектам.
4 комментария
API 2.0,поиск по коллекции,поиск,примеры
Поиск по добавленным меткам в API 2
Удалённый пользователь
15 июня 2012, 12:35

Подскажите, как реализовать поиск по названию добавленных меток?

13 комментариев
поиск по коллекции,поиск,коллекции
Поиск среди элементов карты
Илья Ярмак
10 февраля 2011, 08:58

Доброго времени суток!

На моей карте подгружаются объекты из БД. Теперь нужно сделать поиск среди этих объектов по имени. Я так понимаю, мне должен помочь метод filter(), но что то не получается его правильно прикрутить :( Как это нужно правильно сделать?

 var group=[];
   
   $.post('Handler.ashx', 'param=' + param.toString(), function(response)
            {
                data = eval(response);
               
                group[param] = new YMaps.GeoObjectCollection("default#");
               
                for (i in data) {
                    // Создание стиля для значка метки
                    var s = new YMaps.Style();
                    s.iconStyle = new YMaps.IconStyle();
                    s.iconStyle.href = data[i].Style;
                    s.iconStyle.size = new YMaps.Point(18, 18);
                    s.iconStyle.offset = new YMaps.Point(-9, -9);
                    s.balloonContentStyle = new YMaps.BalloonContentStyle(
                        new YMaps.Template("<div>$[description]</div>")
                    );

                    var point = new YMaps.GeoPoint(data[i].Longitude, data[i].Latitude);
                    var placemark = new YMaps.Placemark(point, {hasHint: 1, style: s});
                     placemark.name = data[i].Name;
     
                     //тут засовываем html
                     placemark.description = data[i].Html + "<br />";
     
                     group[param].add(placemark);
                }
                   
                map.addOverlay(group[param]);
       });

 Вот так вот будет совсем мракобесие:

 

YMaps.Events.observe(group[12], group[12].Events.Load,

function () {

  var obj = this.filter(function(obj){

      return obj.name = '';

  });

  obj[0].openBalloon();

});

6 комментариев
поиск по коллекции
Как найти метку по названию?
Удалённый пользователь
4 февраля 2011, 00:16

подскажите: есть карта, скажем, с сотней меток, как организовать инструмент поиска и показа (метку в центр карты) этих меток по их названию?

6 комментариев
поиск по коллекции,поиск
Как найти на карте добавленную ранее метку (не группу) ?
KDV
29 ноября 2010, 16:18

Суть задачи:

На карте есть статичные объекты (например ломаные) и десятки движущихся хаотично меток YMaps.Placemark.

В общем надо  перемещать каждый из объектов индивидуально, без полной перерисовки через map.removeAllOverlays и т.п.

Нужет поиск метки по ее ID с последующем изменением ее координат, т.е. аналог document.getElementById().

Вопрос КАК ?

В API ничего подходящего кроме групп не нашел, но 1 метка = 1 группа как то нелогично и неудобно с кучей лишнего кода.

PS Метки создавались динамически в цикле локальными переменными JS,  т.е. набор глобальных в JS меток-переменных отсутствует.

6 комментариев
метка,поиск по коллекции
Помогите разобраться, поиск объекта по координатам (xml)
Ercan
13 июня 2010, 20:37

Для отображения множества объектов на карте подгружаю XML-файл.

При клике на ссылку для открытия балуна использую следующий код:

 

YMaps.Events.observe(ml, ml.Events.Load, function () {
   var obj = this.filter(function (obj) {
     return obj.id == 'некий id';
   });
   obj[0].openBalloon();
});

 

Вопросов несколько:

- как выдернуть координаты для найденного объекта obj ?

- можно ли организовать поиск (выборку) по координатам объекта ?

6 комментариев
метка,поиск по коллекции,YMapsML
Поиск по карте
Berserck
19 мая 2010, 18:43

День добрый!

На карте через map.addOverlay(createObject("Placemark", new YMaps.GeoPoint(**.******,**.******), "constructor#pmlbmPlacemark", "*******")); заданы всякие объекты и через map.addControl(new YMaps.SearchControl()); осуществляется поиск по карте.

Вопрос - как сделать, чтоб при поиске выводились не только улицы города, а находило и созданные на карте объекты по их названию\описанию?

3 комментария
поиск по коллекции,геокодирование
Поиск по меткам (xml)
ronurlnet
5 ноября 2009, 16:52

Имеются метки на карте, вставлены через xml:

var ml = new YMaps.YMapsML( 'http://site.ru/xml/compshop.xml' );
map.addOverlay(ml);

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

 

4 комментария
поиск по коллекции