Типы фильтров

Фильтры в Kepler.gl представляют собой механизм интерактивной подвыборки данных, позволяющий динамически изменять отображаемые объекты на карте без изменения исходного набора данных. Архитектурно фильтры применяются на уровне слоя визуализации и работают с атрибутами датасета, формируя подмножество записей, участвующих в рендеринге.

Каждый фильтр в Kepler.gl описывается объектом конфигурации и включается в массив filters внутри состояния приложения. Базовая структура включает:

  • dataId — идентификатор источника данных
  • name — поле, по которому выполняется фильтрация
  • type — тип фильтра
  • value — текущее значение диапазона или выборки
  • domain — полный диапазон значений
  • enabled — состояние активности

Диапазонный фильтр (range filter)

Диапазонный фильтр применяется к числовым полям и позволяет ограничивать отображаемые данные по интервалу значений. Это один из наиболее часто используемых типов фильтрации при работе с геопространственными и временными числовыми признаками.

Основные характеристики:

  • работа с непрерывными числовыми значениями
  • поддержка минимального и максимального порогов
  • интерактивное изменение границ диапазона
  • возможность связывания с гистограммой распределения

Типичная конфигурация:

{
  dataId: 'dataset_1',
  name: 'speed',
  type: 'range',
  value: [10, 80],
  domain: [0, 120],
  step: 1,
  enabled: true
}

Диапазонный фильтр применяется в сценариях анализа интенсивности движения, плотности событий, финансовых показателей или любых количественных метрик, где требуется отсечь экстремальные значения или выделить интересующий интервал.

Внутренне Kepler.gl пересчитывает индекс выборки при каждом изменении диапазона, обновляя только затронутые слои, что позволяет сохранять интерактивность даже при больших объемах данных.


Временной фильтр (time range filter)

Временной фильтр предназначен для работы с временными рядами и датасетами, содержащими временные метки. Он позволяет ограничивать отображение данных по диапазону дат или времени.

Основные особенности:

  • поддержка временных шкал (timestamp)
  • возможность анимации по времени
  • дискретизация по шагам (час, день, месяц)
  • синхронизация нескольких слоев по одному временному диапазону

Пример конфигурации:

{
  dataId: 'dataset_1',
  name: 'timestamp',
  type: 'timeRange',
  value: [1622505600000, 1625097600000],
  domain: [1609459200000, 1654041600000],
  step: 86400000,
  animated: true,
  speed: 1,
  enabled: true
}

При включенной анимации фильтр автоматически изменяет текущий временной интервал, создавая эффект воспроизведения данных во времени. Это используется при анализе миграций, транспортных потоков, изменения погодных условий и других динамических процессов.


Категориальный фильтр (select filter)

Категориальный фильтр применяется к дискретным значениям и позволяет выбирать один или несколько элементов из фиксированного набора категорий.

Характерные особенности:

  • работа с строковыми или дискретными числовыми значениями
  • поддержка множественного выбора через список
  • высокая производительность при индексированных полях
  • удобен для классифицированных данных

Пример:

{
  dataId: 'dataset_1',
  name: 'vehicle_type',
  type: 'select',
  value: ['car', 'bus'],
  domain: ['car', 'bus', 'truck', 'motorcycle'],
  enabled: true
}

Этот тип фильтра часто применяется для сегментации объектов по типу, классу, статусу или категории. В транспортной аналитике он позволяет изолировать конкретные типы транспорта, а в бизнес-аналитике — выделять группы клиентов или типов транзакций.

Внутренний механизм Kepler.gl использует хеширование категорий для ускорения проверки принадлежности элемента выбранному набору.


Множественный категориальный фильтр (multi-select filter)

Множественный фильтр расширяет возможности категориального, позволяя работать с более сложными сценариями выбора и динамическим набором значений.

Основные отличия:

  • поддержка расширенного выбора категорий
  • более гибкая структура состояния
  • оптимизация под большие списки значений
  • возможность динамического обновления домена

Пример конфигурации:

{
  dataId: 'dataset_1',
  name: 'region',
  type: 'multiSelect',
  value: ['north', 'west', 'central'],
  domain: ['north', 'south', 'east', 'west', 'central'],
  enabled: true
}

Такой фильтр используется в случаях, когда количество категорий велико и требуется интерактивное управление выборкой без жесткой привязки к фиксированному подмножеству.


Комбинирование фильтров

Kepler.gl поддерживает одновременное применение нескольких фильтров к одному или нескольким слоям данных. При этом фильтрация выполняется последовательно, формируя пересечение условий.

Порядок обработки:

  1. Применение диапазонных ограничений
  2. Применение временных интервалов
  3. Применение категориальных фильтров
  4. Агрегация результата для визуализации

При пересечении фильтров итоговый набор данных уменьшается, что позволяет строить сложные аналитические сценарии, включая многомерную фильтрацию пространственно-временных данных.


Производительность фильтрации

Оптимизация фильтров в Kepler.gl основана на нескольких уровнях:

  • предварительное индексирование полей данных
  • мемоизация вычисленных диапазонов
  • использование WebGL для рендеринга отфильтрованных слоев
  • батчинг обновлений состояния при интерактивных изменениях

Особое значение имеет тип поля: числовые и временные поля обрабатываются через диапазонные структуры, тогда как категориальные — через структуры множеств.

При работе с большими датасетами ключевым фактором становится минимизация пересчета геометрии, поскольку фильтр влияет только на видимость, а не на исходную структуру данных.


Связь фильтров с состоянием приложения

Состояние фильтров интегрировано в глобальный store Kepler.gl. Изменение любого параметра приводит к обновлению слоя через цепочку селекторов, которая вычисляет:

  • активные фильтры
  • применимые датасеты
  • результирующий набор объектов
  • визуальные свойства слоя

Каждое изменение value триггерит перерасчет только затронутых зависимостей, что позволяет сохранять отзывчивость интерфейса даже при сложных конфигурациях фильтрации.


Поведение фильтров при масштабировании данных

При увеличении объема данных возрастает стоимость операций проверки условий фильтра. Для снижения нагрузки применяются следующие стратегии:

  • предфильтрация на уровне загрузки данных
  • использование бинарных представлений для временных меток
  • кэширование результатов фильтрации
  • инкрементальное обновление при изменении диапазона

Визуально это выражается в плавной адаптации карты без заметных задержек при перемещении ползунков или изменении выбора категорий.


Взаимодействие фильтров с визуальными слоями

Фильтры не существуют изолированно и напрямую связаны с слоями визуализации. Каждый слой определяет, какие фильтры на него влияют через dataId и набор полей.

При этом один фильтр может воздействовать на несколько слоев, если они используют общий источник данных. Это создает возможность синхронной фильтрации разных типов визуализации — точек, линий, полигонов — в рамках единого интерфейса.


Расширенные сценарии использования

В сложных аналитических приложениях фильтры комбинируются с агрегацией и кластеризацией данных. Это позволяет:

  • выделять временные паттерны в потоках событий
  • анализировать плотность объектов в заданных диапазонах
  • сегментировать данные по категориям и времени одновременно
  • строить интерактивные дашборды с многослойной фильтрацией

Каждый фильтр становится частью вычислительного конвейера, формирующего итоговое визуальное представление данных на карте.