Фильтрация и трансформация

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

Фильтрация применяется для ограничения отображаемых объектов по определённым критериям:

  • временным диапазонам;
  • числовым значениям;
  • категориям;
  • текстовым параметрам;
  • пространственным условиям.

Трансформация позволяет изменять способ отображения данных:

  • группировать объекты;
  • агрегировать показатели;
  • изменять структуру слоёв;
  • создавать новые визуальные представления на основе существующих данных.

Архитектура фильтров в Kepler.gl

Фильтры являются частью состояния приложения и хранятся внутри конфигурации карты.

Упрощённая структура фильтра выглядит следующим образом:

{
  id: "temperature_filter",
  dataId: "weather_data",
  name: "temperature",
  type: "range",
  value: [10, 30]
}

Основные параметры:

Свойство Назначение
id Уникальный идентификатор фильтра
dataId Набор данных, к которому применяется фильтр
name Имя поля
type Тип фильтра
value Текущее значение фильтра

При изменении значения фильтра Kepler.gl автоматически пересчитывает видимые объекты на карте.


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

Range Filter

Используется для числовых значений.

Пример данных:

[
  {
    city: "Almaty",
    population: 2000000
  },
  {
    city: "Karaganda",
    population: 500000
  }
]

Фильтр позволяет отображать только записи, удовлетворяющие диапазону:

population >= 1000000

После применения фильтра на карте останется только Алматы.

Подходит для:

  • температуры;
  • высоты;
  • численности населения;
  • скорости движения;
  • стоимости объектов.

Time Range Filter

Предназначен для работы с датами и временем.

Исходные данные:

[
  {
    timestamp: "2024-01-01T10:00:00"
  },
  {
    timestamp: "2024-03-01T15:30:00"
  }
]

Пользователь выбирает временной диапазон через временную шкалу.

Kepler.gl автоматически:

  • преобразует строки в даты;
  • вычисляет диапазон;
  • обновляет отображение объектов.

Такой фильтр широко применяется для:

  • GPS-треков;
  • логистики;
  • телеметрии;
  • данных IoT;
  • мониторинга транспорта.

Multi Sel ect Filter

Позволяет выбирать несколько категорий одновременно.

Пример:

[
  {
    type: "restaurant"
  },
  {
    type: "hotel"
  },
  {
    type: "hospital"
  }
]

В интерфейсе можно оставить только:

restaurant
hotel

Объекты категории hospital будут скрыты.

Используется для:

  • типов организаций;
  • категорий товаров;
  • статусов заказов;
  • классов объектов.

Select Filter

Позволяет выбрать одно значение.

Например:

status = "completed"

Все остальные записи исключаются из отображения.

Подходит для:

  • состояния объектов;
  • страны;
  • региона;
  • конкретного типа данных.

Создание фильтра через конфигурацию

Фильтры могут задаваться программно.

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

const config = {
  visState: {
    filters: [
      {
        id: "price-filter",
        dataId: "housing",
        name: "price",
        type: "range",
        value: [100000, 500000]
      }
    ]
  }
};

Затем конфигурация загружается в экземпляр карты:

import KeplerGlSchema fr om '@kepler.gl/schemas';

dispatch(
  addDataToMap({
    datasets: {
      info: {
        id: 'housing',
        label: 'Housing'
      },
      data
    },
    config
  })
);

После загрузки фильтр становится активным автоматически.


Взаимодействие нескольких фильтров

Kepler.gl поддерживает одновременное использование нескольких фильтров.

Предположим, имеется набор данных:

[
  {
    city: "Almaty",
    population: 2000000,
    year: 2024
  }
]

Добавлены фильтры:

population > 1000000

и

year = 2024

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

Логика работы соответствует оператору:

AND

Это позволяет строить сложные аналитические выборки.


Привязка фильтров к нескольким слоям

Один фильтр может воздействовать сразу на несколько визуальных слоёв.

Например:

  • слой точек;
  • слой тепловой карты;
  • слой кластеров.

Все они используют один источник данных.

При изменении фильтра все слои синхронно обновляются.

Преимущества подхода:

  • единообразие отображения;
  • высокая производительность;
  • отсутствие дублирования логики.

Анимация временных данных

Одной из наиболее мощных возможностей является анимация временных фильтров.

При наличии поля времени:

timestamp

Kepler.gl может автоматически воспроизводить изменения данных во времени.

Настраиваются:

  • скорость воспроизведения;
  • диапазон времени;
  • шаг анимации.

Типичный сценарий:

  • перемещение транспорта;
  • распространение событий;
  • анализ активности пользователей;
  • изменение погодных условий.

Работа с временными форматами

Kepler.gl поддерживает множество форматов времени.

Примеры:

2024-01-01
2024-01-01T12:30:00
1704110400000
01/01/2024

Однако наиболее надёжным вариантом считается формат ISO 8601:

2024-01-01T12:30:00Z

Он корректно обрабатывается большинством библиотек JavaScript.


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

