Клуб API Карт

Особенность Геокодера

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

Столкнулся с очень интересной особенностью.

Спрашиваю у геокодера new YMaps.Geocoder() о местечке "Тверская область, Андреапольский район, Ямищи", на что ответа не получаю. А вот если спросить у плагина YMaps.SearchControl, то он спокойно возврщает результат. Если ту же штуку провернуть с деревней "Яновищи", то и геокодер и поисковый плагин дают положительный рузельтат. В результате геокодер определяет только 1/10 часть андреапольского района.

Как такое может быть, и с чем это связано?

4 комментария
Как именно вы его спрашиваете и получаете ответ?
МОжете опубликовать код или дать ссылку на страницу
        function getCoords(id, name) {
            var geocoder = new YMaps.Geocoder(name);
            YMaps.Events.observe(geocoder, geocoder.Events.Load, function () {
                if (this.length() == 1) {
                    if ($('latitude['+ id +']').value == '') {
                        $('latitude['+ id +']').value = String(this.get(0).getGeoPoint()).split(",")[0];
                        $('latitude['+ id +']').style.backgroundColor = '#FFD7D7';
                    }
                    if ($('longitude['+ id +']').value == '') {
                        $('longitude['+ id +']').value = String(this.get(0).getGeoPoint()).split(",")[1];
                        $('longitude['+ id +']').style.backgroundColor = '#FFD7D7';
                    }
                    //alert("Поиск: " + name + " Найдено результатов: " + this.length());
                } else {
                    //alert("Ничего не найдено")
                }
            })
            YMaps.Events.observe(geocoder, geocoder.Events.Fault, function (geocoder, errorMessage) {
                alert("Произошла ошибка: " + errorMessage)
            });
        }

Мда. Очень странная логика.
А что если результатов будет больше 1? Ничего не найдено?

тем не менее этот код у меня алертит "1"

var geocoder = new YMaps.Geocoder("Тверская область, Андреапольский район, Ямищи");
YMaps.Events.observe(geocoder, geocoder.Events.Load, function () { alert(this.length()); });


С логикой все в порядке, это условие временное.
Кажется я понял, где у меня ошибка. Спасибо!