Зашел проверить работу картинок - сервер ОКН стал отдавать 403 на прокси запросы. Добавление заголовка user-agent в запрос решило проблему.
- Чибисов Михаил
- Бабурина Екатерина
- Маркевич Екатерина
- Маренин Евгений
pip install -r requirements.txt
python3 -m src.generate_folium_map
Киров, город в России, административный центр Кировской области Нас. 475,8 тыс. чел. (2024). Расположен в центральной части области, на реке Вятка (вытянут вдоль берегов более чем на 25 км). Крупный транспортный узел. Речной порт. Аэропорт. Исторический, культурный, промышленный и научный центр Приуралья. Родина дымковской игрушки. Город трудовой доблести.
- Предоставленный с заданием csv-файл с информацией об ОКН Кировской области
- Выгруженный с помощью overpass turbo файл с границами города Киров (kirov_borders.geojson)
Note: в рамках генерации карты данные берутся напрямую из исходного .csv файла. Файл export.geojson
размещен здесь по условию задания и для дальнейшей возможности быстрого переиспользования и валидации данных.
Логика скрипта разделена на несколько файлов, расположенных в папке ./src
:
data_parser.py
: набор инструкций для чтения и преобразования исходного csv датасета в рабочий формат. Здесь также расположены функции для чтения дополнительных файлов-ресурсов (вроде иконки маркера, границ датасета). Инстанс класса DataParser затем используется другими модулями для удобного доступа к данным.config.py
: конфиг-файл с путями до всех нужных для генерации карты данных. При желании значения можно изменить и запустить работу скрипта для другого датасета.map_maker.py
: содержит класс MapMaker, используемый для создания инстанса карты и дальнейшей его конфигурации.html_popup.py
: файл с html-темплейтом попапа и функциями для его форматирования.generate_folium_map.py
: entrypoint приложенияcors_proxy.py
: отдельный модуль, никак не связанный с остальной логикой приложения. Это микро-бекенд, который запускается на сервере и представляет собой прокси для обращения к картинкам с сайта okn-mk.mkrf.ru.
Самым интересным было сделать html-попап для объектов с возможностью отображения картинок. Ссылки на медиа были в датасете, однако сервер минкульта не отдавал нужные cors заголовки, поэтому просто добавить ссылки в html не получилось. Понадобилось изобрести простенький прокси-бек, для обращения к все тем же картинкам. Далее надо было настроить кеш картинок на уровне nginx, так как большинство медиа были тяжеловесными и грузились достаточно долго.
В итоге получилось! Но не на 100% идеально, так как по некоторым ссылкам минкульт кажется отдает не картинки, а пдф-ки. В целом добавить их отображение не очень сложно, но мы не успели это доделать.
См. выше историю с картинками.
В остальном практически все пункты задания получились без проблем.
Поправить баг отображения состояния включенной подложки - при загрузке страницы рендерится верная опция, однако в LayerControl все подложки отображаются выключенными. Скорее всего какая-то особенность лифлета, не успел разобраться.
Сделать скрипт полностью датасет-независимым, добавить более тонкие опции конфигурации (например через CLI). Тут опять же не хватило времени.