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

Материал из GIS-Lab
Перейти к навигации Перейти к поиску
Нет описания правки
 
(не показано 36 промежуточных версий 4 участников)
Строка 1: Строка 1:
{{Статья|Черновик}}
{{Статья|Опубликована|asciigrid}}
Формат ASCIIGRID это форма представления регулярно-сетевых данных (растров). Исходно этот формат использовался как обменный в ГИС ARC/INFO (файлы в этом формате создавались командой GRIDASCII), сейчас его основная часть поддерживается всеми основными ГИС (QGIS, ArcGIS). Файл в формате ASCIIGRID представляет собой текстовый файл в котором содержимое разделяется на две части: 1) заголовок, где записывается общая информация о растре, его размеры, географическая привязка и т.д., 2) собственно данные, где записываются данные.


Данные в этом формате удобны прежде всего удобством быстрого визуального анализа содержимого. Разумеется, в этом формате не рекомендуется хранить большие растры.
{{Аннотация|Описание формата ASCII GRID и примеры особых его вариаций.}}


Поддерживается чтение и запись в этот формат с помощью GDAL.
ASCII GRID – формат представления растровых данных, исторически использовался как обменный формат в ГИС ARC/INFO (ASCII-файлы создавались командой GRIDASCII). В настоящее время его основная часть поддерживается всеми распространенными ГИС и, в том числе, большинством открытых/свободных (GRASS, QGIS, SAGA и т.д.). Многие из открытых ГИС используют [http://www.gdal.org/frmt_various.html#AAIGrid драйвер] GDAL, позволяющий как чтение, так и запись в ASCII GRID.
Файл в формате ASCII GRID представляет собой обычный текстовый файл, в котором содержимое разделяется на две части:
1) заголовок, где записывается общая информация о растре, его размеры, географическая привязка и т.д.;
2) секция собственно данных.  


'''Заголовок'''
Хранение данных в этом формате удобно, прежде всего, возможностью быстрого визуального анализа содержимого: много-мало данных, какие значения, есть ли nodata и т.д. Разумеется, в нём не рекомендуется хранить большие растры.


<code>ncols</code> - количество рядов (целочисленное);<br />
=== Заголовок ===
<code>nrows</code> - количество колонок (целочисленное);<br />
Заголовок в общем виде такой:
<code>xllcorner</code> - х-координата левого нижнего угла, долгота (десятичные градусы) или смещение на восток (метры) (целочисленное или с плавающей точкой)<br />
 
<code>yllcorner</code> - y-координата левого нижнего угла, широта (десятичные градусы) или смещение на север (метры) (целочисленное или с плавающей точкой)<br />
<code>ncols</code> - количество колонок (целочисленное);<br />
<code>nrows</code> - количество рядов (целочисленное);<br />
<code>xllcorner</code> - х-координата левого нижнего угла, долгота (десятичные градусы DD.D(D), DD:MM:SS не поддерживается) или смещение на восток (метры) (целочисленное или с плавающей точкой)<br />
<code>yllcorner</code> - y-координата левого нижнего угла, широта или смещение на север<br />
<code>cellsize</code> - линейный размер квадратной ячейки (целочисленное или с плавающей точкой)<br />
<code>cellsize</code> - линейный размер квадратной ячейки (целочисленное или с плавающей точкой)<br />
<code>nodata_value</code> - значение "нет данных", этот параметр не обязателен, он нужен для того, чтобы программное обеспечение автоматически делало все ячейки с этим значением прозрачными (целочисленное или с плавающей точкой).<br />
<code>nodata_value</code> - значение "нет данных", этот параметр не обязателен, он нужен для того, чтобы программное обеспечение автоматически делало все ячейки с этим значением прозрачными (целочисленное или с плавающей точкой). Часто используемое значение -9999, нецифровые значения, например "NA" использовать нельзя
 
=== Данные ===
 
Данные описываются просто как строка значений, разделенных пробелами. Разделение на строки не имеет значения (т.е. все данные могут быть в одной строке, а могут имитировать табличную структуру).


'''Данные'''
Начало отсчета при чтении данных - левый верхний угол (первая строка).


Данные описываются просто как строка значений разделенных пробелами. Разделение на строки не имеет значения (т.е. все данные могут быть в одной строке, а могут имитировать табличную структуру).
=== Примеры ===
Все примеры можно копировать и вставлять в текстовые файлы с расширением *.asc, и, независимо от кодировки, они должны работать. Чтобы получить такие же иллюстрации в QGIS, нужно:


'''Примеры'''
#добавить растр
#зайти в свойства\Стиль и изменить "Цветовая карта" на "Псевдоцвета"
#зайти в "Свойства" --> "Прозрачность" и удалить прозрачный пиксел со значением -9999, а также заменить в значении no data -9999 на 0.
==== Стандартный заголовок ====


[[Файл:Raster example 8x6.gif|400px|Пример растрового изображения в псевдоцветах]]
[[Файл:Raster example 8x6.gif|400px|Пример растрового изображения в псевдоцветах]]
Строка 39: Строка 53:
|}
|}


И непосредственно в формате ASCIIGRID
И непосредственно в формате ASCII GRID:
<pre>ncols  8
<pre>ncols  8
nrows        6
nrows        6
Строка 52: Строка 66:
-62 -9999 -805 -9999 -9999 -9999 -9999 -497  
-62 -9999 -805 -9999 -9999 -9999 -9999 -497  
-9999 -9999 332 1240 -9999 -9999 -9999 -9999</pre>
-9999 -9999 332 1240 -9999 -9999 -9999 -9999</pre>
==== Неквадратная ячейка ====


В примере приведенном выше, ячейка растра квадратная (т.е. высота равна широте). Если необходима прямоугольная ячейка, где высота не равна широте, вместо параметра cellsize можно использовать DX и DY, например:
В примере приведенном выше, ячейка растра квадратная (т.е. высота равна широте). Если необходима прямоугольная ячейка, где высота не равна широте, вместо параметра cellsize можно использовать DX и DY, например:


<pre>
<pre>
dx          11.600000000000
ncols        8
dy          5.025000000000</pre>
nrows        6
ASCIIGRID файлы с параметрами DX и DY вместо CELLSIZE не поддерживаются многими пакетами GIS (в т.ч. ArcGIS), но поддерживаются QGIS.
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</pre>
Файлы <ASCII Grid> с параметрами DX и DY вместо CELLSIZE не поддерживаются многими GIS (в т.ч. ArcGIS), но поддерживаются, например, QGIS/GRASS/SAGA за счёт использования GDAL.


Вот как будет выглядеть файл выше, где cellsize заменен на DX, DY:  
Вот как будет выглядеть файл выше, где cellsize заменен на DX, DY:  


[[Файл:Raster example 8x6 dx-dy.gif|400px|Пример растрового изображения в псевдоцветах]]
[[Файл:Raster example 8x6 dx-dy.gif|400px|Пример растрового изображения в псевдоцветах]]
==== Привязка по центру ячейки, а не углу ====
Альтернативой привязки по углу, т.е. использования <code>xllcorner</code> и <code>yllcorner</code> является привязка по центру ячейки, в этом случае нужно использовать <code>xllcenter</code> и <code>yllcenter</code>. Результатом, при неизменных координатах будет сдвиг растра на половину ячейки вниз и влево (по диагонали).
<pre>
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</pre>
Если взять один и тот же растр и заменить xllcenter,yllcenter на xllcorner,yllcorner, а сверху наложить сетку границ пикселей с первого растра, то это будет выглядеть так:
[[Файл:Raster example 8x6 xllcenter.gif|400px|Пример сдвига]]
=== Практика ===
Таким образом, чтобы создать растр размером m*n не используя никаких инструментов кроме текстового редактора и табличного процессора, нужно сделать следующее.
* Создать таблицу нужного размера в табличном процессоре (OpenOffice Calc, MS Excel и т.д.) или любом редакторе. Скопировать и вставить в текстовый документ. Заменить табуляции на пробелы.
* Прописать заголовок файла в описанном выше формате. Еще один пример для матрицы 360*180, представляющий массив с разрешением 1 градус на весь мир:
<pre>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 ...</pre>
* Задать расширение текстового файла на asc (или поменять его).
* Полученный файл можно открыть в QGIS и экспортировать в любой другой растровый формат или работать прямо с ним.
=== Поддержка в разных ГИС ===
==== GDAL ====
При попытке конвертации исходного растра (например GeoTIFF) с неквадратной ячейкой, GDAL  выдаст следующее предупреждение:
<pre>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</pre>
Поэтому конвертировать нужно так:
<pre>gdal_translate -co force_cellsize=true -of AAIGrid input.tif output.asc</pre>
==== GRASS ====
Все вышеприведенные варианты импортируются корректно.
В ГИС GRASS для импорта файлов в формате <ASCII Grid> рекомендуется использовать модуль [http://grass.gis-lab.info/grass64/manuals/html64_user/r.in.gdal.html r.in.gdal], для экспорта в этот формат --- модуль [http://grass.gis-lab.info/grass64/manuals/html64_user/r.out.gdal.html r.out.gdal]. Кроме этого, есть также несколько устаревшие модули [http://grass.gis-lab.info/grass64/manuals/html64_user/r.in.arc.html r.in.arc] и [http://grass.gis-lab.info/grass64/manuals/html64_user/r.out.arc.html r.out.arc].
==== QGIS ====
Все вышеприведенные варианты открываются корректно.
QGIS использует GDAL для работы с растровыми форматами. Все ПО использующее эту библиотеку абстракции (см. GRASS выше) не будет иметь проблем с примерами выше.
==== ArcGIS ====
Все вышеприведенные варианты открываются корректно.
=== Ссылки ===
* [http://en.wikipedia.org/wiki/Esri_grid Esri grid на Wikipedia]
* [http://daac.ornl.gov/MODIS/ASCII_Grid_GIS_Help.pdf Импорт формата в ArcGIS, ENVI, Arcview, GRASS]

Текущая версия от 12:57, 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

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

Ссылки