mapState — один из центральных разделов внутреннего
состояния Kepler.gl, отвечающий за параметры отображения карты. В этом
объекте хранится информация о текущем положении камеры, масштабе, угле
поворота, наклоне, стиле базовой карты и множестве других параметров,
определяющих визуальное представление геоданных.
С точки зрения архитектуры Kepler.gl, mapState
представляет собой часть Redux-хранилища, которая описывает текущее
состояние карты независимо от наборов данных, слоёв или фильтров.
Упрощённо структура выглядит следующим образом:
{
mapState: {
latitude: 37.7749,
longitude: -122.4194,
zoom: 10,
bearing: 0,
pitch: 0
}
}
Каждое изменение положения карты приводит к обновлению соответствующих полей внутри этого объекта.
Объект mapState решает несколько задач:
Без mapState невозможно корректно воспроизвести текущее
состояние визуализации.
Типичная структура выглядит следующим образом:
{
mapState: {
bearing: 0,
dragRotate: false,
isSplit: false,
latitude: 37.7749,
longitude: -122.4194,
pitch: 0,
zoom: 9,
maxZoom: 20,
minZoom: 0,
transitionDuration: 0
}
}
В зависимости от версии библиотеки могут присутствовать дополнительные параметры.
Основу состояния карты составляют два поля:
latitude
longitude
Пример:
{
latitude: 55.7558,
longitude: 37.6176
}
В данном случае центр карты расположен над Москвой.
При перемещении карты мышью или через программный интерфейс эти значения автоматически обновляются.
Параметр zoom определяет масштаб отображения.
Пример:
{
zoom: 3
}
Такой уровень подходит для отображения континентов.
Большие значения позволяют приблизиться к отдельным объектам:
{
zoom: 15
}
На этом масштабе уже видны улицы и отдельные здания.
Типичный диапазон:
0–20
При этом допустимые границы определяются параметрами:
minZoom
maxZoom
Например:
{
minZoom: 2,
maxZoom: 18
}
bearing отвечает за вращение карты вокруг вертикальной
оси.
Пример:
{
bearing: 0
}
Север находится сверху.
Поворот на 90 градусов:
{
bearing: 90
}
Поворот на 180 градусов:
{
bearing: 180
}
Поворот особенно полезен при анализе транспортных маршрутов и трёхмерных сцен.
Параметр pitch определяет угол наклона камеры.
Без наклона:
{
pitch: 0
}
Трёхмерный вид:
{
pitch: 45
}
Более выраженная перспектива:
{
pitch: 60
}
Высокие значения активно используются при работе с:
Для предотвращения слишком сильного приближения используются поля:
{
minZoom: 1,
maxZoom: 16
}
Если пользователь попытается выйти за пределы диапазона, карта остановится на допустимом значении.
Это особенно важно для корпоративных панелей мониторинга, где необходимо ограничить область исследования.
Поле:
dragRotate
определяет возможность вращения карты мышью.
Разрешено:
{
dragRotate: true
}
Запрещено:
{
dragRotate: false
}
Отключение вращения часто используется для классических двумерных карт.
Параметр:
isSplit
указывает, используется ли режим сравнения карт.
Пример:
{
isSplit: true
}
В этом режиме отображаются две синхронизированные карты.
Такая функциональность применяется для:
Kepler.gl поддерживает плавное перемещение между позициями карты.
Для этого используются параметры:
{
transitionDuration: 1000
}
Значение задаётся в миллисекундах.
Одна секунда:
1000
Две секунды:
2000
Плавные переходы особенно полезны при создании интерактивных историй и презентаций.
Изменение состояния возможно через Redux-действия.
Пример обновления центра карты:
dispatch({
type: 'UPDATE_MAP',
payload: {
latitude: 48.8566,
longitude: 2.3522,
zoom: 11
}
});
После выполнения действия карта переместится к Парижу.
Поскольку mapState находится в Redux-хранилище, любые
React-компоненты могут получать актуальное состояние карты.
Пример:
const mapState = useSelector(
state => state.keplerGl.map.mapState
);
Получение координат:
const {
latitude,
longitude,
zoom
} = mapState;
Далее данные могут использоваться для:
После загрузки набора данных Kepler.gl способен самостоятельно вычислить подходящую область отображения.
В результате обновляются:
{
latitude,
longitude,
zoom
}
Центр и масштаб подбираются таким образом, чтобы все объекты оказались в зоне видимости.
Подобное поведение реализуется через вычисление границ данных.
При экспорте конфигурации состояние карты сохраняется внутри раздела:
config.mapState
Пример:
{
config: {
mapState: {
latitude: 40.7128,
longitude: -74.0060,
zoom: 10,
bearing: 0,
pitch: 0
}
}
}
После повторной загрузки проекта карта откроется в том же положении.
Это обеспечивает воспроизводимость визуализаций.
При сериализации состояния приложения объект карты обычно сохраняется вместе с другими разделами:
{
visState,
mapState,
mapStyle,
uiState
}
Такой подход позволяет полностью восстановить пользовательскую рабочую среду.
Важно различать два независимых объекта.
Отвечает за положение камеры:
{
latitude,
longitude,
zoom,
pitch,
bearing
}
Отвечает за внешний вид карты:
{
styleType: 'dark'
}
Изменение стиля не влияет на координаты карты.
Изменение координат не влияет на выбранный стиль.
Во многих проектах состояние карты используется как источник пространственного контекста.
Пример получения текущих координат:
const {
latitude,
longitude,
zoom
} = mapState;
Затем могут выполняться запросы:
fetch(
`/api/objects?lat=${latitude}&lng=${longitude}`
);
Таким образом загружаются данные только для текущей области просмотра.
Это значительно снижает объём передаваемой информации.
При отображении телеметрии, GPS-треков и потоковых данных
mapState позволяет автоматически следовать за объектом.
Пример обновления координат:
dispatch({
type: 'UPDATE_MAP',
payload: {
latitude: vehicle.lat,
longitude: vehicle.lng
}
});
Карта будет перемещаться вслед за транспортным средством.
Подобный подход применяется в системах:
Широта должна находиться в диапазоне:
-90 ... 90
Долгота:
-180 ... 180
Некорректные значения приводят к ошибочному позиционированию карты.
Например:
{
zoom: 50
}
Подобное значение превышает возможности большинства картографических движков.
{
zoom: -10
}
Следует использовать ограничения через:
minZoom
{
pitch: 89
}
Слишком большой угол может ухудшить восприятие данных и производительность визуализации.
const mapState = {
latitude: 51.5074,
longitude: -0.1278,
zoom: 12,
bearing: 25,
pitch: 45,
minZoom: 1,
maxZoom: 20,
dragRotate: true,
isSplit: false,
transitionDuration: 1000
};
Данная конфигурация создаёт трёхмерный вид Лондона с умеренным наклоном камеры, разрешённым вращением карты и плавной анимацией переходов.
Среди всех разделов состояния приложения именно mapState
формирует географический контекст визуализации. Слои определяют, какие
данные отображаются, фильтры задают условия отбора объектов, стили
управляют внешним видом карты, а mapState отвечает за то,
какую область мира видит пользователь в конкретный момент времени.
Благодаря централизованному хранению параметров камеры обеспечивается
синхронизация интерфейса, воспроизводимость проектов, поддержка
анимаций, интеграция с Redux и возможность полного программного контроля
над навигацией по карте.