При работе с большими объёмами данных производительность становится критически важной.

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

Размер набора данных

Например:

1000 записей

и

10 000 000 записей

будут обрабатываться совершенно по-разному.


Количество активных фильтров

Каждый новый фильтр требует дополнительной проверки записей.

Например:

filter1 &&
filter2 &&
filter3 &&
filter4

увеличивают объём вычислений.


Тип визуализации

Наиболее ресурсоёмкими являются:

  • Heatmap;
  • Hexagon Layer;
  • Grid Layer;
  • GPU Aggregation.

Фильтрация таких слоёв требует дополнительного пересчёта агрегаций.


GPU-фильтрация

Одним из преимуществ Kepler.gl является использование возможностей WebGL.

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

Преимущества:

  • высокая скорость обработки;
  • плавное взаимодействие;
  • возможность работы с миллионами объектов.

Особенно заметен эффект при:

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

Трансформация данных через агрегацию

Трансформация позволяет получать новую информацию на основе исходных данных.

Предположим, имеется набор точек:

[
  {lat: 43.2, lng: 76.9, value: 10},
  {lat: 43.2, lng: 76.9, value: 20},
  {lat: 43.2, lng: 76.9, value: 30}
]

Вместо отображения каждой точки отдельно можно агрегировать значения:

10 + 20 + 30 = 60

Получается один визуальный объект с суммарным показателем.


Hexagon Layer как инструмент трансформации

Hexagon Layer выполняет пространственную агрегацию данных.

Процесс включает:

  1. Разбиение карты на шестиугольники.
  2. Распределение точек по ячейкам.
  3. Расчёт агрегированных показателей.

Поддерживаются функции:

count
sum
mean
median
max
min

В результате отдельные записи преобразуются в статистическую поверхность.


Grid Layer

Grid Layer работает аналогично Hexagon Layer, но использует прямоугольную сетку.

Преимущества:

  • простота интерпретации;
  • быстрое построение;
  • удобство сравнения ячеек.

Используется для:

  • анализа плотности населения;
  • распределения заказов;
  • статистики посещений.

Cluster Layer

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

Исходные данные:

10000 точек

После кластеризации:

50 кластеров

Каждый кластер содержит информацию о количестве объектов внутри.

Преимущества:

  • уменьшение визуального шума;
  • ускорение рендеринга;
  • улучшение читаемости карты.

Фильтрация агрегированных слоёв

Фильтры применяются до выполнения агрегации.

Последовательность выглядит следующим образом:

Исходные данные
        ↓
Фильтрация
        ↓
Агрегация
        ↓
Визуализация

Это означает, что при изменении фильтра автоматически пересчитываются:

  • кластеры;
  • тепловые карты;
  • сетки;
  • шестиугольники.

Благодаря этому аналитические результаты всегда соответствуют текущей выборке данных.


Использование Split Maps

Фильтрация особенно полезна в режиме сравнения карт.

В Split Maps можно отображать разные состояния данных.

Например:

Левая карта:

year = 2023

Правая карта:

year = 2024

Такой подход позволяет визуально анализировать изменения между периодами.


Программное изменение фильтров

В приложениях на React фильтры часто изменяются динамически.

Пример изменения диапазона:

dispatch({
  type: 'SET_FILTER',
  payload: {
    filterId: 'population-filter',
    value: [500000, 3000000]
  }
});

После отправки действия карта немедленно обновится.

Подобный механизм используется при интеграции:

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

Сохранение фильтров в конфигурации

Текущее состояние фильтров входит в экспортируемую конфигурацию карты.

При сохранении проекта:

const savedConfig = KeplerGlSchema.save(state.keplerGl.map);

В конфигурацию попадают:

  • типы фильтров;
  • выбранные значения;
  • временные диапазоны;
  • параметры отображения.

После повторной загрузки проекта карта восстанавливается в идентичном состоянии.


Практические сценарии применения

Логистика

Фильтрация:

vehicle_type = "truck"

и

date = today

Позволяет анализировать только грузовой транспорт за выбранный день.


Геомаркетинг

Фильтрация населения:

population > 100000

После чего строятся агрегированные тепловые карты плотности клиентов.


Мониторинг датчиков

Фильтр:

temperature > 40

Показывает только критические показания оборудования.


Анализ мобильности

Временной диапазон:

08:00 - 10:00

Позволяет исследовать утренний транспортный поток.


Рекомендации по проектированию фильтров

Использовать минимально необходимое количество фильтров.

Избыточное число условий усложняет анализ и снижает производительность.

Применять временные фильтры для потоковых данных.

Они обеспечивают наиболее наглядное исследование изменений во времени.

Предпочитать категориальные фильтры текстовому поиску.

Категории обрабатываются быстрее и проще воспринимаются визуально.

Использовать агрегацию после фильтрации.

Такой подход обеспечивает корректные статистические результаты.

Хранить фильтры внутри конфигурации карты.

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