суббота, 16 июня 2007 г.

Mapserver: растры (перевод)

Растры

В документе рассказывается о методах работы с растрами, используя картсервер
Последнее обновление: 14/11/2004


Введение

Картсервер поддерживает отрисовку растров множества различных форматов. Ниже перечислены некоторые из поддерживаемых форматов и приведены рекомендации по работе с ними.

Далее предполагается, что вы разбираетесь в настройках файла проекта, но еще не знакомы со специфичными аспектами использования растровых данных.

Как добавить растр в файл проекта?

Добавление простого растрового слоя может выглядеть, как представлено в примере ниже. Путь к файлу данных (DATA) указывается относительно директории SHAPEPATH, аналогично тому, как это делается для шейпфайлов.

LAYER
NAME "JacksonvilleNC_CIB"
DATA "Jacksonville.tif"
TYPE RASTER
STATUS ON
END

Кроме указанных инструкций, растры поддерживают также директивы PROJECTION, METADATA, PROCESSING, MINSCALE, и MAXSCALE информацию. Растровые слои не могут содержать подписей, запросов, директив CONNECTION, CONNECTIONTYPE, или FEATURE информации.

Классификация растров

Растры могут классифицировааться подобно векторным данным, однако с некоторыми исключениями. Значение CLASSITEM всегда указывается в пикселах, что указывается специальной строкой "[pixel]" (обязательно в нижнем регистре). Следующий пример демонстрирует растровый слой с простой схемой классификации.

LAYER
NAME "JacksonvilleNC_CIB"
DATA "Jacksonville.tif"
TYPE RASTER
STATUS ON
CLASSITEM "[pixel]"
CLASS
EXPRESSION ([pixel] < 64)
COLOR 0 0 0
END
CLASS
EXPRESSION ([pixel] >= 64 AND [pixel] < 128)
COLOR 255 0 0
END
CLASS
EXPRESSION ([pixel] >= 128 AND [pixel] < 196)
COLOR 0 255 0
END
CLASS
EXPRESSION ([pixel] >= 196 AND [pixel] < 256)
COLOR 0 0 255
END
END


Некоторые драйверы (например, GDAL) присваивают пикселам значение в диапазоне от 0 до 255 прежде, чем использовать схему классификации, исключая возможность классификации с использованием значений с плавающей точкой, или если данные некорректно преобразуются к диапазону (0-255). Это ошибка, которая в будущем будет исправлена.

Отметим, что только COLOR, EXPRESSION и NAME параметры используются для классификации растров, прочая же информация игнорируется [для классификации].

Поддерживаемые форматы

Список поддерживаемых растровых форматов в основном определяется настройками конфигурации. Если вы используете для отрисовки библиотеку работы с растрами GDAL, некоторые форматы являются втроенными.

Разнообразную информацию о библиотеке GDAL вы можете найти по адресу http://www.remotesensing.org/gdal , включая список поддерживаемых форматов supported formats list. Некоторые продвинутые возможности картсервера в работе с растрами, такие как топологическое преобразование, использование цветового куба RGB и автоматической проекции доступны только при работе с растрами через GDAL. GDAL обычно устанавливается и настраивается отдельно от картсервера, и подключяется через директиву компиляции –with-gdal. Список поодерживаемых GDAL форматов, кроме перечисленных ниже, также включает CEOs, DOQ, ECW, ESRI Labelled BIL, Arc/Info Binary Grid, OGDI и Erdas Imagine (.hfa).

Можно узнать о настройках компиляции картсервера, запустив его с ключом -v. Чтобы узнать о поддерживаемых GDAL форматах, используется команда gdal-config. Пример:

warmerda@gdal[103]% ./mapserv -v
MapServer version 3.5 (pre-alpha) OUTPUT=PNG OUTPUT=JPEG OUTPUT=WBMP
SUPPORTS=PROJ SUPPORTS=TTF INPUT=EPPL7 INPUT=OGR INPUT=GDAL INPUT=SHAPEFILE
warmerda@gdal[104]% gdal-config --formats
gxf gtiff hfa aigrid aaigrid ceos ceos2 iso8211 sdts raw dted mem jdem
envisat elas ogdi gif jpeg png fits grass

