В Kepler.gl управление углом обзора и перспективой опирается на состояние камеры (viewport state), которое задаёт то, как пользователь воспринимает карту в трёхмерном пространстве. Несмотря на то что базовая карта выглядит двумерной, фактически она работает в модели с перспективной проекцией, где ключевыми параметрами выступают latitude, longitude, zoom, pitch и bearing.
Эти параметры формируют единое состояние mapState,
которое синхронизирует визуализацию между слоями, взаимодействиями
пользователя и программным управлением.
Координаты центра карты определяют точку фокусировки сцены.
Эти значения не влияют напрямую на перспективу, но определяют, какая часть мира попадает в поле зрения камеры. При изменении угла обзора именно центральная точка становится осью вращения и наклона.
Параметр zoom управляет масштабом сцены и косвенно влияет на ощущение глубины.
В контексте 3D-слоёв zoom также влияет на визуальное “сжатие” высотных данных: при увеличении масштаба extruded-объекты начинают восприниматься более рельефно.
Параметр pitch задаёт угол наклона камеры относительно поверхности карты.
pitch = 0 → строго ортографический вид сверхуpitch > 0 → камера наклоняется, появляется
перспективаВ Kepler.gl pitch напрямую влияет на то, как отображаются:
При увеличении pitch усиливается эффект глубины за счёт перспективного искажения: дальние объекты визуально уменьшаются, ближние — увеличиваются.
bearing отвечает за поворот карты вокруг вертикальной оси.
bearing = 0 → север направлен вверхВ отличие от pitch, bearing не изменяет перспективу напрямую, но радикально влияет на восприятие направления потоков данных (например, транспортных маршрутов или миграций).
Комбинация pitch + bearing позволяет переходить от стандартной картографической ориентации к сценической визуализации, где карта воспринимается как 3D-сцена.
Перспектива в Kepler.gl формируется не одним параметром, а их комбинацией:
При увеличении zoom эффект перспективы усиливается, особенно при ненулевом pitch. Это связано с тем, что визуальное расстояние между объектами растягивается, а высотные данные становятся более различимыми.
В Kepler.gl состояние камеры хранится в структуре
mapState, которая может быть изменена программно через
Redux actions или через конфигурацию initial state.
Пример базовой структуры:
const mapState = {
latitude: 55.751244,
longitude: 37.618423,
zoom: 10,
pitch: 45,
bearing: 0
};
Каждое изменение этого объекта приводит к перерасчёту камеры и перерисовке всех слоёв.
Изменение pitch и bearing может быть анимированным, что позволяет создавать плавные переходы между режимами визуализации.
function tiltMap(state) {
return {
...state,
mapState: {
...state.mapState,
pitch: 60
}
};
}
function rotateMap(state, angle) {
return {
...state,
mapState: {
...state.mapState,
bearing: state.mapState.bearing + angle
}
};
}
Такие операции часто используются для создания эффектов “облёта” данных или автоматической презентации слоёв.
Перспектива в Kepler.gl имеет ряд технических ограничений:
Также важно учитывать, что визуальная перспектива зависит от типа слоя. Например:
В основе Kepler.gl лежит deck.gl, где камера реализуется через перспективную проекцию WebGL.
Параметры pitch и bearing трансформируются в матрицы:
Таким образом, изменение одного параметра mapState приводит к пересчёту всей цепочки матриц, влияющих на финальный рендер сцены.
Kepler.gl автоматически связывает UI-события с изменением mapState:
Эта модель позволяет пользователю переходить от 2D-навигации к 3D-навигации без переключения режимов.
Угол обзора в Kepler.gl используется не только для навигации, но и для анализа данных:
Комбинация этих параметров превращает карту в инструмент пространственного анализа, где геометрия сцены становится частью интерпретации данных.