🗺️Геоданные в Insight BI, но есть нюанс

Визуализация геоданных в Insight BI – один из десятка стандартных сценариев работы с редактором, который подразумевает взаимодействие с виджетом «Точечная карта».

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

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

Пример содержания geoJSON файла

{
  "type": "FeatureCollection",
  "name": "2025_2_36",
  "features": [
    {
      "type": "Feature",
      "properties": {
        "category_lvl": 3,
        "id": 78130,
        "date_predict": "2025-02-01",
        "id_data_lvl": "781302025023"
      },
      "geometry": {
        "type": "MultiPolygon",
        "coordinates": [
          [
            [
              48.999583,
              50.397917
            ],
            [
              48.999583,
              50.39875
            ],
            [
              41.000417,
              50.39875
            ]
          ]
        ]
      }
    }
  ]
}

Датасет служит «связкой» между виджетом и geoJSON-файлом, что позволяет использовать такой функционал как: покраска точек, покраска полигонов, зум до точек, триггер переменных при нажатии на точки и многое другое. Обычно, связка идёт по одному полю датасета, которое содержит уникальные id объектов.

Узким горлышком выше описанной системы является размер geoJSON файла. При достаточно больших размерах (>10 мегабайт) он начинает замедлять работу дашборда и вкладки браузера в целом, а при размере более 30 мегабайт, и вовсе, может вызвать сброс страницы.

К сожалению, придётся отказаться от больших geoJSON файлов в угоду производительности системы. Или не придётся?

Рассмотрим задачу визуализации Рыболовного прогноза.

По ряду рек имеется информация об объёме вылова рыбы на конкретном участке (таких участков более 1000) в конкретном месяце, которая лежит в CSV-файле размером 13 гигабайт. Информация представлена в виде небольших полигонов (см. рисунок ниже), имеющих 4 категории:

  1. Улов меньше 30 тонн;
  2. Улов 30-60 тонн;
  3. Улов 60-90 тонн;
  4. Улов больше 90 тонн.

Река, разбитая на полигоны
23442

Необходимо вывести прогноз по всей Российской Федерации за 12 месяцев.

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

Такой объём уронит веб-страницу и не даст пользователю увидеть желаемое, поэтому придётся провести оптимизацию. Лучше всего будет объединить все полигоны в мультиполигоны (см. рисунок ниже), выделяя на любую реку не 12000 условных полигонов, а всегда 4 мультиполигона (по количеству категорий).

Река, разбитая на мультиполигоны

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

Разобьём файл на каждый месяц, вследствие чего получим 12 файлов, которые весят примерно 170 мегабайт. Если разбить файл за месяц по каждому региону отдельно, то получится уменьшить объём ± в 89 раз! Средний объём файла составил 2,5 мегабайт, минимальный – 17 килобайт, максимальный – 16 мегабайт.

Для дальнейшей оптимизациями остаётся использовать возможности Insight BI, в частности, виджет «Конструктор бизнес-логики». Он позволяет выводить или не выводить слоты с контентом в зависимости от наполнения датасета, фильтрации по переменным, через сравнение по условия с метрикой/измерением. Для текущей задачи нужно использовать два конструктора:

  1. Первый конструктор – по месяцам (от января до декабря);
    4
  2. Второй конструктор (вложенный в каждый месяц) – по регионам (от Республики Адыгея до Ямало-Ненецкого автономного округа).

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

Кнопочный фильтр для переключения месяцев

Проваливание во второй конструктор осуществляется при нажатии на точки регионов.

Точечная карта с точками для проваливания во второй конструктор

В результате имеем проваливание до прогноза по региону в виде мультиполигона.

Точечная карта после проваливания в регион

Подложку для точеной карты брали у Яндекса. Нужна обязательно с припиской «&projection=web_mercator», так как иначе будет выбрана неверная проекция и границы с мультиполигонами будут смещены на некоторое расстояние.

Поближе познакомиться с виджетами «Точечная карта» и «Конструктор бизнес-логики» можно тут.

Об авторах :brain:

:rocket: Инициатор идеи: Ксения Семенова — Тимлид BI-платформы Insight и руководитель проекта ключевого клиента Goodt.
:dart: Автор текста: Скачков Егор — low-код разработчик/бизнес-аналитик BI-платформы Insight
:clipboard: Редактор: Плесская Ольга — технический писатель.


Спасибо команде!:sparkling_heart:

Этот проект стал реальностью благодаря вам!

:star2: Салтыков Игорь — администратор проекта
:bar_chart: Федянин Алексей — дата-инженер BI-платформы Insight
:hammer_and_wrench: Пуриков Сергей — low-код разработчик/бизнес-аналитик BI-платформы Insight
:gear: Пепеляев Максим — дата-инженер BI-платформы Insight
:bulb: Корочин Андрей — дата-инженер BI-платформы Insight
:link: Залеев Данила — low-код разработчик/бизнес-аналитик BI-платформы Insight

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

:muscle:Спасибо за ваш труд, страсть и веру в идею!

2 лайка