Клуб API Карт

Замена request при поиске из панели ControlSearch

AntiMandron
17 июля 2013, 08:59

Здрасте! Вариант с ограничением областей у меня не подходит. Я хочу, чтобы стандартная панель на карте ControlSearch при поиске добавляла название города в начало строки request (которая передается для поиска)

 

я так понял копать нужно в сторону provider

 

myMap.controls.add(new ymaps.control.SearchControl({provider: new CustomSearchProvider()}), {left: 5, top: 5});

function CustomSearchProvider() {
   
}


CustomSearchProvider.prototype.geocode = function (request, options) {
    var promise = new ymaps.util.Promise();

 

// тут promise это уже после обращения к сервису... где нужно делать request = "Город, " + request;


    return promise;
};

10 комментариев
Подписаться на комментарии к посту
Вариант "задать bounds для ограничения области поиска" вам по каким-то соображениям не подходит?

да просто из спортивного интереса не могу додумать как можно иначе

Наверное нужно в методе geocode возвращать стандартный ymaps.geocode со своим запросом.

myProvider = {geocode: ymaps.geocode("Город, " + request)};

Да нет же, нужен метод, возвращающий промис, а не промис вместо метода:

 

CustomSearchProvider.prototype.geocode = function (request, options) {    return ymaps.geocode('Город, ' + request, options);};

 

 

а!!! теперь понял, спасибо :)

чета не хочет

ymaps.ready(init);
function init(){
coords = [56.477670000000, 84.952930000000];
myMap = new ymaps.Map('map', {center: coords, zoom: 11});
myMap.controls.add(new ymaps.control.SearchControl({provider: myProvider}), {left: 5, top: 5});
}
 
function myProvider(){}

myProvider.prototype.geocode = function (request, options) {
// return ymaps.geocode('Город, ' + request, options);
return ymaps.geocode('Томск');
};

 

так тоже пробую, чета ругается Out of Memory

myProvider = {geocode: function (request, options) {return ymaps.geocode('Томск, ', options);}}
myMap.controls.add(new ymaps.control.SearchControl({provider: myProvider}), {left: 5, top: 5});

Все правильно кроме того, что надо передавать инстанс, а не конструктор:

 

{provider: new myProvider()}

ясно, но вот так у меня тоже заработало

myProvider = {geocode: function (request, options) {return ymaps.geocode('Томск, '+request);}}
myMap.controls.add(new ymaps.control.SearchControl({provider: myProvider}), {left: 5, top: 5});