Клуб API Карт

Проблема с установкой map.setBounds() и GeoCollectionBounds

tsergv
15 апреля 2010, 16:40

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

Создаю коллекцию YMaps.GeoObjectCollection (хранится в глобальной переменной trikCol), в нее помещаю Placemark-и двух типов - результаты поиска YMaps.Geocoder-а по адресу и созданые "вручную" YMaps.Placemark на основе известных координат.

 

После этого "пробегаюсь" по коллекции, собираю массив точек и на его основе создаю объект YMaps.GeoCollectionBounds. По нему пытаюсь спозиционировать карту:

 

  var points = [];
  trikCol.forEach(function (obj) {points.push(obj.getGeoPoint());});   
  var gcBounds = new YMaps.GeoCollectionBounds(points);
  map.setBounds(gcBounds);

 

После этого добавляю коллекцию на карту - map.addOverlay(trikCol);

 

В результате ВСЕ метки отображаются на карте корректно, но в массиве points оказываются только метки созданные "вручную" на основе известных координат; метки, являющиеся результатом геокодирования, отсутствуют. Так и должно быть, или я все-таки что-то делаю не так? (в результате setBounds() выставляется на основе только части меток, созданных руками).

 

P.S. похоже, что дело в асинхронности геокодера - и к моменту сбора массива точек для GeoCollectionBounds коллекция меток просто не заполнена еще результатами геокодирования. Я правильно понимаю?

5 комментариев
Подписаться на комментарии к посту
Скорее всего проблема в этом.
Возможно, что вам поможет вот этот пример:
http://api.yandex.ru/maps/jsapi/examples/multiplygeocoding.html

Ага, спасибо, буду грызть.

Да, действительно, причина была в этом. Решилось с помощью алгоритма множественного гео-кодирования, аналогичного приведенному примеру. Спасибо!

Можно еще вопрос тут же?

map.setBounds(new YMaps.GeoCollectionBounds(points)); позиционирует по гео-точкам массива без учета размера нарисованного значка метки. В итоге значки в верхней части карты иногда могут "резаться". Например: http://www.apteki.su/stoletov/ (значек под №1)

Есть какие-то штатные средства в api, чтоб обыграть это (сделать автоматическое смещение на высоту значка метки), или надо самому придумать что-то с переводом координат в пиксели и задавать смещение "руками"?

Штатных нет, нужно придумывать алгоритм самостоятельно.

Жаль :)
Спасибо за ответ.