Указанные форматы потенциально встроены в библиотеку GDAL:

  • TIFF/GeoTIFF: если картсервер собран с параметром INPUT=TIFF , в него уже встроена поддержка форматов TIFF или GeoTIFF. Встроенная поддержка TIFF формата имеет ограничения на устройство читаемых файлов (не разделенные (no tiled), 16bit, RGB, или нечетная цветовая модель (odd color models)). Этот драйвер поддерживает файлы привязки world files, или простые встроенные GeoTIFF координаты для геопривязки. Директива проецирования AUTO не поддерживается.
    Полнофункциональная поддержка TIFF/GeoTIFF доступна только через GDAL. Отметим, что только GDAL поддерживает разделенные (tiled) TIFF файлы и TIFF файлы с перекрытиями. Разделенные (tiled) TIFF файлы с перекрытиями, подготовленные заранее, один из лучших путей значительного повышения эффективности работы сервера с растровыми изображениями.

  • GIF: если GD собрана с поддержкой GIF (OUTPUT=GIF), картсервер также сможет читать GIF файлы для растровых слоев. Геопривязка GIF файлов может быть выполнена только с использованием файлов привязки (world file).
    Если GD не включает поддержку GIF, эта возможность может быть доступна через GDAL, который также поддерживает геопривязку через файлы привязки (world file).

  • PNG: Если GD собрана с поддержкой PNG (OUTPUT=PNG), картсервер также сможет читать PNG файлы для растровых слоев. Геопривязка PNG файлов может быть выполнена только с использованием файлов привязки (world file).
    Если GD не включает поддержку PNG, эта возможность может быть доступна через GDAL, который также поддерживает геопривязку через файлы привязки (world file).

  • JPEG: если картсервер включает встроенную поддержку JPEG (INPUT=JPEG) , то JPEG файлы в оттенках серого могут использоваться при отрисовке растровых слоев. RGB файлы (более продвинутый стандарт) не поддерживаются. Геопривязка JPEG файлов может быть выполнена только с использованием файлов привязки (world file).
    Если картсервер не имеет встроенной поддержки ффйлов JPEG, GDAL может работать с этим форматом. В этом случае RGB файлы также поддерживаются (через механизм цветового куба RGB). Геопривязка только с использованием файлов привязки (world file).

  • Erdas .LAN/.GIS: Iесли картсервер включает встроенную поддержку (INPUT=EPPL7) (по умолчанию), поддерживаются 8-битные Erdas LAN/GIS файлы. Файл .trl читается для получения цветовой схемы, и если не указан слой в оттенках серого. Информация о геопривязке размещается в самом файле .



Разделенные растры

Когда обрабатываются очень большие растровые файлы, значительное повышение производительности может быть достигнуто путем разделения исходного большого растрового изображения на множество маленьких картинок. Каждый файл является частью большой растровой мозаики, доступной для отображения. Список файлов мозаики может быть сохранен в шейпфайле с указанием координат границ каждого файла и имени файла. Такая запись называется TILEINDEX и работает аналогично соответствующему механизму для векторных файлов. Результат может быть описан в файле проекта как один слой, поскольку картсервер умеет автоматически сканировать файлы мозаики, перечисленные в шейпфайле и отображать только те из них, которые видны в текущем окне просмотра.

Ниже приведен простой пример. Инструкция DATA не требуется, поскольку картсервер найдет имена файлов мозаики в аттрибутивном столбце Location в файле hp2.dbf , соответствующем файлу hp2.shp, содержащему набор пересекающихся регионов. Полигоны в файле hp2.shp являются прямоугольниками, соответствующими границам файлов мозаики. Заметим, что файлы мозаики могут иметь разный размер, форматы могут отличаться и элементы мозаики могут перекрываться (последующие картинки отрисовываются поверх предыдущих); разумеется, все изображения должны быть в единой системе координат (проекции) со слоем.

LAYER
NAME "hpool"
STATUS ON
TILEINDEX "hp2.shp"
TILEITEM "Location"
TYPE RASTER
END

Существует множество способов создать шейпфайл мозаики TILEINDEX для использования согласно вышеописанному способу, один из путей состоит в использовании программы gdaltindex, входящей в комплект утилит GDAL. Программа gdaltindex автоматически создает шейпфайл мозаики из списка поддерживаемых GDAL растровых файлов, переданного в командной строке.

Использование:
gdaltindex [-tileindex field_name] index_file [gdal_file]*

