首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从栅格对象获取XYZ列表

从栅格对象获取XYZ列表
EN

Stack Overflow用户
提问于 2017-07-25 05:22:34
回答 3查看 3.3K关注 0票数 3

我知道,为了从和XYZ列表(其中x和y是坐标的数值向量,z是数值矩阵)中获取栅格,我可以直接使用函数raster。但是,如果我有一个光栅,我想得到一个XYZ列表怎么办?有没有一个简单的功能已经开发的栅格包?

当然,我知道我可以在栅格对象上建立一个索引不同级别的列表,但我发现我必须进行一些反向操作才能实现它,所以我想知道是否有一种简单而有效的方法。

谢谢。

EN

回答 3

Stack Overflow用户

发布于 2017-07-27 00:51:02

您可以考虑使用rasterToPoints

代码语言:javascript
复制
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的解决方案...

票数 5
EN

Stack Overflow用户

发布于 2017-07-26 00:30:05

有几种方法可以做到这一点,但这对我来说似乎很简单:

实际上,您可以使用raster包中的函数xyFromCell来获取单元格的坐标,然后将其绑定到所需的列表。

代码语言:javascript
复制
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))

这为您提供了:

代码语言:javascript
复制
> 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
EN

Stack Overflow用户

发布于 2018-02-12 14:11:52

我尝试了上面的建议,但没有得到想要的答案。所以,这里是一个小调整,并测试它的工作:

代码语言:javascript
复制
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)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45290295

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档