Клуб API Карт

(API 2.0) двойной geocode для поиска на карте

Пост в архиве.

на карте использую два геокодера

Здрасте! У меня на карте 2 панели поиска

 

var myProvider1 = {geocode: function (request, options) {return ymaps.geocode('Томск, '+request);}}

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

 

var myProvider2 = {geocode: function (request, options) {return ymaps.geocode('Москва, '+request);}}

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

 

Можно ли сделать так, чтобы панель была одна, но чтобы поиск работал по двум геокодерам, т.е. если не найдено первым, то ищем вторым?

 

function geocode2 (request, options)

{

...

// что тут нужно возвращать?

}

 

myProvider = {geocode:  geocode2 (request, options) {return .// и как тут прописать?..;}}

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

 

6 комментариев

Можно. 

Реализация примерно такая

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

function GeocodeMixedProvider() {}

GeocodeMixedProvider.prototype = {
    constructor: GeocodeMixedProvider,
    geocode: function (request, options) {
        var promise = new ymaps.util.Promise();
        alert(request);
        return promise;
    }
};

 

странно, при поиске не выводит запрос, как будто не использует GeocodeMixedProvider

все-таки

new GeocodeMixedProvider() и GeocodeMixedProvider()

это большая разница

огромное спасибо :)))

и еще вопрос...

 

function GeocodeMixedProvider() {}

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

ymaps.geocode('Москва, ' + request, {results: 1}).then(function (res)
{
if(res.geoObjects.getLength()){
var point = res.geoObjects.get(0);
pointcoords = point.geometry.getCoordinates();
console.log(pointcoords);

// если её раскомментирую, то запрос циклится почему-то

//promise.resolve(res);
}
else
{
promise.reject(err);
}
},
function (err){promise.reject(err);});
return promise;
}
};

разобрался