Содержание

Конвейеры подготовки изображения

Это пока только план, реализация планируется на ближайшее время, но кто его знает.

Воркеры могут быть не обязательно отдельными потоками. Это могут быть элементы из пула потоков, которые будут заниматься задачами разных карт и разных этапов конвейера. Главным ограничением для них вероятно будет то, что задачи каждого элемента конвейера в один момент времени должен выполнять ровно один поток. Это позволит упростить код и меньше заботится о потокобезопасности.

Более отдаленным шагом будет введение интерфейса IBitmapFilter, который будет получать IBitmap32Surface и что-то на нем рисовать. В самом простом случае это будет просто обертка вокруг IBitmap32Static, которая будет отрисовывать готовый тайл на полученной поверхности. Это позволит при рендеринге векторных объектов и сеток для простых элементов не тратить память на полноценный тайла, а просто запомнить нужные операции для его воспроизведения.

Примеры:

  1. Для тайловой сетки текущего зума достаточно нарисовать вертикальную и горизонтальные линии плюс вывести подготовленный маркер с подписью в центр. Есть шанс, что это не только сэкономит память, но даже выполнится быстрее (нужно замерять время этих операций).
  2. Для отображения полигона, который полностью покрывает тайл достаточно просто нарисовать прямоугольник заданного цвета на весь тайл. Скорость не меньше чем наложение битмапки, а памяти экономится очень много - 4 байта вместо 65536 байт необходимых для битмапки размером с тайл.
  3. Для отображения метки-точки достаточно вывести заранее подготовленный маркер, который скорее всего меньше тайла и следовательно операция займет меньше времени и меньше памяти для хранения.

То есть, в результате все операции рендеринга будут возвращать не IBitmapTileMatrix, а IBitmapFilterTileMatrix при помощи которых битмапки будут создаваться на самом последнем шаге конвейера, непосредственно перед выводом на экран.

Подготовка изображения растровых карт и слоев

Подготовка изображения векторных слоев

Подготовка изображения базы меток