Клуб API Карт

К скрытой карте не применяются границы

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

Есть карта, которая показывается при нажатии на кнопку

Возникла задача при загрузке маркеров на карту нужно подстраивать видимую область.

<!DOCTYPE html>
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>Примеры. Размещение карты на странице.</title>
    <!--
        Подключаем API карт
        Параметры:
          - load=package.standard - основные компоненты;
     - lang=ru-RU - язык русский.
    -->
    <script src="http://api-maps.yandex.ru/2.0/?load=package.standard&lang=ru-RU" type="text/javascript"></script>
<script type="text/javascript">
var myMap;
ymaps.ready(init);
function getRandomCoordinates (maxLatitude, minLatitude, maxLongitude, minLongitude) {
                return [Math.random() * (maxLatitude - minLatitude) + minLatitude, Math.random() * (maxLongitude - minLongitude) + minLongitude];
}
function init () {
    var map = new ymaps.Map('map', {
        center:[55.76, 37.64], // Москва
        zoom:10
    });
    for (var i = 0; i <= 10; i++) {
        // генерация для примера, в реальности координаты берутся из базы
        var point = getRandomCoordinates(60, 55, 37, 30),
            myPlacemark = new ymaps.Placemark(point, {
                iconContent: i + 1
            });
        map.geoObjects.add(myPlacemark);
    }
    //умещаем все маркеры в видимую область
    map.setBounds(map.geoObjects.getBounds(), {checkZoomRange: true});
    document.getElementById('mapButton').onclick = function() {
        //карта скрыта, показать ее
        document.getElementById('map').style.display = "block";
    }
}
</script>
</head>
<body>
    <div id="map" style="width:400px; height:300px;display:none;"></div>
    <input type="button" id="mapButton" value="Показать карту"/>
</body>
</html>

На видимой карте все работает, однако если карта изначально скрыта, то границы не выставляются.

5 комментариев
Владислав Турман
28 января 2016, 02:36

Насколько я помню, после того, как арта показывается, ее надо перерисовать: myMap.container.fitToViewport();

 

По поводу видимой области, попробуйте положить все точки в коллекцию и взять боундс у коллекции, а не у всех геообъектов карты.

Владислав Турман,
с 2.0.24 карта перерисовывается автоматически.
just-boris, спасибо за сообщение. Будем исправлять.

Пока что могу посоветовать выполнять map.setBounds после показа карты (нажатия на кнопку).

А не подскажите случаем по моему вопросу

Правильным решением тут будет  применить нужный bounds при видимой карте, а потом просто жестко задавать известный центр и зум при создании карты.

У невидимой карты нет размеров, и АПИ не может узнать какой же зум требуется для отображения маркеров.

small_butterfly_long_long_as_long_as_i_can_do_it_here
28 января 2016, 02:36
Я нашел другое решение: вместо реального скрытия увести карту влево за видимую область. В моей ситуации это оказалось проще, чем подписываться на показ карты