Блог API Яндекс.Карт

Пример: поиск по собственным геообъектам

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

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

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

На карте покрытия сети Мегафона в Москве можно посмотреть, как выглядит SearchControl и результаты поиска по адресам. Ждем ваших примеров использования поиска по собственным объектам.
16 комментариев

роскошно, еще бы саджест..

 

роскошно, еще бы саджест..

Хорошая мысль, но вроде верстка стандартного SearchControl-а не поддерживает такое. Или ты предлагаешь просто каждый раз искать при изменении текста в инпуте?

 

Да это бы удобно было бы. 

Посмотрите пример, он не работает, именно нет позиционирования на объект.

Работало на версии API 2.1.10.

Есть варианты обходного маневра ?

поправил

спасибо, все работает

Андрей Грэй
28 января 2016, 06:23

Спасибо. Очень полезная вещь.

А не подскажете где можно посмотреть пример или почитать как искать по вложенным массивам?

Например:

    var myPoints = [
          {
                    coords: [50.356472, 30.563022],
                    text: "aaa"
                },
                {
                    coords: [50.45351, 30.516489],
                    text: "aaa",
                    items: [
                    {
                        coords: [50.426472, 30.583022],
                        text: "bbb"
                    },
                    {
                        coords: [50.45351, 30.576489],
                        text: "bbb"
                    }
                ]},
                {
                    coords: [50.454433, 30.529874],
                    text: "aaa"
                },
                {
                    coords: [50.50955, 30.65791],
                    text: "aaa"
                }
       
    ];

искат по items или и в первом и втором уровнях, например значение coords.

можно использовать метод массива filter, если внутри есть еще один массив, с ним тоже использовать filter (типа рекурсии)

Спасибо помогло.

И ещё вопрос:

А почему noPlacemark:false/true не работает? Или может я чего не правильно понял в описании (http://api.yandex.ru/maps/doc/jsapi/1.x/ref/reference/searchcontrol.xml).?

В общем нужно чтоб ри переходе был открытый балун..., что-то типа (____.balloon.open())

Александр
28 января 2016, 06:23

Подскажите, 

если у меня несколько массивов - как искать по всем?

И еще - если сделать разные массив из координат и фамилии

(то есть массив 1 - координаты, Петров

массив 2 - координаты Иванов), можно ли при поиске по фамилии что бы выделялись все объекты?

Друзья, подскажите, а как сделать так, чтобы еще и description для каждого объекта указывать?

...

{ coords: [55.77, 37.46], text: 'Трактир', description: 'ул. Ленина 1' },

...

Ну и выводить, соответственно.

Заранее благодарен.

 

подскажите пожалуйста, можно ли как-то ужесточить условия поиска?

Суть

Объектов около 50тыс, есть множество абсолютно одинаковых по имени (т.к. используется нумерация), других отличительных признаков нет, итого при поиске объекта1 (которых и так более 10) в поисковую выдачу потадают объект10, объект10а, объект101 и проч, а это уже сотни..

Можно сделать чтобы список поисковой выдачи формировался как объект1 === объект1

Вопрос решился переименованием объектов

было "объект1" стало "-1 объект"

используя такой же запрос выдает только объекты с номером 1

Спасибо :-)

Добрый день, а есть ли у кого пример как реализовать поиск по собственным объектам, которые были загружены на карту с помощью ObjectManager?
есть json файл
{"id":"107","location":"Astana","geometry":{"type": "Point", "coordinates": [58.179594, 72.424947]},"properties":{"hintContent": "\u041c\u0435\u0436\u0441\u0442\u0435\u043d\u043d\u044b\u0439 CashIn 107", "iconContent": "<strong>CI<\/strong>", "balloonContent": "CashIn ATM", "balloonContentBody": "Normal", "balloonContentFooter": "\u0433. \u0410\u0441\u0442\u0430\u043d\u0430, \u043f\u0440. \u0420\u0435\u0441\u043f\u0443\u0431\u043b\u0438\u043a\u0438, 45, \u0443\u0433\u043e\u043b \u0443\u043b.\u0414\u0436\u0430\u043d\u0433\u0435\u043b\u044c\u0434\u0438\u043d\u0430", "balloonContentHeader": "CashIn ATM 107"},"options":{"preset": "islands#violetCircleIcon", "hideIconOnBalloonOpen": false}},
Как реализовать поиск по ID??
А можно найденные объекты подсвечивать или как то иначе выделять?


Я пробую задавать цвет Placemark по это не работает
Я сделал всё как в примере но усложнил создание найденного Placemark.


        geoObjects.add(new ymaps.Placemark(coords, {
name: point.name,
description: pointDescription,
balloonContentBody: '<p>' + point.phone + '<br>' + point.worktime + '</p>',
boundedBy: [coords, coords]},
{
preset: "islands#glyphIcon",
iconColor : "red"
})
);