Клуб API Карт

IGeocodeProvider - нужна помощь для создания собственного геопоиска

i-rassadin
10 декабря 2010, 16:35

Доброго всем!

Пытаюсь написать собственный геокодер.

По плану он сначала должен искать по локальной базе данных, и если ничего не найдено, искать с помощью обычного геокодера и геокодера народной карты.

Как я понимаю, мне надо создать объект, реализующий функцию geocode, как указано в справочнике.

Сложность для меня на данный момент в том, что передавать в качестве параметра result в successCallback. В документации написано, что "results - массив объектов типа YMaps.IInteractiveGeoObject". Но YMaps.IInteractiveGeoObject - это не класс, а интерфейс...

Если в result передавать массив объектов какого-нибудь класса, который этот интерфейс реализует (например,GeocoderResult), то это приводит к ошибкам.

В общем, в каком виде передавать результаты геокодирование в successCallback, я так и не понял :(

Прошу помощи.

 

8 комментариев
Подписаться на комментарии к посту
Самое простое решение - это создавать метки.

Дайте ссылку на страницу, на которой вы экспериментируете. Подскажу более конкретно.
Массив меток возвращать пробовал.
в результате js ошибка 

Uncaught TypeError: Cannot call method 'toString' of undefined


А можете дать ссылку на страницу или хотя бы листинг кода?
var simpleProvider = {
geocode: function (request, options, successCallback, failureCallback) {
$.get(
"/map/map/get_objects_by_pattern.pl"
,{
key: key
,return_type: 'json'
,query: request
}
,function(data) {

if (typeof(data.error) != 'undefined' && data.error != null) {
failureCallback(Utf8.decode(data.error));
} else {
successCallback({
found: data.length,
suggest: null,
results: createGeocoderResultsByJSON(data)
});
}
}
,'json'
);
}
};

map.addControl(new YMaps.SearchControl({
noPlacemark: true,
geocodeOptions: {
geocodeProvider: simpleProvider
}
}));


function createGeocoderResultsByJSON(data) {
var foundObjects = [];
var i = 0;
for (entry in data) {
foundObjects[i] = new YMaps.Placemark(
new YMaps.GeoPoint(data[entry].lng, data[entry].lat)
);
i ++;
}
return foundObjects;
}
счас тестовую страничку забацаю и выложу ссылку
неужели никто свой поиск не писал никогда?
разобрался сам.
ошибка у меня была в неправильной передаче количества найденных объектов в success callback