Клуб API Карт

Как узнать координаты через geocoder

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

Как получить координаты для дальнеших манипуляций (я хочу по клику вызвать карту)

>>console.log('coords2', coords); //undefined
 

var addr = 'Москва';
var coords, bounds;
// Как только будет загружен API и готов DOM, выполняем инициализацию
ymaps.ready(init(addr, coords));

// получение координат
function init (addr, coords) {
  return function () {
    var theGeocoder = ymaps.geocode(addr, {results: 1})
    theGeocoder.then(function (res) {
      var firstGeoObject = res.geoObjects.get(0);
      var coords = firstGeoObject.geometry.getCoordinates();
      var bounds = firstGeoObject.properties.get('boundedBy');
      console.log('coords', coords); // все ок!
    });
  } //return
} //init

console.log('coords2', coords); //undefined
//var coords2 = [55.755814, 37.617635]

var myMap;
// по клику рисую карту
$('#toggle').bind({
    click: function () {
    // рисую карту

1 комментарий
Во-первых, у вас в then используется локальная переменная coords для сохранения результата getCoordinates(). Значение глобальной переменной с тем же именем не меняется, и не должно.
Во-вторых, вы передаете в init значение coords, т.е. undefined, в параметр с именем coords, изменение значения параметра не изменит значения глобальной переменной coords .
Почитайте про области видимости переменных в JavaScript: http://learn.javascript.ru/functions-closures


В-третьих, init (а точнее, функция, которую init возвращает) вызовется после загрузки api и DOMContentLoaded, т.е. уже после того как выполнится console.log('coords2', coords).


https://jsfiddle.net/8s2erubz/1/