【问题标题】:How to extract rasters and points?如何提取栅格和点?
【发布时间】:2021-02-17 16:09:31
【问题描述】:

我正在研究 R 并创建预测图。在我的数据中,我有位置坐标。

如何提取我的栅格和点?

library(randomForest)
library(caret)
library(raster)
library(raster)
library(rgdal)

##-----load data 
data <- read.csv("0.10.coordinates.csv",sep=";", header = TRUE)
raster(swi.tif)

rsp.1<-raster("rsp.tif")
twi.1<-raster("twi.tif")
swi.1<-raster("swi.tif")

###load csv of 0-10cm sand,silt and clay %'s and lat/long (x,y) (in E: drive RF folder)
xy<-read.csv("0.10.coordinates.csv")

plot(swi.1)
plot(twi.1)
plot(swi.1)
plot(rsp.1)

stack(swi.1,rsp.1,twi.1,xy)
topo.brick<-brick(rsp.1,swi.1,twi.1,xy)

brick(rsp.1,twi.1,swi.1,data) 
df<-extract(data,rsp.1,twi.1,swi.1)`

Error in (function (classes, fdef, mtable)  : 
  unable to find an inherited method for function ‘extract’ for signature ‘"data.frame", "RasterLayer"’

【问题讨论】:

    标签: r extract raster


    【解决方案1】:

    查看?raster::extract 以了解需要哪些输入以及按什么顺序输入。在任何情况下,您都应该创建一个reproducible example.。 但是,这里有一个带有虚拟数据的示例:

    library(raster)
    
    # with raster -------------------------------------------------------------
    r <- s <- t <- raster()
    r[] <- 1:ncell(r)
    s[] <- sample(1:10,ncell(s),replace = T)
    t[] <- runif(ncell(t))
    
    stacked <- stack(r,s,t)
    
    #points
    xy <- cbind(-50, seq(-80, 80, by=20))
    
    #extract
    ex <- extract(stacked,xy, df=TRUE)
    

    如果提取时间过长,请查看terra::extract,或者更好的是exactextractr::exact_extract

    【讨论】:

    • 对这些空间数据对象使用dput 是一种糟糕的方法(而且它通常不是最理想的)
    • 对不起,我知道这不是空间数据的好方法,但我习惯要求 dput 数据。我编辑了我的答案。
    • 即使是非空间的,我认为创建一个最小示例比使用dput 更好、更清晰。
    【解决方案2】:

    查看 Elia 的示例,但根据我从您的代码中收集到的信息,您应该能够做到

    library(raster)
    xy <- read.csv("0.10.coordinates.csv")
    s <- stack("rsp.tif", "twi.tif", "swi.tif")
    d <- extract(s, xy)`
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-02-15
      • 2014-11-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-09
      • 1970-01-01
      相关资源
      最近更新 更多