Клуб API Карт

адрес по точке

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

Товарищи, помогите разобраться.

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

var addr = "";

var geocoder = new YMaps.Geocoder(mygeopoint, {results: 1});

YMaps.Events.observe(geocoder, geocoder.Events.Load, function () {

    addr = this.get(0).text;

    alert(addr);

});

alert(addr);

Спасибо.

8 комментариев
Sergey Konstantinov
28 января 2016, 06:22

Никак, геокодирование - асинхронный процесс. Адрес будет заполнен после получения ответа от сервера.

Разместите свой код прямо в обработчике Load.

понял. а как передать в обработчик переменную тогда?

типа такого, чтоб mytext можно было вывести внутри:

var mytext = "text";

YMaps.Events.observe(geocoder, geocoder.Events.Load, function () {

    addr = this.get(0).text;

    alert(mytext + " - " + addr);

});

 

 как передать в обработчик переменную тогда?

 

Там будет видна глобальная переменная или можно,

например, через контекст (4-й параметр)

в вызов observe

 

YMaps.Events.observe(geocoder, geocoder.Events.Load, function (geocoder) {

    addr = geocoder.get(0).text;

    alert(this.mytext + " - " + addr);

}, {mytext: "hello world"});

 

 

 

как все сложно оказывается.

 

тогда не понятна такая штука:

если внутри обработчика прописать

map.addOverlay(geocoder.get(0));

то добавляется метка

 

а если написать внутри так:

var mark = new YMaps.Placemark(mygeoposition);

mark.setIconContent(mycontent);

map.addOverlay(mark); 

 

то такая метка не отображается.

 

как же тогда отобразить метку на карте с адресом (найденным по координате)  и доп информацией?

вроде бы всё просто

а что именно нужно сделать?

зачем чтото геокодировать

а потом создавать свою метку?

задача упрощенно:

есть координаты.

надо отобразить балун с адресом и некоторой доп инфой.

 

как отобразить балун с адресом ясно.

как отобразить балун просто с инфой тоже понятно.

а как сделать один балун на котором будет и то и другое?

 
                if (geocoder.length()) {                    var result = geocoder.get(0),                   result.setStyle({                        balloonContentStyle: {template: new YMaps.Template("$[text]$[name]v>$[description]v>")}                    });                        map.addOverlay(result);                        result.name = 'myname';                        result.description = 'mydescription';                        result.openBalloon();
Можно расширить пришедший geocoderResult своими полями (в данном случае name и description) и немного подправить шаблон балуна
Вроде разобрался. Спасибо огромное!