Контрол масштабирования

Контрол масштабирования (Zoom Control) — стандартный элемент интерфейса Google Maps JavaScript API, предназначенный для изменения уровня приближения карты. Обычно он отображается в виде двух кнопок:

  • «+» — увеличение масштаба;
  • «−» — уменьшение масштаба.

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

Контрол масштабирования относится к встроенным элементам управления карты и может настраиваться через параметры объекта Map.


Принцип работы масштабирования

Каждая карта Google Maps использует числовое значение масштаба (zoom).

Пример:

Значение zoom Уровень детализации
1 Почти весь мир
5 Страна или крупный регион
10 Город
15 Район города
18 Улицы и здания
21+ Максимальная детализация

При нажатии на кнопку увеличения карта увеличивает значение zoom, а при уменьшении — снижает его.

Например:

const map = new google.maps.Map(
    document.getElementById("map"),
    {
        center: { lat: 55.7558, lng: 37.6176 },
        zoom: 10
    }
);

Начальный масштаб установлен на уровне 10.


Отображение контрола масштабирования по умолчанию

В большинстве случаев Zoom Control отображается автоматически.

const map = new google.maps.Map(
    document.getElementById("map"),
    {
        center: {
            lat: 55.7558,
            lng: 37.6176
        },
        zoom: 12
    }
);

В данном примере никаких дополнительных настроек не требуется.

После создания карты справа внизу или справа на карте появятся кнопки управления масштабом.

Фактическое расположение зависит от версии интерфейса Google Maps и используемой конфигурации карты.


Включение контрола масштабирования

Если ранее контрол был отключён или требуется явно указать его отображение, используется параметр zoomControl.

const map = new google.maps.Map(
    document.getElementById("map"),
    {
        center: {
            lat: 59.9386,
            lng: 30.3141
        },
        zoom: 13,
        zoomControl: true
    }
);

Значение:

zoomControl: true

указывает браузеру отображать встроенный контрол масштабирования.


Отключение контрола масштабирования

Для полного скрытия элемента управления используется значение false.

const map = new google.maps.Map(
    document.getElementById("map"),
    {
        center: {
            lat: 56.8389,
            lng: 60.6057
        },
        zoom: 14,
        zoomControl: false
    }
);

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

При этом возможность изменения масштаба программно сохраняется.

Например:

map.setZoom(16);

Совместное использование с другими контролами

Контрол масштабирования может работать вместе с другими встроенными элементами интерфейса:

  • Fullscreen Control;
  • Street View Control;
  • Map Type Control;
  • Rotate Control;
  • Scale Control.

Пример:

const map = new google.maps.Map(
    document.getElementById("map"),
    {
        center: {
            lat: 55.751244,
            lng: 37.618423
        },
        zoom: 12,

        zoomControl: true,
        fullscreenControl: true,
        mapTypeControl: true,
        streetViewControl: true
    }
);

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


Управление масштабом через код

Zoom Control является лишь интерфейсом для изменения свойства zoom.

То же самое можно делать программно.

Увеличение масштаба

map.setZoom(
    map.getZoom() + 1
);

Уменьшение масштаба

map.setZoom(
    map.getZoom() - 1
);

Установка фиксированного значения

map.setZoom(18);

Таким образом встроенный контрол и методы API используют один и тот же механизм изменения масштаба.


Получение текущего масштаба

Для получения текущего значения применяется метод getZoom().

const zoom = map.getZoom();

console.log(zoom);

Возможный результат:

14

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


Отслеживание изменения масштаба

Google Maps предоставляет событие zoom_changed.

Оно срабатывает каждый раз при изменении масштаба:

  • через Zoom Control;
  • колесом мыши;
  • жестами;
  • вызовом setZoom().

Пример:

map.addListener(
    "zoom_changed",
    () => {
        console.log(
            "Текущий масштаб:",
            map.getZoom()
        );
    }
);

При каждом изменении масштаба новое значение будет выводиться в консоль.


Ограничение минимального масштаба

Для предотвращения слишком сильного отдаления используется параметр minZoom.

const map = new google.maps.Map(
    document.getElementById("map"),
    {
        center: {
            lat: 55.7558,
            lng: 37.6176
        },
        zoom: 10,
        minZoom: 8
    }
);

После достижения значения 8 дальнейшее уменьшение масштаба станет невозможным.

Даже нажатия на кнопку «−» не приведут к изменению уровня приближения.


Ограничение максимального масштаба

Для запрета чрезмерного увеличения используется параметр maxZoom.

