Обсудить
бизнес-задачи

Добавление новой карты в чарт Country Map в Apache Superset

блог о bi, №1 в рунете
Визуализация Country Map позволяет строить облегченные картографические карты стран по областям, округам или другим типам подразделений по уникальным кодам ISO-3166-2 уровня вашей страны. В стандартном наборе карт этого чарта присутствует Россия, но полигоны областных округов построены по координатам широты и долготы спроецированным на прямоугольную плоскость. Такая проекция имеет место быть и при правильном использовании верна, но изображение приобретает искажение по ширине, которое усиливается при удалении от экватора к полюсам. Эту проблему можно решить, добавив пользовательскую карту страны в чарт Country Map, об этом будет рассказано в данной статье.

Карты стран хранятся в исходном коде Superset в формате geojson в папке \superset\superset-frontend\plugins\legacy-plugin-chart-country-map\src\countries. Мы нашли russia.geojson и для изучения его структуры воспользовались библиотекой geopandas в Google Colab:
Чтобы преобразовать внешний вид, мы можем пересчитать имеющиеся точки полигонов в нужную систему координат или найти в открытом доступе карты в необходимом формате и масштабировать значения. Мы воспользовались вторым вариантом:

- Подходящую карту нашли по ссылке https://code.highcharts.com/mapdata/;

- Обработали точки полигонов и в итоге получили карту следующего вида:
Далее необходимо вставить получившуюся карту в чарт Country Map SuperSet. Для этого выполняем следующие действия:

- добавляем файл russia_new.geojson в папку \superset\superset-frontend\plugins\legacy-plugin-chart-country-map\src\countries:
- для импорта новой карты в файле \superset\superset-frontend\plugins\legacy-plugin-chart-country-map\src\countries.ts добавляем следующий код:
- останавливаем docker контейнер и запускаем сборку нового образа:
docker-compose stop
docker build -f Dockerfile --force-rm -t apache/superset:${TAG:-latest-9} /home/user/superset
- после завершения сборки в файле \superset\docker-compose-non-dev.yml редактируем название образа:
- запускаем docker контейнер:
docker-compose -f docker-compose-non-dev.yml up -d
- переходим по ссылке http://localhost:8088/ , авторизуемся и проверяем, что в чарте Country Map появилась страна Russia_new:
На рисунке ниже показан тестовый дашборд, на котором видна разница между стандартной картой SuperSet и новой:
Редактируя файл russia_new.geojson можно изменить названия подразделений или их код при необходимости: