Версия:
Популярные примеры
Карта
Геообъекты
Балун и хинт
Элементы управления
Активные области
Кластеризация
GeoQuery
Поведения и события
Поиск по карте
Пробки
Местоположение пользователя
Маршрутизация
YMapsML
GeoXML
ObjectManager
Модульная система
Панорамы
Внешние модули

Поиск по своим объектам

Сохранить как файлыЭкспорт на JSFiddle

Поиск объекта его названию реализуется с помощью функции geocode. Однако, эта функция производит поиск среди объектов, размещенных на обычной или народной карте.

А что делать, если необходимо организовать поиск по собственным объектам и интегрировать его с API Яндекс.Карт? Написать собственный провайдер поиска, который можно использовать в функции geocode и элементе управления Поиск по карте.

Провайдер поиска должен реализовывать интерфейс IGeocodeProvider. Данный пример показывает, как написать собственный провайдер и подключить его стандартному элементу управления Поиск по карте.

Обсуждение этого примера можно посмотреть в клубе.

\n\n","custom_search.js":"function init() {\n var myMap = new ymaps.Map('map', {\n center: [55.7, 37.5],\n zoom: 9,\n controls: ['zoomControl']\n }),\n // Создаем коллекцию.\n myCollection = new ymaps.GeoObjectCollection(),\n // Создаем массив с данными.\n myPoints = [\n { coords: [55.77, 37.46], text: 'Трактир' },\n { coords: [55.66, 37.48], text: 'Кафе' },\n { coords: [55.65, 37.42], text: 'Ресторан' },\n { coords: [55.64, 37.54], text: 'Музей' },\n { coords: [55.54, 37.52], text: 'Библиотека' },\n { coords: [55.53, 37.56], text: 'Школа' },\n { coords: [55.61, 37.61], text: 'Аптека' },\n { coords: [55.80, 37.58], text: 'Бар' },\n { coords: [55.71, 37.35], text: 'Институт' },\n { coords: [55.74, 37.57], text: 'Университет' },\n { coords: [55.58, 37.69], text: 'Больница' },\n { coords: [55.57, 37.70], text: 'Цирк' },\n { coords: [55.55, 37.64], text: 'Магазин' },\n { coords: [55.50, 37.75], text: 'Булочная' },\n { coords: [55.81, 37.73], text: 'Полиция' },\n { coords: [55.73, 37.68], text: 'Салон красоты' },\n { coords: [55.86, 37.76], text: 'Баня' },\n { coords: [55.38, 37.69], text: 'Гараж' },\n { coords: [55.91, 37.50], text: 'Дом' },\n { coords: [55.62, 37.32], text: 'Прачечная' },\n { coords: [55.85, 37.41], text: 'Стадион' },\n { coords: [55.67, 37.24], text: 'Вокзал' }\n ];\n\n // Заполняем коллекцию данными.\n for (var i = 0, l = myPoints.length; i < l; i++) {\n var point = myPoints[i];\n myCollection.add(new ymaps.Placemark(\n point.coords, {\n balloonContentBody: point.text\n }\n ));\n }\n\n // Добавляем коллекцию меток на карту.\n myMap.geoObjects.add(myCollection);\n\n // Создаем экземпляр класса ymaps.control.SearchControl\n var mySearchControl = new ymaps.control.SearchControl({\n options: {\n // Заменяем стандартный провайдер данных (геокодер) нашим собственным.\n provider: new CustomSearchProvider(myPoints),\n // Не будем показывать еще одну метку при выборе результата поиска,\n // т.к. метки коллекции myCollection уже добавлены на карту.\n noPlacemark: true,\n resultsPerPage: 5\n }});\n\n // Добавляем контрол в верхний правый угол,\n myMap.controls\n .add(mySearchControl, { float: 'right' });\n}\n\n\n// Провайдер данных для элемента управления ymaps.control.SearchControl.\n// Осуществляет поиск геообъектов в по массиву points.\n// Реализует интерфейс IGeocodeProvider.\nfunction CustomSearchProvider(points) {\n this.points = points;\n}\n\n// Провайдер ищет по полю text стандартным методом String.ptototype.indexOf.\nCustomSearchProvider.prototype.geocode = function (request, options) {\n var deferred = new ymaps.vow.defer(),\n geoObjects = new ymaps.GeoObjectCollection(),\n // Сколько результатов нужно пропустить.\n offset = options.skip || 0,\n // Количество возвращаемых результатов.\n limit = options.results || 20;\n \n var points = [];\n // Ищем в свойстве text каждого элемента массива.\n for (var i = 0, l = this.points.length; i < l; i++) {\n var point = this.points[i];\n if (point.text.toLowerCase().indexOf(request.toLowerCase()) != -1) {\n points.push(point);\n }\n }\n // При формировании ответа можно учитывать offset и limit.\n points = points.splice(offset, limit);\n // Добавляем точки в результирующую коллекцию.\n for (var i = 0, l = points.length; i < l; i++) {\n var point = points[i],\n coords = point.coords,\n text = point.text;\n\n geoObjects.add(new ymaps.Placemark(coords, {\n name: text + ' name',\n deescaped_scription: text + ' deescaped_scription',\n balloonContentBody: '

' + text + '

',\n boundedBy: [coords, coords]\n }));\n }\n\n deferred.resolve({\n // Геообъекты поисковой выдачи.\n geoObjects: geoObjects,\n // Метаинформация ответа.\n metaData: {\n geocoder: {\n // Строка обработанного запроса.\n request: request,\n // Количество найденных результатов.\n found: geoObjects.getLength(),\n // Количество возвращенных результатов.\n results: limit,\n // Количество пропущенных результатов.\n skip: offset\n }\n }\n });\n\n // Возвращаем объект-обещание.\n return deferred.promise();\n};\n\nymaps.ready(init);\n\n"},"resources":[],"directory":"https://sandbox.api.maps.yandex.net/examples/ru/2.1/custom_search/"}
Пишете на JavaScript? У нас есть вакансии
Sun Sep 18 2022 20:10:14 GMT+0300 (Moscow Standard Time)