Клуб API Карт

Как передать координаты из geocode в placemark?

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

Здравствуйте,

помогите, пожалуйста, понять, в документации не нашёл.

Координат я не знаю, получаю их посредством geocode:

var myGeocoder = ymaps.geocode( ..некая строковая переменная... );

а как это передать в

a = new ymaps.Placemark( координаты ) ?

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

 

8 комментариев

Если у вас одна метка, проще узнать координаты через Инструмент определения координат

нет, у меня не одна метка, у меня целый массив адресов, которые я хочу перебором массива передать в метки.

 

 

 

Мы не рекомендуем так делать.

Геокодирование каждого адреса это отдельный http-запрос.

Отправлять с каждого клиента кучу одних и тех же запросов – плохое решение.

Лучший вариант – прогеокодировать ваши адреса на сервере один раз, сохранить координаты (в БД)

И на клиенте создавать метки по координатам

Адресов слишком много, это crm. Плюс ко всему они постоянно добавляются. Задача состоит в том, чтобы можно было выбрать в пользовательском интерфейсе 1-5 адресов максимум и получить их на карте. Количество таких запросов - весьма небольшое и нечастое. Я думаю, это лучше, чем геокодить всю базу и постоянно геокодить новые данные. Фактическое количество адресов на несколько порядков превышает количество возможных запросов от системы в год.

 

Вы подскажите, как передать координаты в плейсмарк : )

ymaps.geocode('адрес', { results: 1 })

.then(function (res) {

    console.log(res.geoObjects.get(0).geometry.getCoordinates())

});

У меня почему-то внутри function (res) всё работает как-то странно, там не понятным мне образом изменяется переменная цикла i.

 

//array - это массив с адресами. всего два адреса
for (var i = 0; i < array.length; i++) {
alert('i вне геокодера = '+i);
    var myGeocoder = ymaps.geocode(array[i].adress);
    myGeocoder.then(
        function (res) {
alert('i внутри геокодера = '+ i);
...
        },
        function (err) {
        }
    );
};

 

При массиве из двух адресов последовательность алертов такова:

1)i вне геокодера = 0

2)i вне геокодера = 1

3)i внутри геокодера = 2

4)i внутри геокодера = 2

 

Как такое может быть?... я то ожидаю 0, 0, 1, 1

 

Может быть я вообще задачу неправильно решаю и вы мне более нормальное решение подскажете?

У меня массив (могу его в любой форме представить, если нужно будет), который содержит не только адреса, но и название точки (возможно, будет что-то ещё в дальнейшем).

 

Массив вида:

array[i][array[address,caption]]

Каким способом мне лучше всего построить точки из массива?

(ну, или, как мне получать координаты в переменную, вне function (res) ?)

 

Я вам уже писал, – геокодирование это http-запрос и соответственно асинхронный ответ.

Ваш цикл уже закочит свою работу, когда начнут приходить ответы, к тому же они могут приходить в другой последовательности.

Могу посоветовать хорошую книгу

Спасибо! качнул.