我知道,为了从和XYZ列表(其中x和y是坐标的数值向量,z是数值矩阵)中获取栅格,我可以直接使用函数raster。但是,如果我有一个光栅,我想得到一个XYZ列表怎么办?有没有一个简单的功能已经开发的栅格包?
当然,我知道我可以在栅格对象上建立一个索引不同级别的列表,但我发现我必须进行一些反向操作才能实现它,所以我想知道是否有一种简单而有效的方法。
谢谢。
发布于 2017-07-27 00:51:02
您可以考虑使用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的解决方案...
发布于 2017-07-26 00:30:05
有几种方法可以做到这一点,但这对我来说似乎很简单:
实际上,您可以使用raster包中的函数xyFromCell来获取单元格的坐标,然后将其绑定到所需的列表。
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 ...发布于 2018-02-12 14:11:52
我尝试了上面的建议,但没有得到想要的答案。所以,这里是一个小调整,并测试它的工作:
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)https://stackoverflow.com/questions/45290295
复制相似问题