Спутник ДЗЗ
2.87K subscribers
2.21K photos
124 videos
175 files
1.95K links
Человеческим языком о дистанционном зондировании Земли.

Обратная связь: @sputnikDZZ_bot
加入频道
Доступ к ячейкам данных

Для доступа к значениям ячеек (пикселей) растровых данных в пакете terra есть несколько функций.

values() используется, чтобы получить все значения растра или их часть. Например, значения одной строки или значения прямоугольного блока ячеек:

r <- rast("dem.tif")
v <- values(r)

v[1000:1005, ]
# [1] 125.9172 126.2032 126.4972 126.7908 127.0973 127.3987

values(r, row=100, nrow=1, col=35, ncol=6)
# Layer_1
# [1,] 112.4701
# [2,] 112.5410
# [3,] 112.6132
# [4,] 112.6909
# [5,] 112.7424
# [6,] 112.7527


Обратите внимание, что значения растра представлены в виде вектора (одномерного массива). Для доступа к значениям ячеек используется стандартная индексация R.

Можно сначала узнать номер ячейки по номеру строки и столбца, при помощи cellFromRowCol, а затем получить значения выбранных ячеек:

cells <- cellFromRowCol(r, 100, 35:40)
cells
# [1] 288719 288720 288721 288722 288723 288724
r[cells]
# Layer_1
# 1 112.4701
# 2 112.5410
# 3 112.6132
# 4 112.6909
# 5 112.7424
# 6 112.7527


Получим координаты выбранных ячеек

xy <- xyFromCell(r, cells)
# x y
# [1,] -77.84894 39.49693
# [2,] -77.84890 39.49693
# [3,] -77.84887 39.49693
# [4,] -77.84884 39.49693
# [5,] -77.84881 39.49693
# [6,] -77.84878 39.49693


Получить значения ячеек можно по их номерам (cells) или координатам (xy), с помощью функции extract:

extract(r, cells)
extract(r, xy)
# Layer_1
# 1 112.4701
# 2 112.5410
# 3 112.6132
# 4 112.6909
# 5 112.7424
# 6 112.7527


Координаты и значения всех ячеек растра в виде таблицы:

dt <- as.data.frame(r, xy=TRUE)


Функцию values можно использовать для замены значений в объекте SpatRaster или для присвоения новых значений ячейкам. Если вы заменяете значение в объекте SpatRaster, созданном на основе файла, то связь с этим файлом теряется, поскольку теперь значения объекта отличаются от файла

r
# class : SpatRaster
# dimensions : 1620, 2916, 1 (nrow, ncol, nlyr)
# resolution : 3.08642e-05, 3.08642e-05 (x, y)
# extent : -77.85, -77.76, 39.45, 39.5 (xmin, xmax, ymin, ymax)
# coord. ref. : lon/lat WGS 84 (EPSG:4326)
# source : dem.tif
# name : Layer_1
# min value : 87.12177
# max value : 158.5774

values(r)[1000:1005, ] <- 0
r
# class : SpatRaster
# dimensions : 1620, 2916, 1 (nrow, ncol, nlyr)
# resolution : 3.08642e-05, 3.08642e-05 (x, y)
# extent : -77.85, -77.76, 39.45, 39.5 (xmin, xmax, ymin, ymax)
# coord. ref. : lon/lat WGS 84 (EPSG:4326)
# source(s) : memory
# name : Layer_1
# min value : 0.0000
# max value : 158.5774


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

#R
Из полученного растра исчезнут единицы. Если задать порог численности равным 9, то исчезнут все скопления, кроме троек (и, естественно, нулей).

#R

*Гонсалес Р., Вудс Р. Цифровая обработка изображений. 3-е издание, исправленное и дополненное. — М.: Техносфера, 2012. — 1104 с.