我知道从XYZ列表获取光栅(其中x和y是coords的数字向量,z是数字矩阵)我可以直接使用函数raster
。但是,如果我有一个光栅并且我想得到一个XYZ列表怎么办?是否已在光栅包上开发了一个简单的函数?
当然,我知道我可以建立一个索引光栅对象上不同级别的列表,但我发现我必须做一些反转来实现它,所以我想知道是否有一种简单有效的方法
感谢。
答案 0 :(得分:4)
您可以考虑使用rasterToPoints
:
library(raster)
r <- raster()
values(r) <- 1:ncell(r)
xyz <- rasterToPoints(r)
head(xyz)
x y layer
#[1,] -179.5 89.5 1
#[2,] -178.5 89.5 2
#[3,] -177.5 89.5 3
#[4,] -176.5 89.5 4
#[5,] -175.5 89.5 5
#[6,] -174.5 89.5 6
但请注意,该函数仅返回非NA
的单元格的值
而且这会返回一个矩阵;不是清单。但这可能更实际。否则请参阅@ Val的解决方案...
答案 1 :(得分:2)
有几种方法可以做到这一点,但这对我来说似乎很直接:
基本上,您使用xyFromCell
包中的函数raster
来获取单元格的坐标,然后将它们绑定到您想要的列表。
library(raster)
# testraster
r <- raster()
r[] <- runif(ncell(r))
#coordinates
coords <- xyFromCell(r,1:ncell(r))
#create list
xyzlist <- list(x=coords[,'x'],y=coords[,'y'],z=as.matrix(r))
这给了你:
> str(xyzlist)
List of 3
$ x: num [1:64800] -180 -178 -178 -176 -176 ...
$ y: num [1:64800] 89.5 89.5 89.5 89.5 89.5 89.5 89.5 89.5 89.5 89.5 ...
$ z: num [1:180, 1:360] 0.786 0.867 0.0361 0.0605 0.7276 ...
答案 2 :(得分:0)
我尝试了上述建议,但没有得到答案。所以,这是一个小调整和测试它的工作原理:
library(raster)
xy <- xyFromCell(dem,1:ncell(dem))
lns <- contourLines(x=sort(unique(xy[,1])), y=sort(unique(xy[,2])), z=t(as.matrix(dem)))
plot(dem)
for (i in 1:length(lns)) lines(lns[[i]]$x, lns[[i]]$y)