【问题标题】:Get XYZ list from Raster object从 Raster 对象获取 XYZ 列表
【发布时间】:2017-07-24 21:22:33
【问题描述】:

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

当然,我知道我可以在光栅对象上建立一个索引不同级别的列表,但是我发现我必须做一些反转来实现它,所以我想知道是否有一个简单有效的方法.

谢谢。

【问题讨论】:

  • 这应该可以:df <- as.data.frame(myrast, xy=TRUE)
  • @LoBu,我说的是输出一个具有 3 个级别的列表:输出(列表)$x(数字向量,经度)$y(数字向量,纬度)$z(数字具有长度(x)行和长度(y)列的矩阵
  • 嗨。对不起,但我不知道我是否正确:你想要纬度和经度作为向量和图像作为矩阵?

标签: r raster r-raster


【解决方案1】:

您可以考虑使用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 的解决方案...

【讨论】:

    【解决方案2】:

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

    基本上,您使用 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 ...
    

    【讨论】:

      【解决方案3】:

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

      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)
      

      【讨论】:

      • 欢迎来到 StackOverflow。仅包含代码的答案往往会被标记为删除,因为它们是“低质量”的。请阅读有关回答问题的帮助部分,然后考虑在您的回答中添加一些评论。
      猜你喜欢
      • 2011-07-31
      • 2014-09-28
      • 2019-05-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多