В версии api 2.0 для поиска по своим объектам на карте и использовал пример из песочницы.
function CustomSearchProvider(points) {
this.points = points;
}
// Провайдер ищет по полю text стандартным методом String.ptototype.indexOf.
CustomSearchProvider.prototype.geocode = function (request, options) {
var promise = new ymaps.util.Promise(),
geoObjects = new ymaps.GeoObjectArray(),
// Сколько результатов нужно пропустить.
offset = options.skip || 0,
// Количество возвращаемых результатов.
limit = options.results || 20;
this.points
// Ищем в свойстве text каждого элемента массива.
.filter(function (point) {
return point.text.toLowerCase().indexOf(request.toLowerCase()) != -1;
})
// При формировании ответа можно учитывать offset и limit.
.splice(offset, limit)
// Добавляем точки в результирующую коллекцию.
.forEach(function (point) {
var coords = point.coords,
text = point.text;
geoObjects.add(new ymaps.Placemark(coords, {
name: text + ' name',
description: text + ' description',
balloonContentBody: '<p>' + text + '</p>',
boundedBy: [coords, coords]
}));
});
promise.resolve({
// Геообъекты поисковой выдачи.
geoObjects: geoObjects,
// Метаинформация ответа.
metaData: {
geocoder: {
// Строка обработанного запроса.
request: request,
// Количество найденных результатов.
found: geoObjects.getLength(),
// Количество возвращенных результатов.
results: limit,
// Количество пропущенных результатов.
skip: offset
}
}
});
// Возвращаем объект-обещание.
return promise;
};
http://api.yandex.ru/maps/jsbox/custom_search
Сейчас переписываю свой проект под новую апи. Со всем остальным пока разобрался (даже с кластерами оказалось всё не так страшно, как боялся), а вот на провайдере поиска застопорился. Помогите советом дельным или вдруг кодом рабочим =)