如何从R中的geoTIFF获取像素值?

如何从R中的geoTIFF获取像素值?,r,r-raster,geotiff,R,R Raster,Geotiff,我试图从R中的geoTIFF文件中获取RGB组件。图像上的颜色对应于不同的土地分类类型,并且我在RGB组件中为每个分类类型都有一个图例 我正在使用光栅库。到目前为止,我的代码是 library(raster) my.map = raster("mygeoTIFFfile.tif") 以下是文件读入后的信息: > my.map[[1]] class : RasterLayer dimensions : 55800, 129600, 7231680000 (nrow, nc

我试图从R中的geoTIFF文件中获取RGB组件。图像上的颜色对应于不同的土地分类类型,并且我在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文件可以在以下位置找到:

(只需点击“Globcover2009\u V2.3\u Global\u.zip”)

有人能帮我从这个文件中获取单个像素位置的值吗?

将把光栅数据转换成一个矩阵,其中包含每个点的
x
y
值。这将是非常大的,但如果你想对数据进行广泛的分析,这可能就是你想要的

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

看来你问错问题了

要获取单个像素(网格单元)的值,可以使用索引。例如,对于单元号10000和10001,您可以执行
r[10000:10001]
。 您可以通过执行
values(r)
来获取所有值。但是,对于这样一个非常大的光栅,这将失败(除非您有很多RAM)

然而,您需要回答的问题似乎是,如何通过将整数单元格值与RGB颜色匹配来制作贴图

让我们建立一个光栅示例

 library(raster)
 r <- raster(nrow=4, ncol=4)
 values(r) <- rep(c(11, 14, 20, 30), each=4)
您也可以尝试:

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))
tb
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))