Kepler.gl использует систему фильтров как один из центральных механизмов интерактивного анализа данных. Фильтрация реализуется на уровне набора данных и может одновременно затрагивать несколько полей, что позволяет строить сложные многомерные условия отбора без предварительной агрегации данных.
Фильтры в Kepler.gl представляют собой массив объектов, каждый из которых описывает отдельное условие отбора. Базовая структура фильтра включает:
dataId)name)type)value,
domain)Каждый фильтр привязан к конкретному полю, но система допускает одновременное использование нескольких фильтров для одного и того же датасета, что и формирует основу многополевой фильтрации.
При добавлении нескольких фильтров к одному источнику данных применяется логика пересечения условий. Это означает, что результирующий набор включает только те записи, которые удовлетворяют всем активным фильтрам одновременно.
Пример структуры с несколькими фильтрами:
const filters = [
{
dataId: ['dataset_1'],
name: 'temperature',
type: 'range',
value: [10, 30],
enabled: true
},
{
dataId: ['dataset_1'],
name: 'humidity',
type: 'range',
value: [40, 80],
enabled: true
}
];
В данном случае каждая строка данных должна соответствовать обоим условиям одновременно.
При работе с многомерными данными часто требуется комбинировать фильтры по различным атрибутам: времени, числовым значениям и категориям.
Типичный сценарий включает:
Пример комбинирования:
const filters = [
{
dataId: ['trips'],
name: 'timestamp',
type: 'timeRange',
value: [1609459200000, 1640995200000],
enabled: true
},
{
dataId: ['trips'],
name: 'distance',
type: 'range',
value: [1000, 10000],
enabled: true
},
{
dataId: ['trips'],
name: 'vehicleType',
type: 'multiSelect',
value: ['car', 'bus'],
domain: ['car', 'bus', 'bike'],
enabled: true
}
];
Здесь формируется пересечение трёх разных измерений данных: времени, числового диапазона и категорий.
Используются для числовых значений. Определяют минимальную и максимальную границу включения.
Особенности:
Специализированный вариант диапазонного фильтра для временных меток.
Особенности:
Позволяют выбирать множество значений из дискретного набора.
Особенности:
Фильтрация в Kepler.gl строится на принципе логического AND между фильтрами одного слоя или датасета. Это означает, что:
При этом внутри одного фильтра типа multiSelect используется логика OR: запись проходит фильтр, если значение совпадает хотя бы с одним выбранным элементом.
Фильтры могут быть связаны с конкретными слоями визуализации. Один и тот же датасет может использоваться в разных слоях с разными условиями отбора.
Пример:
const config = {
datasets: {
trips: {
filters: [
{
name: 'speed',
type: 'range',
value: [20, 80]
}
]
}
},
layers: [
{
id: 'layer_fast',
dataId: 'trips',
filter: {
name: 'speed',
value: [50, 80]
}
},
{
id: 'layer_slow',
dataId: 'trips',
filter: {
name: 'speed',
value: [20, 50]
}
}
]
};
Такой подход позволяет визуально разделять данные на несколько категорий без дублирования источников.
Kepler.gl поддерживает сценарии, где фильтры применяются одновременно к разным наборам данных. В этом случае каждый датасет имеет собственный набор фильтров, но визуализация может объединять их на карте.
const config = {
datasets: {
cities: {
filters: [
{
name: 'population',
type: 'range',
value: [100000, 1000000]
}
]
},
routes: {
filters: [
{
name: 'traffic',
type: 'range',
value: [200, 1000]
}
]
}
}
};
Такая модель позволяет строить сложные многослойные карты, где каждый слой подчиняется собственной системе ограничений.
При увеличении числа активных фильтров возрастает стоимость пересчёта данных. Основные факторы влияния:
Оптимизация обычно достигается за счёт:
Внутри Kepler.gl обработка фильтров происходит в несколько этапов:
Каждый слой получает уже отфильтрованный набор, что снижает нагрузку на рендеринг WebGL.
Фильтры могут изменяться в реальном времени, например через UI или внешнее состояние приложения. В этом случае система пересчитывает только затронутые части данных, сохраняя остальные результаты кэшированными.
При изменении одного фильтра:
Фильтры являются частью глобального состояния конфигурации Kepler.gl. Это позволяет:
Формат конфигурации обычно включает массив фильтров, который может быть сохранён и повторно использован без потери логики отбора данных.