Формат ASCIIGRID с примерами: различия между версиями

Материал из GIS-Lab
Перейти к навигации Перейти к поиску
Строка 11: Строка 11:
Хранение данных в этом формате удобно, прежде всего, возможностью быстрого визуального анализа содержимого: много-мало данных, какие значения, есть ли nodata и т.д. Разумеется, в нём не рекомендуется хранить большие растры.
Хранение данных в этом формате удобно, прежде всего, возможностью быстрого визуального анализа содержимого: много-мало данных, какие значения, есть ли nodata и т.д. Разумеется, в нём не рекомендуется хранить большие растры.


=== Общая информация ===
=== Заголовок ===
Структура файла в общем виде такова:
Структура файла в общем виде такова:



Версия от 12:55, 19 ноября 2016

Эта страница опубликована в основном списке статей сайта
по адресу 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

Все вышеприведенные варианты открываются корректно.

Ссылки