eg.
% gdaltindex doq_index.shp doq/*.tif

Примечание:
o Шейпфайл (index_file) будет создан, если он еще не существует.
o Имена файлов мозаики по умолчанию сохраняются в столбце 'location'.
o Имена файлов мозаики сохраняются точно в том виде и в том порядке, в котором они указаны в командной строке.
o Простые прямоугольные полигоны создаются в координатной системе растров.

Программа gdaltindex может быть собрана как часть GDAL (не входит в пакет по умолчанию).

Проектирование растров

Картсервер может преобразовать GDAl растры в новую проекцию “на лету”. Не поддерживаемые GDAL растры могут быть только увеличены или уменьшены без поворотов или других искажений.

Преобразование проекции (перепроектирование) растров требуется в том слкчае, когда проекция растра не соответствует проекции создаваемой карты. Указанная операция требует значительных ресурсов и выполняется в несколько раз медленнее (возможно, в 2-4 раза) обычной отрисовки растра. Информация о преобразовании проекции и датума вычисляется только для выбранных точек, после чего интерполируется на соседние (предусмотрено, что ошибка преобразования не превышает 0.333 пиксела).

В дополнение к возможности преобразования проекции растров, растровые преобразования включают возможность поворотов GDAL растров в соответствии с указанной в файле привязки информацией. Преобразования растров не выполняются, когда растровый слой определяется в той же проекции, что и вся карта.

Обработка 24-битных RGB растров

Традиционно картсервер применяют для создания 8-бит псевдо-цветной карты, основанной на 8-бит картинки в оттенках серого или псевдоцветной. Таким образом, если растровый файл является 24-бит изображением (красный, зеленый и синий диапазоны), обычно используемый метод отрисовки не пригоден. Отрисовка 24-бит изображений поддерживается только через GDAL. Встроенные PNG, JPEG и другие драйверы не поддерживают вывод 24-бит изображений.

Если строится 8-бит псевдо-цветное изображение (параметр IMAGEMODE установлен как PC256 в соответствующей OUTPUT директиве), тогда полная 24-бит RGB картинка для отображения будет преобразована в карту цветов выходного изображения. По умолчанию используется цветовой куб. Он включает фиксированный набор из 175 цветов и поддерживает использование 5 уровней красного, 7 уровней зеленого и 5 уровней синего, и плюс к этому 32 оттенка серого. Растры отрисовываются “на лету” одним из цветов куба. Такой механизм ухудшает качество цветопередачи, особенно для изображений с плавными переходами цвета. Также можно использовать фиксированный набор из 256 цветов, что работает значительно быстрее.

Вариацией изложенного подхода является скользящее сглаживание в процессе отрисовки. Этот алгоритм вычисляет цвет пиксела исходя из цвета соседних. В случае однотонных участков изображения результат аппроксимации получается точнее, чем в предыдущем методе. Технология сглаживания может быть полезна не только для цветового куба, но и для заданной цветовой палитры. Сглаживание поддерживается библиотекой GDAL 1.1.9 или более новой, и активизируется директивой PROCESSING "DITHER=YES" в файле проекта. Отметим, что сглаживание требует больше ресурсов процессора чем простое использование цветового куба, в силу чего следует избегать использование этой технологии в тех случаях, когда важна производительность.

Кроме перечисленных возможностей, картсервер позволяет создавать 24-бит выходное изображение при использовании 24-бит исходного. По умолчанию директивы "IMAGETYPE png24" или "IMAGETYPE jpeg" могут использоваться для создания 24-бит PNG или JPEG изображения в отличие от стандартного 8-бит псевдо-цветного. Директива OUTPUTFORMAT обеспечивает полный контроль формата вывода. Опции IMAGEMODE RGB и IMAGEMODE RGBA создают 24-бит и 32-бит (24-бит плюс 8-бит альфа-канал/прозрачность) изображение для поддерживаемых форматов.

Специальные директивы обработки

Рассмотрим возможности использования ключевого слова PROCESSING в объекте LAYER. В основном эта опция используется для передачи специальных параметров обработки растров в библиотеку GDAL, выполняющую обработку растров. Перечислим некоторые из поддерживаемых опций.


DITHER=YES
Включает диффузионное размытие, используется при конвертации 24-бит изображения в 8-бит для лучшей цветопередачи.
Пример:
PROCESSING "DITHER=YES"


BANDS=red_or_grey[,green,blue[,alpha]]
Директива позволяет указать диапазон или диапазоны, которые будут выбраны из растрового файла. Если выбран один диапазон, изображение будет обработано так, как если бы оно было сохранено в оттенках серого. Если выбрано 3, они будут обработаны как красный, зеленый и синий цвет. Если выбрано 4, кроме того еще еще будет обработана прозрачность (альфа-канал).
Пример:
PROCESSING "BANDS=4,2,1"


SCALE[_n]=AUTO or min,max
Директива указывает библиотеке GDAL предварительно изменить цветовую шкалу. В основном используется для приведения 16-бит данных или с плавающей точкой к диапазону 0-255, но также может применяться для растяжения диапазона 8-бит данных. Если объявлены значения min/max, то исходные данные преобразуются так, что минимальное значение карты принимает нулевое значение, а максимальное становится равно 255. Если указана опция AUTO, вычисление min/max производится автоматически. Для управления шкалой индивидуального входного диапазона используйте ключи SCALE_1, SCALE_2 и SCALE_3 (для красного, зеленого и синего цветов) вместо ключа SCALE, который применяется ко всем диапазонам.
Пример:
PROCESSING "SCALE=AUTO"
или
PROCESSING "SCALE_1=409,1203"
PROCESSING "SCALE_2=203,296"
PROCESSING "SCALE_3=339,1004"

COLOR_MATCH_THRESHOLD=n
Управляет точностью, с которой цвета представляются в цветовой таблице, используемой для создания 8-бит изображения (IMAGEMODE PC256). Обычно цвета из растровой карты цветов или оттенки серого должны вычисляться точно. Директива указывает, что точность определения цветов лежит в пределах заданного цветового расстояния. Таким образом, установка COLOR_MATCH_THRESHOLD равного 3 будет означать, что существующее значение цвета в пределах 3 (сумма разностей красного, зеленого и синего) будет использоваться вместо создания нового элемента таблицы цветов. Особенно для растров в оттенках серого, которые обыкновенно содержат 256 доступных цветов, представляется хорошая возможность сжатия карты цветов. В большинстве случаев хороший результат достигается при использовании значений в диапазоне 2-6.
Пример:
PROCESSING "COLOR_MATCH_THRESHOLD=3"

Методология отображения растров

  • Построение перекрывающихся уровней для больших растров гарантирует, что только разумно необходимый объем данных будет обработан при построении карты. Могут быть организованы группы перекрывающихся слоев, отображаемых в зависимости от выбранного разрешения, используя директивы MINSCALE и MAXSCALE для управления отображением слоев при выбранном разрешении. Другой, возможно более простой путь, заключается в построении пирамид для поддерживаемых библиотекой GDAL форматов, используя утилиту gdaladdo.

  • Предварительная обработка RGB 8-бит изображений с использованием таблицы цветов с целью уменьшения объемов обрабатываемых данных и числа вычислений “на лету”.

  • Для больших изображений используется их разбиение на набор малых, что позволяет загружать лишь небольшой набор данных для текущей области отображения. Такой путь может пользоваться механизмом TILEINDEX в файле проекта, или построением файла пирамиды (например, для формата TIFF библиотеки GDAL).

  • Убедитесь, что вы заранее подготовили изображение во всех необходимых проекциях, чтобы исключить перепроецирование “на лету”, требуещее много ресурсов компьютера.

  • Если вы используете вывод отладочной информации картсервера в журнал вашего сервера, проверьте, не появляется ли в нем сообщение msResampleGDALToMap in effect. Это сообщение означает, что выполняется перепроецирование растрового слоя. Если вы не делаете это специально, убедитесь, что проекция, указанная в файле проекта совпадает с проекциями всех слоев (верный путь – совсем не указывать проекцию слоя, в этом случае по умолчанию принимается проекция проекта и лишние преобразования выполняться не будут).



Геопривязка растров с помощью файла привязки

Файлы привязки являются простым механизмом для добавления географической информации (мировых координат) к растровым файлам. ESRI была первой компанией, предложившей идею использования файлов привязки, и сейчас часто используют такие файлы с форматом TIFF заместо внедрения географической информации непосредственно файл.

Структура файла привязки следующая. Первый коэффициент представляет собой размер по координате X в пикселах.Второй и третий являются коэффициентами поворота/сдвига (для неискаженного изображения равны 0.0). Четвертый коэффициент представляет собой размер по координате Y в пикселах, обычно этот коэффициент отрицателен, что соответствует направлению оси ординат вниз от левого верхнего угла. Последние два значения представляют собой X и Y координаты центра левого верхнего пиксела изображения. Следующий пример соответствует изображению с размером пиксела 2m x 2m, и левым верхним углом в точке (356800E, 5767999N).
2
0.0000000000
0.0000000000
-2
356800.00
5767999.00

Имя файла привязки основывается на имени файла изображения. Например, для файла aerial.tif файл привязки будет называться aerial.tfw. Кроме того, картсервер также понимает файлы привязки с расширением .wld.

Комментариев нет:


(C) Alexey Pechnikov aka MBG, mobigroup.ru