Planet Python на русском
Подписаться
Питер Хоффманн: Загрузка 33 000 пиков по запросу с помощью сетки плиток z10
biwak.info разработал мобильную карту для альпийских хижин, добавив 33 437 названных вершин с подробной информацией, полученной из OpenStreetMap и Wikidata. Для оптимизации работы на мобильных устройствах с ограниченным подключением, значительный объем данных о вершинах (15,4 МБ) требовал эффективной загрузки. Решением стало сегментирование данных на более мелкие файлы JSON на основе тайлов, аналогично существующей сетке тайлов slippy map, используемой Leaflet. Это позволяет браузеру загружать только релевантные данные о вершинах, видимые в текущем представлении карты пользователя.Для сетки данных был выбран фиксированный уровень масштабирования 10, обеспечивающий баланс между количеством сетевых запросов и размером каждого загружаемого файла. На этом уровне альпийский тайл имеет размер примерно 27x27 км, а типичный экран телефона при масштабировании 12 охватывает не более шести тайлов, при этом медианный размер тайла составляет 13 КБ (3,6 КБ в сжатом виде).Python-скрипт создает эти файлы тайлов, а также манифест непустых тайлов, гарантируя, что запрашиваются только необходимые файлы. Данные JSON каждого тайла компактны, используют целочисленные координаты и заголовок полей для минимизации размера файла. Вершины ранжируются по заметности или изоляции для управления видимостью на разных уровнях масштабирования карты, отображая только более значимые вершины при низких масштабах.Клиентский JavaScript использует событие Leaflet 'moveend' для определения необходимых тайлов, загружая их с максимальной скоростью четырех параллельных запросов для предотвращения перегрузки медленных соединений. LRU-кэш из 64 тайлов управляет загруженными данными, удаляя наименее недавно использованные тайлы, если они не находятся в текущем представлении. Данные о вершинах отображаются на одном холсте вместо использования отдельных маркеров Leaflet, что повышает производительность.Нажатие на карту выполняет поиск ближайших соседей в загруженных тайлах для идентификации близлежащих вершин. Сетка на основе тайлов также естественным образом поддерживает глубокие ссылки, позволяя создавать стабильные URL-адреса для конкретных вершин. Будущие улучшения включают добавление большего количества категорий данных, таких как перевалы и смотровые площадки, а также потенциальный переход на векторные тайлы (MVT) для интеграции с картографическими библиотеками, такими как MapLibre. Эта система эффективно обрабатывает большой набор данных без сервера или базы данных, демонстрируя мощь простой файловой сетки.