Клуб API Карт

Получение координат по адресу

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

Ребят бьюсь целую ночь, не могу сообразить, помогите пожалуйста.

В общем привожу пример из контекта

.add(new ymaps.Placemark([crds("Москва, Садовая 28")], { hintContent: "'.$item['pagetitle'].'", balloonContent: "'.$addres.'",id: "group-1-'.$id.'" }, { iconImageHref: "'.$map_image.'",iconImageSize: [37, 37] } ))'.$sumbol.'

 

Сама функция crds

 

function crds(crd) {
    var myGeocoder = ymaps.geocode(crd);
    myGeocoder.then(
        function (res) {
            return res.geoObjects.get(0).geometry.getCoordinates();;
        }
    );
}

 

 

Вообщем суть такого что функция crds принимает адрес, а возвратить должна координаты.

Я привел пример из своего скрипта. раньше вместо функции там указывалось напрямую координаты и все работало, но заказчик попросил сделать так чтобы он в админке вписывал не коордианты, а адрес. 

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

2 комментария

Геокодер делает http-запрос на сервер Яндекса и возвращает результат асинхронно.

Вы не можете вернуть результат его работы сразу.

Чтобы работать с такими вызовами Вы можете использовать

1. функцию обратного вызова

или

2. объект-обещание 

 

1.

 

function crds(crd, callback) {
    ymaps.geocode(crd)
        .then(function (res) {            callback(res.geoObjects.get(0).geometry.getCoordinates());        });
}

 

Использование

 

crds('Москва', function (coords) {    // работаем с координатами});

 

 

 2.

 

function crds(crd, callback) {
    return ymaps.geocode(crd)
        .then(function (res) {
            return res.geoObjects.get(0).geometry.getCoordinates();
        });
}

 

Использование 

 

crds('Москва').then(function (coords) {
    // работаем с координатами
});

 

 

 PS: если нужен только первый результат, лучше запрашивать у геокодера один результат

 

ymaps.geocode('Москва', { results: 1 })

 

PSS: Если Javascript такой страшный и непушистый, что надо "биться целую ночь",

можно не мучать себя и геокодировать через PHP с помощью HTTP-геокодера

Спасибо, получилось!