Клуб API Карт

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

deeppaul
9 июля 2011, 11:20

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

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

_map.setBounds(geoResult.getBounds()
_map.setZoom(16, { smooth: true }

geoResult это результат каждого геокодирования для каждого адреса.

Помогите плиз.

14 комментариев
Подписаться на комментарии к посту

добавить все точки из всех результатов геокодирования в 

YMaps.GeoCollectionBounds и уже на него делать map.setBounds

Убрал в цикле _map.setBounds(geoResult.getBounds());.

Вместо этого написал gBounds.add(geocoder.get(0).getGeoPoint());, где var gBounds = new YMaps.GeoCollectionBounds(); задано заранее до цикла.

После цикла написал map.setBounds(gBounds, 11);, но карта странно себя ведет теперь, непонятно куда отсылает. Может я неверно добавляю точки в gBounds?

сразу добавлю, что в цикле теперь так

map.addOverlay(geoResult);

gBounds.add(geocoder.get(0).getGeoPoint()); или gBounds.add(geoResult.getGeoPoint());

может оверлей не надо? может оверлей надо со всеми точками сразу?

геокодирование - процесс асинхронный

поэтому делать map.setBounds(gBounds)

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

Спасибо большое. Помогло. Ради пробы поставил таймер, через 1.5 сек все показало как надо! Но… появились другие вопросы, отследить geocoder.Events.Load отдельный ясно как, а вот как тогда отследить их все в этом цикле? Таймер что-то не хочется использовать… Сорри за кучу, может глупых вопросов

посмотрите обсуждение схожей проблемы

http://clubs.ya.ru/mapsapi/replies.xml?item_no=15812

 

я не знаю каким именно образом вы делаете множественное геокодирование

поэтому затрудняюсь сказать что куда надо ставить

  писал подобный пример 

Вы используете его?

у меня такой же фактически код (самый первый только), только я не использую группы, а использую addOverlay на каждой итерации, важно ли это я не знаю…

 

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

по идее можно изловчиться и с ним, но все же хочется красивого кода и более рационального решения

 

пока как таймер ничего не придумал =( можно конечно задать переменную, так скажем, финишей геокодирования всех адресов var all_addrs_finished — по завершении геокодирования каждого адреса эта переменная увеличивается на единицу

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

но блин, бредово как-то =)

правильнее наверное использовать нотификацию о событии

т.е. извещать о завершении процесса геокодирования всех адресов

некоторого слушателя, обработчик которого уже будет позиционировать карту

правильнее наверное использовать нотификацию о событии

т.е. извещать о завершении процесса геокодирования всех адресов
а как такое сделать то? я вот как раз и не знаю

 

в примере что я приводил так и сделано

так там мультигеокодер используется, а мне с ним практически не подружиться ибо нужно помимо адреса метке (или как там точно…) передавать еще и шаблон для заполнения иконки и балуна

видимо придется, что то другое изобретать

это не важно 

суть в том что там генерируется кастомное событие (методом notify) и есть его слушатель который просто выводит алерт

кстати точно! я упустил этот момент! спасибо большой за подсказку, буду копаться, походу истина десйтвительно где-то рядом

 

После цикла написал map.setBounds(gBounds, 11);

 

map.setBounds принимает только один параметр