Клуб API Карт

Заголовок не указан

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

 

Всем привет)

Уже который день бьюсь с геокодером,и решил обратиться за помощью к знатокам)

Не судите строго новичок в этом всём.

Задача в том чтобы геокодировать список городов по названиям и вывести на карту метки с номерами по порядку.

 

Вот мои задумки:

В массив array_cities записываются названия городов, через которые я могу добраться до точки назначения (в данном примере для прстоты я работаю с постоянным массивом).

Элементы массива передаются в geocode().

И по координатам метка заносится в упорядоченную коллекцию GeoObjectArray(),а затем на карту.


Проблема в том, что ответы на запросы геокодера приходят в случайном порядке и в GeoObjectArray() метки заносятся в произвольном порядке, и из-за этого на карте значения меток не совпадаюст с номером города в массиве array_city.


Единственное что придумал - после того, как GeoObjectArray() заполнится, отсортировать его значения в соответствии с массивом array_city. Но не знаю, как вытащить из свойств геообъекта его название,чтобы сравнить это название с элементом массива array_city.


Подскажите,пожалуйста,как вытащить из свойств геообъекта его название?

Или может есть вообще какой-нибудь другой подход к решеню данной задачи?

 

 

 

 

function init ()

{

            var myMap = new ymaps.Map("map", {

                    center: [55.45, 37.37], 

                    zoom: 3

                });

 

array_cities=["москва","тверь","хельсинки","париж"]

incr=0

myCollection = new ymaps.GeoObjectArray();

for(var i=0;i< array_cities.length;i++)

{

           myGeocoder= ymaps.geocode( array_cities[i], { results: 1 })

          myGeocoder.then( function (res) 

      {

         first=res.geoObjects.get(0)

         first_obj=first.geometry.getCoordinates()

         myPlacemark=new ymaps.Placemark(first_obj,{iconContent: incr})

         myCollection.add(myPlacemark,incr)

                          incr+=1

         }

    )

}

myMap.geoObjects.add(myCollection)

}

 

 

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

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

класс MultiGeocoder, который его реализует

Спасибо за ответ,и за MultiGeocoder.

Может я чего-то не понимаю,но ведь в массив result результаты геокодирования заносятся не в том порядке,что во входном массиве request,а в совершенно случайном?

нет. добавляются в правильном порядке

посмотрите, там в метод add у экземпляра GeoObjectArray - конкретный индекс передается

 

Да,извините,тупанул.

Спасибо огромное, все работает!)

не могли бы ответить еще на вопрос

Что не так в коде,потому что результаты все равно выводятся не в правильном порядке (сначала выводит правильно, но, если обновлять страницу, то порядок путается)

 

super_Geocoder=new MultiplyGeocoder()

 

super_Geocoder_promise= super_Geocoder .geocode(m)

 super_Geocoder_promise.then( function (result) 

 

{

         for(var i=0;i

{

     myPlacemark=new ymaps.Placemark(result.geoObjects.get(i).geometry.getCoordinates(),{iconContent: i})

              myMap.geoObjects.add(myPlacemark)

 

}

 

})

 

по идее обновление страницы не должно влиять

а можете дать массив запросов, на которых у вас происходит ошибка?