Следует отметить, что сейчас разработка библиотеки лишь на начальной стадии.
Следующий функционал уже реализован:
- Класс tileid для хранения и основных операций с индексом тайла (координаты+зумм).
Компактный бинарный формат пригоден для использования в качестве индекса БД. Технически индекс представляет собой неизменяемый объект (в терминологии Питона) потомок от типа long.
Реализует итератор по цепочке предков от корня. Инициализируется из различных видов записи: координатной (x, y, z), пирамидальной ("qrts" или [0, 1, 2, 3]), пирамидально-бинарной. - Класс tileset для хранения маски заполнения тайлового поля.
Изначально предназначался для быстрой проверки наличия тайла в хранилище, но на данный момент функционал класса позволяет делать очень интересные вещи.
Экземпляр класса предназначен для хранения информации о заполнении одного тайлового слоя в одном масштабе, например, sat\z19. Информация о тайлах эффективно хранится в дереве так, что, например, полностью заполненный или полностью пустой слой занимает в дереве всего один узел. Кроме того, в дереве можно хранить не только двоичные состояния тайлов (есть/нет), но и более широкий набор информации, например, неизвестно/есть/нет/загрузился_с_ошибкой и т.д.
На данный момент можно задавать 255 различных состояний тайла, сохраняя, скажем, информацию о версии тайлов. Например у нас есть недокачанный тайловый кеш окрестностей Парижа. В какой-то момент источник сменил версию тайлов и сервис начал гнать более свежие картинки. Такую ситуацию можно отслеживать и отмечать версию в тайлсете, что позволит не перепутать старые и новые тайлы между собой.
tileset умеет эффективно сохраняться в бинарный файл и загружаться из него. Состояния тайлов могут задаваться не только целыми числами, но вообще любыми неизменяемыми объектами (в терминологии Питона), например, строками или кортежами. При этом строки занимают место в структуре тайлсета в памяти и на диске только один раз, а в узлах дерева они упоминаются по индексу.
Кроме всего прочего тайлсет предоставляет итераторы по узлам и по тайлам, статистику о заполнении, методы для одиночной и массовой установки статуса тайлам.
- Для тайлсета
- Итератор по узлам или тайлам определённого статуса.
- Пересечение, вычитание, сложение тайлсетов.
- Фильтры и пастеризация по статусам/набору статусов.
Из прочего - Формирование векторных и растровых прозрачных тайлов с текстурой заполнения на основе тайлсета (технически решается обходом фрагмента дерева в глубину, что очень эффективно).
- Создание класса абстрактного тайлохранилища.
- Создание реальных классов тайлохранилищ на основе базы Беркли, sqlite, файловой системы, web-источников и т.д..
- Поддержка в тайлохранилищах многоверсионности тайлов.
- Веб-сервер источник тайлов на основе CGI Python. Планируется реализовать интерфейс тайлохранилища на отдельном веб-сервере с http-доступом посредством обычных get и post запросов. Таким образом можно будет уйти от работы с тайловыми хранилищами и кэшами внутри SAS-планеты и вынести всё это на выделенный или локальный веб-сервер. Это даст возможность использовать один кеш в локальной сети и через интернет, а клиентское приложение (SAS-Планета, например) может сосредоточиться лишь на текущем оперативном кэшировании ближайших тайлов.
- Возможность поставки тайлохранилищем тайлов с маской заполнения.
Юнит-тестирование в таком проекте необходимо как воздух, и связано это, в основном, с непрерывным изменением в ходе разработки реализаций тех или иных механизмов работы библиотеки. Постоянно что-то ломается и следить за всем этим желательно непрерывно, чтобы потом не погрязнуть в рутинной отладке.
Сейчас нужно довести до ума модуль с тестами тайлсета. Модуль Tileid уже более менее покрыт ими.
Прошу к обсуждению с пожеланиями и предложениями.