Визуализация временных данных в Kepler.gl опирается на механизм анимации, который синхронизирует отображение слоёв с временной шкалой. Скорость воспроизведения становится ключевым параметром при работе с потоками координат, маршрутами и временными событиями, так как она определяет плотность восприятия данных и характер их интерпретации.
Анимация в Kepler.gl строится вокруг концепции time-based state. Каждый кадр соответствует определённому моменту времени, а визуализация пересчитывается на основе текущего положения временного курсора.
Основные компоненты:
Скорость воспроизведения фактически определяет, насколько быстро
currentTime смещается относительно реального времени.
Внутри конфигурации состояния часто используется параметр, отвечающий за ускорение временного потока:
const animationConfig = {
currentTime: 1609459200000,
speed: 1,
timeFormat: 'milliseconds'
};
speed интерпретируется как коэффициент:
1 — нормальная скорость (реальное время)0.5 — замедленное воспроизведение2 — ускорение в 2 разаИзменение этого параметра напрямую влияет на шаг обновления временной оси.
При включённой анимации Kepler.gl использует цикл обновления, в котором:
currentTimeФормально:
t_{effective} = t_{real} speed
Где:
Δt_real — реальный интервал между кадрамиspeed — коэффициент воспроизведенияПри работе с фильтрами типа time range slider скорость влияет не только на анимацию, но и на плотность выборки данных.
Если временной фильтр задан как окно [t1, t2], то при
увеличении скорости:
При уменьшении скорости наблюдается обратный эффект — визуализация становится более «разреженной» и аналитически точной.
Некоторые слои в Kepler.gl чувствительны к временной шкале:
Для таких слоёв скорость влияет не только на частоту обновления, но и на визуальную интерполяцию траекторий.
При значениях speed > 1 система вынуждена упрощать вычисление промежуточных точек. Это приводит к:
Внутренне это связано с ограничением FPS и пропуском временных шагов.
Kepler.gl хранит состояние приложения в Redux-структуре, где анимация
является частью visState.
Пример обновления скорости:
dispatch(
updateVisData({
animationConfig: {
...animationConfig,
speed: 1.5
}
})
);
Любое изменение приводит к пересозданию временного цикла и пересчёту зависимых слоёв.
При значениях speed близких к нулю возникают особенности:
Если скорость стремится к нулю, анимация фактически превращается в пошаговую навигацию по временной шкале.
Фактическая плавность зависит не только от speed, но и
от частоты кадров:
Таким образом, визуальная скорость является функцией двух переменных:
v_{visual} = speed FPS_{normalized}
При наличии нескольких временных слоёв важно, что скорость применяется глобально:
currentTimeЭто означает, что изменение скорости всегда влияет на всю сцену визуализации.
С точки зрения анализа данных коэффициент speed можно рассматривать как:
При больших датасетах ускорение используется для обзора общей динамики, при малых — замедление позволяет выявлять локальные закономерности.