Фильтры в Kepler.gl представляют собой механизм интерактивной подвыборки данных, позволяющий динамически изменять отображаемые объекты на карте без изменения исходного набора данных. Архитектурно фильтры применяются на уровне слоя визуализации и работают с атрибутами датасета, формируя подмножество записей, участвующих в рендеринге.
Каждый фильтр в Kepler.gl описывается объектом конфигурации и
включается в массив filters внутри состояния приложения.
Базовая структура включает:
dataId — идентификатор источника данныхname — поле, по которому выполняется фильтрацияtype — тип фильтраvalue — текущее значение диапазона или выборкиdomain — полный диапазон значенийenabled — состояние активностиДиапазонный фильтр применяется к числовым полям и позволяет ограничивать отображаемые данные по интервалу значений. Это один из наиболее часто используемых типов фильтрации при работе с геопространственными и временными числовыми признаками.
Основные характеристики:
Типичная конфигурация:
{
dataId: 'dataset_1',
name: 'speed',
type: 'range',
value: [10, 80],
domain: [0, 120],
step: 1,
enabled: true
}
Диапазонный фильтр применяется в сценариях анализа интенсивности движения, плотности событий, финансовых показателей или любых количественных метрик, где требуется отсечь экстремальные значения или выделить интересующий интервал.
Внутренне Kepler.gl пересчитывает индекс выборки при каждом изменении диапазона, обновляя только затронутые слои, что позволяет сохранять интерактивность даже при больших объемах данных.
Временной фильтр предназначен для работы с временными рядами и датасетами, содержащими временные метки. Он позволяет ограничивать отображение данных по диапазону дат или времени.
Основные особенности:
Пример конфигурации:
{
dataId: 'dataset_1',
name: 'timestamp',
type: 'timeRange',
value: [1622505600000, 1625097600000],
domain: [1609459200000, 1654041600000],
step: 86400000,
animated: true,
speed: 1,
enabled: true
}
При включенной анимации фильтр автоматически изменяет текущий временной интервал, создавая эффект воспроизведения данных во времени. Это используется при анализе миграций, транспортных потоков, изменения погодных условий и других динамических процессов.
Категориальный фильтр применяется к дискретным значениям и позволяет выбирать один или несколько элементов из фиксированного набора категорий.
Характерные особенности:
Пример:
{
dataId: 'dataset_1',
name: 'vehicle_type',
type: 'select',
value: ['car', 'bus'],
domain: ['car', 'bus', 'truck', 'motorcycle'],
enabled: true
}
Этот тип фильтра часто применяется для сегментации объектов по типу, классу, статусу или категории. В транспортной аналитике он позволяет изолировать конкретные типы транспорта, а в бизнес-аналитике — выделять группы клиентов или типов транзакций.
Внутренний механизм Kepler.gl использует хеширование категорий для ускорения проверки принадлежности элемента выбранному набору.
Множественный фильтр расширяет возможности категориального, позволяя работать с более сложными сценариями выбора и динамическим набором значений.
Основные отличия:
Пример конфигурации:
{
dataId: 'dataset_1',
name: 'region',
type: 'multiSelect',
value: ['north', 'west', 'central'],
domain: ['north', 'south', 'east', 'west', 'central'],
enabled: true
}
Такой фильтр используется в случаях, когда количество категорий велико и требуется интерактивное управление выборкой без жесткой привязки к фиксированному подмножеству.
Kepler.gl поддерживает одновременное применение нескольких фильтров к одному или нескольким слоям данных. При этом фильтрация выполняется последовательно, формируя пересечение условий.
Порядок обработки:
При пересечении фильтров итоговый набор данных уменьшается, что позволяет строить сложные аналитические сценарии, включая многомерную фильтрацию пространственно-временных данных.
Оптимизация фильтров в Kepler.gl основана на нескольких уровнях:
Особое значение имеет тип поля: числовые и временные поля обрабатываются через диапазонные структуры, тогда как категориальные — через структуры множеств.
При работе с большими датасетами ключевым фактором становится минимизация пересчета геометрии, поскольку фильтр влияет только на видимость, а не на исходную структуру данных.
Состояние фильтров интегрировано в глобальный store Kepler.gl. Изменение любого параметра приводит к обновлению слоя через цепочку селекторов, которая вычисляет:
Каждое изменение value триггерит перерасчет только
затронутых зависимостей, что позволяет сохранять отзывчивость интерфейса
даже при сложных конфигурациях фильтрации.
При увеличении объема данных возрастает стоимость операций проверки условий фильтра. Для снижения нагрузки применяются следующие стратегии:
Визуально это выражается в плавной адаптации карты без заметных задержек при перемещении ползунков или изменении выбора категорий.
Фильтры не существуют изолированно и напрямую связаны с слоями
визуализации. Каждый слой определяет, какие фильтры на него влияют через
dataId и набор полей.
При этом один фильтр может воздействовать на несколько слоев, если они используют общий источник данных. Это создает возможность синхронной фильтрации разных типов визуализации — точек, линий, полигонов — в рамках единого интерфейса.
В сложных аналитических приложениях фильтры комбинируются с агрегацией и кластеризацией данных. Это позволяет:
Каждый фильтр становится частью вычислительного конвейера, формирующего итоговое визуальное представление данных на карте.