Формат ASCIIGRID с примерами
по адресу http://gis-lab.info/qa/asciigrid.html
Описание формата ASCII GRID и примеры особых его вариаций.
ASCII GRID – формат представления растровых данных, исторически использовался как обменный формат в ГИС ARC/INFO (ASCII-файлы создавались командой GRIDASCII). В настоящее время его основная часть поддерживается всеми распространенными ГИС и, в том числе, большинством открытых/свободных (GRASS, QGIS, SAGA и т.д.). Многие из открытых ГИС используют драйвер GDAL, позволяющий как чтение, так и запись в ASCII GRID.
Файл в формате ASCII GRID представляет собой обычный текстовый файл, в котором содержимое разделяется на две части: 1) заголовок, где записывается общая информация о растре, его размеры, географическая привязка и т.д.; 2) секция собственно данных.
Хранение данных в этом формате удобно, прежде всего, возможностью быстрого визуального анализа содержимого: много-мало данных, какие значения, есть ли nodata и т.д. Разумеется, в нём не рекомендуется хранить большие растры.
Общая информация
Структура файла в общем виде такова:
ncols
- количество колонок (целочисленное);
nrows
- количество рядов (целочисленное);
xllcorner
- х-координата левого нижнего угла, долгота (десятичные градусы DD.D(D), DD:MM:SS не поддерживается) или смещение на восток (метры) (целочисленное или с плавающей точкой)
yllcorner
- y-координата левого нижнего угла, широта или смещение на север
cellsize
- линейный размер квадратной ячейки (целочисленное или с плавающей точкой)
nodata_value
- значение "нет данных", этот параметр не обязателен, он нужен для того, чтобы программное обеспечение автоматически делало все ячейки с этим значением прозрачными (целочисленное или с плавающей точкой). Часто используемое значение -9999, нецифровые значения, например "NA" использовать нельзя
Начало отсчета - левый верхний угол.
Данные
Данные описываются просто как строка значений, разделенных пробелами. Разделение на строки не имеет значения (т.е. все данные могут быть в одной строке, а могут имитировать табличную структуру).
Примеры
Все примеры можно копировать и вставлять в текстовые файлы с расширением *.asc, и, независимо от кодировки, они должны работать. Чтобы получить такие же иллюстрации в QGIS, нужно: 1. добавить растр, 2. зайти в свойства\Стиль и изменить "Цветовая карта" на "Псевдоцвета", 3. зайти в "Свойства" --> "Прозрачность" и удалить прозрачный пиксел со значением -9999, а также заменить в значении no data -9999 на 0.
Стандартный заголовок
Это же изображение в табличном виде:
-9999 | -9999 | -2080 | -1909 | -9999 | -601 | -9999 | -1362 |
-510 | -387 | -350 | -182 | -9999 | -9999 | -9999 | 27 |
13 | -92 | -9999 | -33 | 54 | 28 | -182 | -750 |
59 | -165 | 18 | 167 | -182 | -9999 | -608 | 666 |
-62 | -9999 | -805 | -9999 | -9999 | -9999 | -9999 | -497 |
-9999 | -9999 | 332 | 1240 | -9999 | -9999 | -9999 | -9999 |
И непосредственно в формате ASCII GRID:
ncols 8 nrows 6 xllcorner -40.5 yllcorner 25.25 cellsize 10 NODATA_value -9999 -9999 -9999 -2080 -1909 -9999 -601 -9999 -1362 -510 -387 350 -182 -9999 -9999 -9999 27 13 -92 -9999 -33 54 28 -182 -750 59 -165 18 167 -182 -9999 -608 666 -62 -9999 -805 -9999 -9999 -9999 -9999 -497 -9999 -9999 332 1240 -9999 -9999 -9999 -9999
Неквадратная ячейка
В примере приведенном выше, ячейка растра квадратная (т.е. высота равна широте). Если необходима прямоугольная ячейка, где высота не равна широте, вместо параметра cellsize можно использовать DX и DY, например:
ncols 8 nrows 6 xllcorner -40.5 yllcorner 25.25 dx 11.6 dy 5.025 NODATA_value -9999 -9999 -9999 -2080 -1909 -9999 -601 -9999 -1362 -510 -387 350 -182 -9999 -9999 -9999 27 13 -92 -9999 -33 54 28 -182 -750 59 -165 18 167 -182 -9999 -608 666 -62 -9999 -805 -9999 -9999 -9999 -9999 -497 -9999 -9999 332 1240 -9999 -9999 -9999 -9999
Файлы <ASCII Grid> с параметрами DX и DY вместо CELLSIZE не поддерживаются многими GIS (в т.ч. ArcGIS), но поддерживаются, например, QGIS/GRASS/SAGA за счёт использования GDAL.
Вот как будет выглядеть файл выше, где cellsize заменен на DX, DY:
Привязка по центру ячейки, а не углу
Альтернативой привязки по углу, т.е. использования xllcorner
и yllcorner
является привязка по центру ячейки, в этом случае нужно использовать xllcenter
и yllcenter
. Результатом, при неизменных координатах будет сдвиг растра на половину ячейки вниз и влево (по диагонали).
ncols 8 nrows 6 xllcenter -40.5 yllcenter 25.25 cellsize 10 NODATA_value -9999 -9999 -9999 -2080 -1909 -9999 -601 -9999 -1362 -510 -387 350 -182 -9999 -9999 -9999 27 13 -92 -9999 -33 54 28 -182 -750 59 -165 18 167 -182 -9999 -608 666 -62 -9999 -805 -9999 -9999 -9999 -9999 -497 -9999 -9999 332 1240 -9999 -9999 -9999 -9999
Если взять один и тот же растр и заменить xllcenter,yllcenter на xllcorner,yllcorner, а сверху наложить сетку границ пикселей с первого растра, то это будет выглядеть так:
Практика
Таким образом, чтобы создать растр размером m*n не используя никаких инструментов кроме текстового редактора и табличного процессора, нужно сделать следующее.
- Создать таблицу нужного размера в табличном процессоре (OpenOffice Calc, MS Excel и т.д.) или любом редакторе. Скопировать и вставить в текстовый документ. Заменить табуляции на пробелы.
- Прописать заголовок файла в описанном выше формате. Еще один пример для матрицы 360*180, представляющий массив с разрешением 1 градус на весь мир:
ncols 360 nrows 180 xllcorner -180.000000000000 yllcorner -90.000000000000 cellsize 1.000000000000 nodata_value 0 12 321 1 12 3 4 1 23 4 1 234 1234 1 2 3 4 2 1 2 3 ...
- Задать расширение текстового файла на asc (или поменять его).
- Полученный файл можно открыть в QGIS и экспортировать в любой другой растровый формат или работать прямо с ним.
Поддержка в разных ГИС
GDAL
При попытке конвертации исходного растра (например GeoTIFF) с неквадратной ячейкой, GDAL выдаст следующее предупреждение:
Producing Golden Surfer style file with DX and DY instead of CELL SIZE since the input pixels are non-square. Use the FORCE CELL SIZE = TRUE creation option to force use of DX for even though this will be distorted. Most ASCII Grid reader (ArcGIS included) do not support the DX and DY parameters
Поэтому конвертировать нужно так:
gdal_translate -co force_cellsize=true -of AAIGrid input.tif output.asc
GRASS
Все вышеприведенные варианты импортируются корректно.
В ГИС GRASS для импорта файлов в формате <ASCII Grid> рекомендуется использовать модуль r.in.gdal, для экспорта в этот формат --- модуль r.out.gdal. Кроме этого, есть также несколько устаревшие модули r.in.arc и r.out.arc.
QGIS
Все вышеприведенные варианты открываются корректно.
QGIS использует GDAL для работы с растровыми форматами. Все ПО использующее эту библиотеку абстракции (см. GRASS выше) не будет иметь проблем с примерами выше.
ArcGIS
Все вышеприведенные варианты открываются корректно.