Клуб API Карт

Проблема масштабирования через setBounds

uenergy
8 июля 2015, 22:58

Добрый день!

Мне надо выводить город, город и улицу, город и улицу с домом. При этом масшабирование должно соответвовать области объекта. У меня возникает проблема с методом setBounds. Ниже приведен код примера, в котором при нажатии на кнопку появляется карта, но масштабируется с zoom 0, если убрать setBounds, то происходит масштаб с zoom 14 (отмечен при создании карты), но мне он не подходит для отображения города или города с большой улицей. Пожалуйста, подскажите, что делаю не так и как решить эту задачу?!

 

 

<!DOCTYPE html>
<html>
<head>
<script src="https://api-maps.yandex.ru/2.1/?lang=ru_RU"></script>
<script>
    ymaps.ready(init);
    function init(){
        var myMap;
        // Поиск координат центра
        ymaps.geocode('Краснодар, Адыгейская Набережная', {
            results: 1 //только один результат
        }).then(function (res) {
            myMap = new ymaps.Map("map", {
                center: res.geoObjects.get(0).geometry.getCoordinates(),
                zoom: 14
            });
           
            var firstGeoObject = res.geoObjects.get(0),    // Выбираем первый результат геокодирования
                coords = firstGeoObject.geometry.getCoordinates(),  // Координаты геообъекта
                bounds = firstGeoObject.properties.get('boundedBy'); // Область видимости геообъекта

            // Добавляем первый найденный геообъект на карту
            myMap.geoObjects.add(firstGeoObject);
            // Масштабируем карту на область видимости геообъекта
            myMap.setBounds(bounds, {
                checkZoomRange: true // проверка наличия тайлов на данном масштабе
            });
        });
    }
    function mapD(){
        document.getElementById("map").style.display='';
    }
</script>
</head>
<body>
<div>
    <div>Адыгейская Набережная, 71 <input class="sortbut" value="Показать на карте" onclick="mapD()" type="button"></div>
    <div id="map" style="width:100%;height:400px;margin:20px 0;display:none"></div>
</div>
</body></html>

 

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

Область видимости карты расчитывается исходя из размеров контейнера карты. В вашем случае размер карты в момент вызова setBounds равен нулю из-за CSS-свойства display:none и поэтому вы получаете нулевой масштаб

Спасибо! С этим разобрался. А можете подсказать, как сделать одно обращение к api с одной страницы или кэшировать запрос?

Лучше создать отдельный пост, и подробнее описать проблему.
Сейчас в текущем виде я не понимаю что именно и зачем кэшировать

Добрый день!

 

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

До какого предка он считает css? 

 

Сделал явно враппер для карты с размерами и 

display block
height 480px
width 780px