Клуб API Карт

Получить координаты геоточки

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

Можно ли получить координаты геоточки для дальнейших операций? 

объявляю глобальную переменную, в которую затем хочу сохранить координаты

       city_center ;
        var city = new YMaps.Geocoder('Москва');
             YMaps.Events.observe(city, city.Events.Load, function () {
                        if (this.length()) {
                           var geoResult = this.get(0);
                           city_center = geoResult.getGeoPoint();
                           alert("1:" + city_center);
                       }
             });   
         alert ("2:"+city_center);


Первый алерт выдает реальные координаты, во втором - переменная неопределена. Как же вытащить нужные данные?

3 комментария
Sergey Konstantinov
28 января 2016, 09:04
Во-первых, желательно все же объявлять переменные с ключевым словом var; Во-вторых, запись значения происходит корректно. Дело в том, что обработка запроса к геокодеру происходит асинхронно, т.е. отправляется запрос на сервер, а ответ приходит через какое-то время. Поэтому, когда вызывается второй алерт, ответ от сервера еще не пришел и значение не записалось. Если же смотреть значение city_center ПОСЛЕ прихода ответа от геокодера, то все будет нормально.
Спасибо за разъяснения. Может посоветуете, как быть тогда в такой ситуации: есть несколько городов с магазинами; на странице каждого города нужно вывести карту с магазинами. Для этого нужно ведь знать центр города (у меня переменная city_center). Ну для map можно его не задавать, однако для GeoCollectionBounds нужна отправная точка! map = new YMaps.Map(document.getElementById("YMapsID")); city_center = new YMaps.GeoPoint(37.64, 55.76); map.setCenter(city_center, 12); bounds = new YMaps.GeoCollectionBounds(city_center); ShowPoints('Олимпийская деревня','Торговый Центр "Люкс"'); ShowPoints('Кутузовский проспект, 17','АРБАТ ПРЕСТИЖ'); ShowPoints('Ленинский проспект, 34/1','АРБАТ ПРЕСТИЖ'); ShowPoints('ул.Петровка, 2','ЦУМ'); } function ShowPoints(my_Address, my_Shop){ var geocoder = new YMaps.Geocoder(my_Address); YMaps.Events.observe(geocoder, geocoder.Events.Load, function () { if (this.length()) { var geoResult = this.get(0); bounds.add(geoResult.getGeoPoint()); map.addOverlay(geoResult.getGeoPoint()); map.setBounds(bounds); } }); } Можно ли сначала узнать координаты центра карты (только по названию города), а затем строить все прочее?
Sergey Konstantinov
28 января 2016, 09:04
самый простой путь - просто заранее узнать координаты всех городов. Если не хотите, то нужно вот так сделать: var map = new YMaps.Map(document.getElementById("YMapsID")), cityGeocoder = new YMaps.Geocoder('Москва'), bounds; YMaps.Events.observe(cityGeocoder, cityGeocoder.Events.Load, function () { if (this.length()) { map.setCenter(this.get(0).getGeoPoint(), 10); bounds = new YMaps.GeoCollectionBounds(map.getCenter()); ShowPoints('Олимпийская деревня','Торговый Центр "Люкс"'); ShowPoints('Кутузовский проспект, 17','АРБАТ ПРЕСТИЖ'); ShowPoints('Ленинский проспект, 34/1','АРБАТ ПРЕСТИЖ'); ShowPoints('ул.Петровка, 2','ЦУМ'); } }); function ShowPoints(my_Address, my_Shop){ var geocoder = new YMaps.Geocoder(my_Address); YMaps.Events.observe(geocoder, geocoder.Events.Load, function () { if (this.length()) { var geoResult = this.get(0); bounds.add(geoResult.getGeoPoint()); map.addOverlay(geoResult); map.setBounds(bounds); } }); } Обратите внимание, в ShowPoints я исправил map.addOverlay(geoResult.getGeoPoint()); -> map.addOverlay(geoResult);