Клуб API Карт

Активная область карты, или карта со сдвинутым центром

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

Добрый день. Есть задача вывести карту с фильтром, под зоной фильтра не выводяться маркеры, потому сам центер карты сдвинут.

 

Изначально задачу решил через сдвиг центра функцией

function setCenter(settings) {

                if( settings.margin && (settings.margin[0] > 0 || settings.margin[3] > 0) ) {

                    var oldPixelCenter = settings.map.getGlobalPixelCenter();

 

                    settings.map.setGlobalPixelCenter([

                        oldPixelCenter[0] - (settings.margin[3] - settings.margin[1]) / 2,

                        oldPixelCenter[1] - settings.margin[0] / 2

                    ]);

                }

            }

 

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

В модуле route есть опция zoomMargin, позволяющая произвести размещени маршрута учитывая сдвиг карты. В недрях опций карты я не нашел подобного параметра, но в нем есть опция mapContainerMargin, но задав эту опцию особо ничего не изменилось 

map.options.set('mapContainerMargin', [0,0,300,0])

 

Благодарен за помощь.

4 комментария

Посмотрите в документации метод setBounds у карты

Он тоже принимает маргин

Его я использую когда нужно в область карты разместить какой то объект целеком. К примеру Город или улицу. Но на зумирование он в дальнейшем не влияет :(. 

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

 

Просто странно что методы уже есть, но в целом для карты они не добавленны. Еще есть интересный метод getCenterAndZoom

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

Ну в примере и используеться settings.map.setGlobalPixelCenter, но в дальнейшем зум производиться не по отношению установленного центра, а по отношению центра контейнера всей карты