Клуб API Карт

SearchControl и свой gecodeProvider

yuzhno-sakh-site
6 октября 2010, 07:41

пытаюсь прицепить к searchcontrol'у свой геокод провайдер, для поиска по своей базе.

Прочитал документацию, пытаюсь искать по тестовым данным, поиск начинается, но затем в консоль отладки яваскрипта выдётся ошибку "t is Undefined" и всё.

Перепробовал разное уже, но либо я не так понял документацию, либо взгляд уже замылен - не получилось ничего сделать.

вот куски кода.

иницализация контрола:

map.addControl(new YMaps.SearchControl({
            geocodeOptions:{ geocodeProvider: geocodeProvider  }
        }));

провайдер:

var geocodeProvider =
{
    geocode: function (request, options, successCallback, failureCallback)
    {
        //alert("request: " + request);
        successCallback({
            found: 1,
            suggest: 0,
            results: arr                           
        });
    }
};

тестовые результаты (массив arr):

var arr = [];
arr[0] = new YMaps.GeocoderResult(new YMaps.GeoPoint(142.730668, 46.957762));

При поиске функция geocode вызывается (выдаётся алерт, если его расскоментировать). (да и successCallback тоже, нормально работает если укзать пустой массив результатов и found: 0).

3 комментария
Подписаться на комментарии к посту
Ошибка возникает при попытке отобразить найденное в списке SearchControl'а. У результата поиска ищется поле text или поля name и description. Поле text разбивается на заголовок и описание по последней запятой.

var arr = [];
arr[0] = new YMaps.GeocoderResult(new YMaps.GeoPoint(142.730668, 46.957762));
arr[0].text = "Россия, город Южно Сахалинск";

arr[1] = new YMaps.GeocoderResult(new YMaps.GeoPoint(142.730668, 46.957762));
arr[1].name = "город Южно Сахалинск";
arr[1].description = "Россия";

var geocodeProvider =
{
    geocode: function (request, options, successCallback, failureCallback)
    {
        //alert("request: " + request);
        successCallback({
            found: 2,
            suggest: 0,
            results: arr
        });
    }
};

map.addControl(new YMaps.SearchControl({
    geocodeOptions:{ geocodeProvider: geocodeProvider  }
}));
Решили в следующей версии при отсутствии полей text и name выводить координаты.
спасибо, заработало :)