25 ноября, 2021
Время прочтения: 5 минут
25 ноября, 2021

Кластеризация объектов на карте

Время прочтения: 5 минут

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

Что такое кластеризация в ГИС?

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

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

Используя аналитические методики, кластеризация позволяет выявить центр масс группы объектов на разных масштабах. Найденные  центры масс отображаются на карте в виде точечных объектов, которые можно раскрасить при помощи стандартных методов, используемых в ГИС.

Как работает кластеризация в CoGIS?

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

Перестроение кластеров в CoGIS происходит каждый раз:

  • при изменении области карты (т. е. при сдвиге карты или изменении масштаба);
  • при создании, изменении или удалении объекта;
  • при атрибутивной фильтрации объектов с помощью инструментов CoGIS – атрибутивные фильтры слоя, в виджетах или по результатам геообработки.

Для вычисления и построения кластеров на лету в ГИС-сервере CoGIS используется две методики, выбор которых задается как параметр в свойствах слоя:

  • Simple (вариант по умолчанию) – методика, основанная на шестигранниках, эффективна при количестве объектов до 20-100 тысяч точек (или центроидов полигонов);
  • Delaunay - методика, основанная на триангуляции Делоне, предназначена для кластеризации большого количества объектов, но менее эффективна при небольшом количестве.

Обращаем ваше внимание на то, что обе методики поддерживают возможность группировки вычисляемых кластеров по территориям. Это позволяет строить кластеры в рамках каждого полигонального объекта, таких как регионы РФ или муниципальные районы, без учета данных из соседних территорий. При этом, используя макрос @map_scale в SQL-выражении для группировки, можно при приближении карты определить, на какой масштаб будет работать эта группировка, а на каком отдалении уже разумно считать без учета территориальной принадлежности.

Процесс кластеризации, который не должен превышать 1-2 секунды для комфортной работы пользователя, состоит из следующих этапов:

  1. выполнение запросов в базу данных для получения объектов с учетом фильтров и текущей области карты;
  2. передача данных в ГИС-сервер (особенно актуально, если сервер БД и ГИС-сервер находятся на разных виртуальных машинах);
  3. вычисление кластеров по определенному алгоритму;
  4. отрисовка кластеров, в том числе с учетом составных условных знаков, например для представления кластеров в виде диаграмм со статистикой по атрибутам исходных объектов, правил наложения и уровней символики;
  5. добавление подписей с учетом всех правил расстановки и округлений по размерам символики кластеров;
  6. упаковка отрисованной картинки в растровый формат (png/jpg) для передачи клиенту;
  7. передача картинки с ГИС-сервера в картографическое веб-приложение.

Настройка кластеризации в CoGIS

Слой интерактивной карты с кластерами штатными средствами настраивается в рамках проекта QGIS, который является основой для картографического сервиса.

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

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

  • Настраиваемый символ кластера (кружок и число) с градуированным размером символа по значению кластера.
  • Круговые диаграммы (сектора) по атрибутам объектов кластера, по одному или нескольким атрибутам.
  • Определение значения в кластере как сумма весов всех объектов в кластере:
    • "1" для любого объекта означает простой расчёт количества объектов в кластере (вариант по умолчанию)
    • имя поля объекта – сумма значений по полю объектов кластера
    • SQL-выражение для каждого объекта, учитывающее любые сложные расчеты, выполняемые на уровне СУБД
  • Отображение рёбер (паук) – визуальная связь кластера с его объектами
  • Определение диапазонов масштабов для отображения кластеров, рёбер и исходных объектов, с возможность перекрытия этих масштабов. Например, на удалении показывать только кластеры, при приближении отображать кластеры, рёбра и исходные объекты, а на самых крупных масштабах показывать только исходные объекты как в обычном слое.
  • Подпись кластера с сокращениями в зависимости от размера символа кластера (например «12.5K», «3.4M»), а также возможность не подписывать слишком маленькие кластеры.
  • Если в кластере оказался только один объект, то показывать его как кластер или как исходный объект.

Посмотреть, как работает кластеризация в CoGIS можно на следующих картах нашего демо-портала: