GIS-LAB

Географические информационные системы и дистанционное зондирование

Учебное руководство по GRASS

15. Растровая математика в r.mapcalc

<<< предыдущая глава | оглавление | следующая глава >>>

Модуль r.mapcalc используется для управления, анализа и создания растровых слоев с помощью арифметических операторов. Модуль может быть запущен из интерфейса или через оболочку GRASS. При работе с ним могут быть использованы существующие растровые слои, константы (целые значения или значения с плавающей точкой), а также векторные объекты. В GRASS данные “нет значения” и со значением равным нулю могут быть разделены следующим образом:

NULL=  NoData, без значения
Zero = 0 (например, точка замерзания по Цельсию)

Использование r.mapcalc предполагает знание форматов изображений, проекций карт и охвата текущего фрагмента (region). Перед использованием модуля рекомендуется ознакомиться с соотверствующей справочной информацией, поскольку модуль включает достаточно большой набор функций.

15.1 Операторы в r.mapcalc

Таблица 12: Операторы в r.mapcalc

Оператор

Значение

Тип

Приоритет

Экспонента

арифметический

5

%

Пропорция (по модулю)

арифметический

4

/

Деление

арифметический

4

*

Умножение

арифметический

4

+

Сложение

арифметический

3

-

Вычитание

арифметический

3

==

равно

логический

2

!=

Не равно

логический

2

>

Больше чем

логический

2

>=

Больше чем или равен

логический

2

<

Меньше чем

логический

2

<=

Меньше чем или равен

логический

2

&&

и

логический

1

||

или

логический

1

#

оператор-разделитель

арифметический

-

15.2 Функции в r.mapcalc

Таблица 13: Функции в r.mapcalc

FeatureMeaningType
abs(x) абсолютное значение x *1
atan(x) обратный тангенс x (результат в градусах) F2
atan(x,y) обратный тангенс y/x (результат в градусах) F
cos(x) косинус x (x в градусах) F
double(x) конвертация x в двойную точность плавующей точки F
eval([x,y,...,]z) оценка результатов перечисленного выражения, направление результатов в z  
exp(x) экспоненты x F
exp(x,y) x в степень y F
float(x) конвертация x в значение с плавующей точкой F
graph(x,x1,y1[x2,y2..]) конвертация x в y основываясь на точках диаграммы F
if Условие: *
if(x) 1 если x не ноль, иначе 0  
if(x,a) a если x не ноль, иначе 0  
if(x,a,b) a если x не ноль, иначе b  
if(x,a,b,c) a если x > 0, b если x = 0, c если x < 0  
int(x) конвертация x в целое значение [округление]  
isnull(x) проверка если x = NULL I
log(x) натуральный логарифм x F
log(x,b) логарифм x по основанию b F
max(x,y[,z...]) максимальное значение из перечисленных *
median(x,y[,z...]) медиана перечисленных *
min(x,y[,z...]) минимальное значение из перечисленных *
mode(x,y[,z...]) мода перечисленных *
not(x) 1 if x is zero, 0 otherwise  
rand(a,b) случайное значение между a и b  
round(x) округление x к ближайшему целому значению I3
sin(x) синус x (x в градусах) F
sqrt(x) квадратный корень x F
tan(x) тангенс x (x в градусах) F

1результат значение с плавающей точкой, если константа a является значением с плавающей точкой.

2 результат - значение с плавающей точкой.

3 результат - целочисленное значение.

15.3 Внутренние переменные в r.mapcalc

Таблица 14: Внутренние переменные в r.mapcalc

Переменная

Значение

row()

Текущий ряд плавающего окна

col()

Текущая колонка плавающего окна

x()

x плавающего окна

y()

Текущая y координата плавающего окна

ewres()

Текущее разрешение с востока на запад

nsres()

Текущее разрешение с севера на юг

null()

NULL значение

Для объяснения различной интрерпретации инструкций r.mapcalc приведем два простых примера:

# Растровый слой почв минус слой reclass умноженный на 2
New map = soils-reclass * 2

# Растровый слой почв минус слой reclass, результат умножить на 2
New map = "soils-reclass" * 2

15.4 Маскирование

Маскирование диапазона значений изображения – полезная операция для их предварительного анализа. С помощью команды g.copy можно использовать существующие растровые слои в качестве маски. Для того, чтобы слой был представлен в качестве маски, его необходимо назвать MASK (заглавные буквы). В качестве значений маски будут использованы все значения, которые не равны NoData (NULL).

Маски могут быть созданы с помощью модуля r.mapcalc:

# Простое копирование слоя в качестве маски:
r.mapcalc "MASK=map"

# Более сложная операция для создания маски,
# назначить маску только значениям 1 и 3:
r.mapcalc "MASK=if(map==1 || map==3,null(),map)"

В качестве примера, выполним анализ растровых данных из базы данных Spearfish, только для тех областей слоя geology, где в поле «владелец» есть какое-либо значение:

# Создать маску для областей с определенным значением:
r.mapcalc "mask_map=if(fields,1,null())"
g.copy rast=mask_map,MASK
# Проверка:
d.rast geology

Теперь должны быть видны только геологические районы, где в поле «владелец» есть какое-либо значение (т.е. есть зарегистрированный владелец).

Необходимо принять во внимание, что созданная маска будет использоваться для всех операций анализа растровых данных, но не будет использоваться для анализа векторных. Если маска больше не испольуется, слой MASK может быть удален (см. главу 9.6.2). В случае если маска создана, комментарий в системной оболочки [Raster MASK present] будет об этом напоминать.

<<< предыдущая глава | оглавление | следующая глава >>>

Обсудить в форуме Комментариев — 3

Последнее обновление: March 23 2009