使用R?随机采样栅格


13

是否有一种直接采样栅格的简单方法,以便过程的输出是栅格?

我使用的是我在r-sig-geo 列表中找到的示例,并且我还尝试sampleRandomraster软件包中的功能。这两种方法都产生输出,我不确定如何转换成栅格。搜索“ SpatialPointsDataFrame栅格”的几种组合后,我找不到方法。

library(raster)

# read in raster
rasterSource <- 'landsat.TIF'
r <- raster(rasterSource)

# convert to spatial points data frame
r.spgrd<-as(r,"SpatialPointsDataFrame") 

# elminate NA values
r.spgrd = r.spgrd[!is.na(r.spgrd[[1]]),] 

# sample points
selectedPoints = sample(1:length(r.spgrd[[1]]), 1000)
r.sampled = r.spgrd[selectedPoints,]

# try to make spgrd into a raster
r.test <- raster(r.sampled)

运行时,r.test我得到输出:

class       : RasterLayer 
dimensions  : 10, 10, 100  (nrow, ncol, ncell)
resolution  : 28617, 14766  (x, y)
extent      : 1838505, 2124675, 2328685, 2476345  (xmin, xmax, ymin, ymax)
coord. ref. : +proj=aea +lat_1=29.5 +lat_2=45.5 +lat_0=23 +lon_0=-96 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs +ellps=WGS84 +towgs84=0,0,0 
values      : none

因此,以下尝试写入栅格的行将产生此消息:

# write out as ascii file
writeRaster(r.test, filename="test1.ASC", datatype="ascii", overwrite=TRUE)

Error: hasValues(x) is not TRUE

我的主要目标是在采样过程之后生成某种类型的栅格。我也可以更改栅格中的值(我不确定该怎么做)。

Answers:


21

您可以从Raster包装插图 5.2节改编示例。这是一种方法:

r <- raster(ncol=30,nrow=20)
r[] <- 1:(30*20)              # Raster for testing
#plot(r)                      # (If you want to see it)
r[runif(30*20) >= 0.30] <- NA # Randomly *unselect* 70% of the data
plot(r)

栅格选择


10
这个答案使我想学习R ...
SaultDon

2
这可能非常明显,但是我花了一些时间才意识到可以用引用任何单元格的值r[r "condition"]。所以,如果你想要设置的栅格的全部价值1001你可以写r[r == 100] <- 1。感谢@whuber-非常有用的例子!
djq 2011年

@whuber是否提示错误:hasValues(x)不是TRUE的提示?
csheth

2

您可以使用以下sampleRandom功能:

library(raster)
r <- raster(ncol=30,nrow=20)
r[] <- 1:ncell(r)

x <- sampleRandom(r, ncell(r)*.3, asRaster=TRUE)
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.