Клуб API Карт

работа с IGeocodeProvider

cool-mail-bro
15 августа 2012, 19:49

 

   

 

 

 

 

Нужно сделать ограничение по области поиска.

Звучит вроде бы просто. Но поиск идёт по меткам, берущимся из МоиКарты Яндекса, и что-то я никак не могу это организовать.

Хотел через свой geocodeProvider сделать - не получается. Гуглил по всем уголкам, куда только ведут внешние ссылки - ничего не нашёл.

 

Суть задачи в картинках: здесь {a link was here} в верхнее поле поиска введите "метка 22" + {Enter}. Вас выкинет в Нижний, а хотелось бы, чтобы поиск показал метку в Мск (метка 222) - в области поиска, ограниченной экраном.

 

Ниже мой варант кода с использованием geocodeprovider.

Что-то я явно недопонимаю... Плачевный резульат такой реализации - {a link was here}

Собственно, поле поиска даже не пытается использовать мой вариант провайдера, насколько я вижу по дебаггеру. 

Подскажите, пожалуйста, как всё правильно сделать. 

Буду рад любой подсказке, хотя лучше, прямо готовым кодом, а то я уже яву и ymapsml видеть не могу :)

var geoProvider = {
   geocode: function (request, options, successCallback, failureCallback) 
    {
var Results = [];
Results[0] = new YMaps.GeocoderResult(new YMaps.GeoPoint(v1));
var it2 = [];
collection2.each(function (point) { it2.push(point); });
for (var i = 0; i < it.length; i++) {
var prop2 = it2[i].properties.get('balloonContentBody');
if(~prop2.toLowerCase().indexOf(request.toLowerCase())) {
Results[i] = items[i];
};
};
        failureCallback(Utf8.decode(data.error));
        successCallback({
found: Results.length,
suggest: 0,
results: Results                            
        });
 }
 };
var search1 =  new ymaps.control.SearchControl(
{geocodeOptions:{ geocodeProvider: geoProvider,boundedBy: map.getBounds(),strictBounds: true}});
map.controls.add(search1);

 

 

5 комментариев
Подписаться на комментарии к посту

посмотрите статью "Поиск по собственным геообъектам" там как раз свой провайдер используется

 

Собственно, поле поиска даже не пытается использовать мой вариант провайдера, насколько я вижу по дебаггеру. 

метод geocode в интерфейсе провайдера не принимает successCallback и failureCallback

где вы такое увидели?

еще он должен возвращать интерфейс Promises

Это я уже несколько раз читал. 

А вот про параметры увидел где-то в API1, не помню уже, где точно (:

Вот ссылка на первое из выдачи поисковика - {a link was here}

 

Взгляните на мою первую ссылку -  {a link was here} - я там так и сделал, как в теме "Поиск по собственным геообъектам". Но тогда мне непонятно, как сделать ограничение на поиск по области.

В моём примере кода ограничение выставляют атрибуты boundedBy и strictBounds, а как это сдлать, чтобы работало под API 2 я не знаю, потому и создал эту тему.


Собственно, сгодится любой пример кода под API 2, который реализует поиск по своим меткам с ограничением по видимой области карты.


P.S. Подскажите, как тут у вас принято, когда моя тема уплывёт далеко вниз и рабочих ответов не будет и я пересоздам эту же тему заново - это в порядке вещей или надо как-то иначе действовать?

Сначала определитесь какое АПИ вы хотите использовать, первое или второе.

Вы написали половину кода на 1.x, вторую на 2.х, - так конечно работать не будет.

 

Создайте полигон соответствующий области поиска и проверяйте попадание каждого геообъекта в вашей коллекции, в область с помощью метода contains у геометрии полигона

Ну да, придётся перебором координат и их проверкой делать, а с помощью тех атрибутов было бы поэстетичнее... 

Ладно, лишь бы работало. Спасибо за ответы!