const map = new google.maps.Map(
    document.getElementById("map"),
    {
        center: {
            lat: 55.7558,
            lng: 37.6176
        },
        zoom: 15,
        maxZoom: 18
    }
);

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


Одновременное использование minZoom и maxZoom

На практике часто задают диапазон допустимых значений.

const map = new google.maps.Map(
    document.getElementById("map"),
    {
        center: {
            lat: 55.7558,
            lng: 37.6176
        },
        zoom: 12,

        minZoom: 9,
        maxZoom: 17
    }
);

Разрешённые уровни масштабирования будут находиться в диапазоне:

9 – 17

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


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

Иногда стандартный Zoom Control не соответствует требованиям дизайна. В этом случае создаются собственные элементы интерфейса.

HTML:

<button id="zoomIn">
    Увеличить
</button>

<button id="zoomOut">
    Уменьшить
</button>

Jav * aScript:

document
    .getElementById("zoomIn")
    .addEventListener(
        "click",
        () => {
            map.setZoom(
                map.getZoom() + 1
            );
        }
    );

document
    .getElementById("zoomOut")
    .addEventListener(
        "click",
        () => {
            map.setZoom(
                map.getZoom() - 1
            );
        }
    );

В такой реализации встроенный Zoom Control обычно отключают:

zoomControl: false

Плавное изменение масштаба

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

function zoomToCity() {
    let zoom = map.getZoom();

    const interval = setInterval(() => {

        zoom++;

        map.setZoom(zoom);

        if (zoom >= 16) {
            clearInterval(interval);
        }

    }, 300);
}

Функция будет постепенно увеличивать масштаб до уровня 16.


Использование масштаба для изменения отображаемых объектов

Часто масштаб влияет на содержимое карты.

Пример отображения маркеров только при достаточном приближении:

map.addListener(
    "zoom_changed",
    () => {

        const zoom = map.getZoom();

        if (zoom >= 14) {
            marker.setMap(map);
        } else {
            marker.setMap(null);
        }

    }
);

Такой подход позволяет уменьшить визуальную перегруженность карты.


Реакция интерфейса на масштаб

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

map.addListener(
    "zoom_changed",
    () => {

        const zoom = map.getZoom();

        if (zoom > 15) {
            infoPanel.style.display = "block";
        } else {
            infoPanel.style.display = "none";
        }

    }
);

При сильном приближении может отображаться дополнительная информация, статистика или элементы навигации.


Отключение всех контролов карты

Иногда необходимо полностью убрать встроенный интерфейс.

const map = new google.maps.Map(
    document.getElementById("map"),
    {
        center: {
            lat: 55.7558,
            lng: 37.6176
        },
        zoom: 12,

        disableDefaultUI: true
    }
);

В этом случае исчезнет не только Zoom Control, но и остальные встроенные элементы управления.


Повторное включение Zoom Control при отключённом интерфейсе

Даже после отключения всех контролов можно вернуть только масштабирование.

const map = new google.maps.Map(
    document.getElementById("map"),
    {
        center: {
            lat: 55.7558,
            lng: 37.6176
        },
        zoom: 12,

        disableDefaultUI: true,
        zoomControl: true
    }
);

В результате на карте останется только контрол масштабирования.


Практические сценарии использования

Карты недвижимости

  • масштаб 10–12 — районы города;
  • масштаб 14–16 — отдельные кварталы;
  • масштаб 17–20 — конкретные здания.

Логистические системы

  • обзор регионов на небольших значениях масштаба;
  • детализация маршрутов при приближении.

Туристические сервисы

  • отображение достопримечательностей только после увеличения карты;
  • автоматическое появление информационных окон на определённых уровнях масштабирования.

Геоинформационные системы

  • переключение слоёв данных в зависимости от масштаба;
  • отображение различных наборов объектов на разных уровнях детализации.

Системы мониторинга транспорта

  • группировка большого количества маркеров на малом масштабе;
  • отображение отдельных транспортных средств при увеличении карты.

Рекомендации по использованию

  • Не отключать Zoom Control без необходимости.
  • Ограничивать диапазон масштабов через minZoom и maxZoom.
  • Использовать событие zoom_changed для динамического обновления интерфейса.
  • Применять собственные кнопки масштабирования только при наличии требований к уникальному дизайну.
  • Избегать чрезмерно узких диапазонов масштабирования, ухудшающих навигацию по карте.
  • Согласовывать доступные уровни масштаба с объёмом и детализацией отображаемых геоданных.
  • Использовать программное управление масштабом совместно со встроенным контролом для создания более удобного пользовательского интерфейса.