Клуб API Карт

Автозум

Пост в архиве.
lnghost
26 апреля 2009, 16:12

Никак в документации не могу разобраться.

Вот есть у карты установленный центр с опередленным зумом. Есть поиск по адресу.

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

Если точка одна - тут все просто - ставим setCenter и все дела.

А если точек несколько - есть ли возможность автоматического зума, что бы на карте показывалась территория, максимально охватывающая все отрисованные маркеры?

10 комментариев
Азат, класс YMaps.CollectionBounds позволяет получить прямоугольную область по точкам класса YMaps.Point (любые негеографические координаты). Для географических координат нужно использовать класс YMap.GeoCollectionBounds. Думаю, что у тебя просто очепятка ;)
Да, такая возможность предусмотрена - класс YMaps.GeoCollectionBounds. Все точки необходимо добавить в экземпляр объекта этого класса с помощью метода add(), а потом передать указатель на этот объект в метод карты setBounds(). Пример: var geoBounds = new YMaps.GeoCollectionBounds(); geoBounds.add(new YMaps.GeoPoint(30.45,50.42)); geoBounds.add(new YMaps.GeoPoint(37.64, 55.76)); map.setBounds(geoBounds);
Можно проще в одну строку записать, кстати: map.setBounds(new YMaps.GeoBounds(new Maps.GeoPoint(37.653307,55.744216), new YMaps.GeoPoint(37.684721,55.758884))); ;)
так как ты написал - нельзя YMaps.GeoBounds требует явного задания границ, а по условию это неизвестно
Возникает проблема с масштабом, если мы добавляем таким способом только одну точку.  Кто-нибудь знает как решить проблему?
ну в этом случае нужно заранее выбрать масштаб и задавать его в таких случаях

map.setCenter(placemark.getGeoPoint(), выбранный масштаб)
Да, так тоже можно, спасибо! Но все-таки это не очень удобно, т.к. данные о метках я беру из базы и делать дополнительную проверку на количество меток как-то муторно.
Хотелось бы какое-то более простое решение )
это и есть простое
По понятным причинам, автоматически определить масштаб по одной точке АПИ не может. А следовательно ему нужно помочь. И помощью может стать только ваше знание о типе отображаемых объектов и предпочтительном для этого масштабе.

Есть конечно посложнее. Можно при выгрузке из базы данных задавать для ответа View/boundedBy, а на клиенте применять уже его. Так же можно задавать boundedBy для каждого объекта в отдельности.
ок, спасибо!