Новый универсальный модуль растеризации изображений
Создание тайлового веб-интерфейса потребовало разработки нового более эффективного программного решения для формирования отображаемых в нем тайлов изображений, которое позволило бы при сохранении имеющегося функционала существенно повысить скорость выполнения операций. Это, в частности, связано с тем, что в отличие от прежнего интерфейса при формировании одного изображения для области просмотра в новом интерфейсе необходимо получить целую группу отдельных тайлов. Прежде всего, были проанализированы основные недостатки существовавших ранее программных компонент, предназначенных для решения этой задачи. К числу основных из них можно отнести использование разных процедур и библиотек для решения схожих задач по формированию изображений и недостаточную их гибкость, что существенно усложняло поддержку и модификацию этих компонент. Также существенным фактором, снижающим их эффективность, было использование временных файлов, которого не удавалось избежать в прежней реализации. На основе анализа имеющихся недостатков было решено разработать новый универсальный модуль растеризации изображений.
Новый модуль растеризации был полностью реализован на языке программирования Python и использует для работы с изображениями свободно распространяемый программный пакет GDAL. Необходимые вычисления в процессе формирования изображений производятся с использованием высокоэффективной библиотеки NumPy, являющейся свободно распространяемой альтернативой пакета MATLAB. В результате, несмотря на использование интерпретируемого языка программирования, основные операции по обработке данных производятся с высокой эффективностью, характерной для компилируемых языков программирования. В то же время программный код, реализованный на языке Python существенно проще поддерживать и не нужно компилировать при установке на сервера с различными операционными системами.
Ниже приводится базовая последовательность операций, выполняемых при вызове модуля растеризации:
- Определение параметров вызова
- Определение параметров карты: диапазон координат, проекция, размер и др.
- Определение правил построения продуктов: идентификаторы набора исходных данных, правила формирования на их основе требуемого информационного продукта, получаемые из справочных баз данных или от пользователя
- Формирование изображения в памяти
- Чтение данных из файлов
- Обработка данных при помощи программного пакета GDAL
- Получение мозаики фрагментов
- Получение вычисляемых продуктов
- Предоставление изображения
- Формирование и отдача в выходной поток (или в файл, если нужно) изображения в формате PNG
- Формирование и отдача изображения в формате GeoTIFF
В случае формирования изображения в формате PNG реализуются следующие основные варианты данных:
- трехканальный RGB продукт;
- одноканальный продукт с палитрой;
- одноканальный продукт без палитры;
- пустое прозрачное изображение в случае отсутствия данных в области интереса.
На основе обработки массивов NumPy производятся следующие основные операции: сшивка изображений, вычисления в соответствии с правилами построения продукта, нормировка данных, формирование маски прозрачности по каждому каналу изображения и др. Существенно, что для повышения эффективности работы модуля обработка каждого из входных изображений производится в параллельном режиме (до 8 одновременных потоков).
Создание универсального модуля растеризации изображений позволило существенно повысить эффективность работы нового тайлового веб-интерфейса. Благодаря его внедрению также существенно упростилась задача расширения имеющегося функционала по формированию спутниковых изображений.