Как получить значения для пикселя из geoTIFF в R?

Я пытаюсь получить компоненты RGB из файла geoTIFF в R. Цвета на изображении соответствуют различным типам классификации земель, и у меня есть легенда для каждого типа классификации в компонентах RGB.

Я использую растровую библиотеку. Мой код до сих пор

library(raster)
my.map = raster("mygeoTIFFfile.tif")

Вот информация о файле, когда он был прочитан:

> my.map[[1]]
class       : RasterLayer 
dimensions  : 55800, 129600, 7231680000  (nrow, ncol, ncell)
resolution  : 0.002777778, 0.002777778  (x, y)
extent      : -180.0014, 179.9986, -64.99861, 90.00139  (xmin, xmax, ymin, ymax)
coord. ref. : +proj=longlat +datum=WGS84 +no_defs +ellps=WGS84 +towgs84=0,0,0 
data source : filepah/filename.tif 
names       : filename.tif
values      : 11, 230  (min, max)

Конкретный файл geoTIFF, над которым я работаю, можно найти здесь:

http://due.esrin.esa.int/page_globcover.php

(просто нажмите "Globcover2009_V2.3_Global_.zip")

Может кто-нибудь, пожалуйста, помогите мне получить значение из одного пикселя из этого файла, пожалуйста?

2 ответа

Решение

Кажется, вы задаете не тот вопрос.

Чтобы получить значение для одного пикселя (ячейка сетки), вы можете использовать индексирование. Например, для ячейки с номерами 10 000 и 10 001 вы можете сделать r[10000:10001], Вы можете получить все значения, выполнив values(r), Но это не удастся для очень большого растра, как этот (если у вас нет много оперативной памяти).

Тем не менее, кажется, что вам нужно ответить на вопрос, как создать карту, сопоставив целочисленные значения ячеек с цветами RGB.

Давайте настроим пример растровых

 library(raster)
 r <- raster(nrow=4, ncol=4)
 values(r) <- rep(c(11, 14, 20, 30), each=4)

И некоторые соответствующие значения RGB

legend <- read.csv(text="Value,Label,Red,Green,Blue
11,Post-flooding or irrigated croplands (or aquatic),170,240,240
14,Rainfed croplands,255,255,100
20,Mosaic cropland (50-70%) / vegetation (grassland/shrubland/forest) (20-50%),220,240,100
30,Mosaic vegetation (grassland/shrubland/forest) (50-70%) / cropland (20-50%) ,205,205,102")

Вычислить цветовой код

legend$col <-  rgb(legend$Red, legend$Green, legend$Blue, maxColorValue=255)

настроить "таблицу цветов"

# start with white for all values (1 to 255)
ct <- rep(rgb(1,1,1), 255)
# fill in where necessary
ct[legend$Value+1] <- legend$col 
colortable(r) <- ct

сюжет

plot(r)

Вы также можете попробовать:

tb <- legend[, c('Value', 'Label')]
colnames(tb)[1] = "ID"
tb$Label <- substr(tb$Label, 1,10)
levels(r) <- tb

library(rasterVis)
levelplot(r, col.regions=legend$col, at=0:length(legend$col))

rasterToPoints() функция преобразует ваши растровые данные в матрицу, содержащую x, y, а также value за каждую точку. Это будет очень большим, но может быть то, что вы ищете, если вы хотите сделать широкий анализ данных.

library(raster)
map <- raster("GLOBCOVER_L4_200901_200912_V2.3.tif")
data <- rasterToPoints(map, progress="text")
head(data)

Другой вариант заключается в использовании extract() функция для возврата одной точки, передавая SpatialPoints объект с широтой / долготой. Если вам нужно только несколько отдельных точек данных, это будет намного быстрее, чем загрузка всего объекта в матрицу.

library(raster)
map <- raster("GLOBCOVER_L4_200901_200912_V2.3.tif")
extract(map, SpatialPoints(cbind(-123.3680884, 48.4252848)))
Другие вопросы по тегам