Контрол OverviewMap представляет собой встроенный компонент OpenLayers, предназначенный для отображения мини-карты, синхронизированной с основным представлением. Его основная функция — визуализация текущего экстента основного слоя на отдельной карте меньшего масштаба, что облегчает навигацию по пространственным данным и ориентацию в пределах большой территории.
OverviewMap является экземпляром класса
ol/control/OverviewMap и включается в систему управления
картой как обычный контрол. Он работает поверх отдельного экземпляра
карты, встроенного внутрь контроллера, и использует собственный набор
слоёв.
Ключевые особенности:
Внутренняя структура включает:
Создание OverviewMap выполняется через передачу параметров в конструктор:
import OverviewMap from 'ol/control/OverviewMap.js';
import TileLayer from 'ol/layer/Tile.js';
import OSM from 'ol/source/OSM.js';
const overviewMapControl = new OverviewMap({
layers: [
new TileLayer({
source: new OSM()
})
],
collapsed: false
});
Далее контрол добавляется к карте:
map.addControl(overviewMapControl);
Связь между основной картой и мини-картой реализуется через механизм
синхронизации view. Основной объект ol/View
передаёт изменения состояния:
Мини-карта автоматически обновляет прямоугольник текущего видимого региона.
При изменении масштаба основной карты OverviewMap пересчитывает геометрию bounding box, проецируя его в собственную систему координат.
Мини-карта может использовать отдельный набор слоёв, отличающийся от основной карты. Это особенно важно для производительности и читаемости.
Пример настройки:
const overviewMapControl = new OverviewMap({
layers: [
new TileLayer({
source: new OSM(),
visible: true
})
]
});
Допускается использование облегчённых слоёв:
OverviewMap поддерживает набор опций, управляющих пользовательским интерфейсом и состоянием:
collapsed — начальное состояние
(свёрнут/развёрнут);collapseLabel — текст или символ кнопки
сворачивания;label — текст кнопки разворачивания;tipLabel — всплывающая подсказка;rotateWithView — синхронизация вращения.Пример:
const overviewMapControl = new OverviewMap({
collapsed: true,
collapseLabel: '−',
label: '+',
tipLabel: 'Мини-карта',
rotateWithView: true
});
При включённой опции rotateWithView мини-карта
синхронизирует угол поворота с основной картой. Это влияет на
отображение экстента:
При отключении вращение игнорируется, и мини-карта остаётся ориентированной на север.
Отображаемый прямоугольник рассчитывается на основе текущего
view.getExtent(). Далее происходит трансформация
координат:
Этот процесс выполняется при каждом изменении состояния карты.
Мини-карта поддерживает интерактивное управление:
Механизм взаимодействия основан на обработке pointer-событий внутри отдельного view мини-карты.
При перемещении рамки выполняется обратное преобразование координат и установка нового центра основной карты.
Визуальная часть OverviewMap может быть изменена через CSS и настройки слоёв.
Основные элементы DOM:
ol-overviewmap;Пример стилизации:
.ol-overviewmap {
bottom: 10px;
left: 10px;
}
.ol-overviewmap .ol-overviewmap-box {
border: 2px solid rgba(255, 0, 0, 0.7);
}
Мини-карта может использовать другую систему координат, чем основная карта. В этом случае выполняется автоматическое преобразование:
Важно учитывать согласование источников данных, иначе возможны искажения экстента.
OverviewMap может влиять на производительность при использовании тяжёлых слоёв. Основные рекомендации:
При высокой частоте изменений масштаба полезно кэширование тайлов.
OverviewMap генерирует события через внутреннюю карту и контроллер:
Пример подписки:
overviewMapControl.on('change:collapsed', function () {
console.log('Состояние мини-карты изменилось');
});
Контрол связывается с основной картой через
map.addControl. После добавления он получает доступ к:
view;Обновления происходят автоматически при изменении состояния карты без необходимости ручного вмешательства.
При ресайзе окна мини-карта адаптирует своё отображение. Это включает:
При сильном изменении размера возможно кратковременное пересчитывание слоёв, особенно при использовании растровых источников.
OverviewMap часто используется совместно с:
При этом важно учитывать порядок отображения элементов интерфейса, так как мини-карта занимает фиксированную область в углу карты.
В сложных приложениях OverviewMap может использоваться как:
В таких сценариях часто применяется кастомная логика: