R' automap'如何创建与AutoKrige一起使用的预测网格(例如meuse.grid)?

时间:2017-07-31 17:17:32

标签: r gis kriging gstat automap

我很难创建一个预测网格(用于new_data参数)以与automap包中的autoKrige函数一起使用。

我已经尝试按照这篇文章(How to subset SpatialGrid using SpatialPolygon)中的步骤操作,但收到以下错误: x @ coords中的错误[i ,, drop = FALSE]:   (下标)逻辑下标太长 另外:警告信息: 1:在min(x)中:min没有非缺失参数;返回Inf 2:在max(x)中:max没有非缺失参数;返回-Inf

我的(有限的)理解是错误与没有非缺失参数有关,因为它是一个空网格。这很好 - 我想要的只是一个由shapefile中的多边形约束的空网格。

以下是我正在使用的代码:

     shp <-  shapefile("C://path/path/Tobay_Box2.shp")
         shp <-  spTransform (shp,"+proj=utm +ellps=WGS84 +datum=WGS84")
         grid <-        GridTopology(cellcentre.offset=c(731888.0,7457552.0),cellsize=c(2,2),cells.dim=c(122,106))
         grid <- SpatialPixelsDataFrame(grid,
                              data=data.frame(id=1:prod(122,106)),
                              proj4string=CRS("+proj=utm +ellps=WGS84 +    datum=WGS84"))
plot(grid)

[请参阅dropbox文件夹&#39; Grid.png&#39;]

bound <- shp@polygons
bound <- SpatialPolygons(bound, proj4string=CRS("+proj=utm +ellps=WGS84 +datum=WGS84"))
plot(bound)

[见dropbox文件夹&#39; Boundary plot.png&#39;]

clip_grid <- grid[!is.na(over(grid, bound)),]

到目前为止没有任何错误或警告。但是......然后......

plot(clip_grid)

Error in x@coords[i, , drop = FALSE] : 
  (subscript) logical subscript too long
In addition: Warning messages:
1: In min(x) : no non-missing arguments to min; returning Inf
2: In max(x) : no non-missing arguments to max; returning -Inf

或尝试通过autokrige为new_data参数传递对象clip_grid:

PerInkrg <- autoKrige (PerArIn~1, hs1, clip_grid)

Error in predict.gstat(g, newdata = newdata, block = block, nsim = nsim,  : 
  value not allowed for: %s %s newdata empty or only NA's

我使用非裁剪网格(对象=网格)没有问题。

简而言之,我需要这个[请参阅dropbox文件夹&#39; Autokrig plot&#39;]但插值表面被约束(剪裁)到&#39; Torbay_Box2.shp&#39;

P.S。我尝试将我的情节图片和链接添加到我在此处寻求帮助之前使用的其他帖子以及指向我的数据的链接,但作为新用户,我没有足够的声誉来做到这一点 - 抱歉!

可以在Dropbox.com/sh/yqg20z1ibl3h4aa/AACJnHoEuP-S5fTvAXxsnY1za?dl=0

上找到数据和图表。

1 个答案:

答案 0 :(得分:0)

我现在设法生成一个autoKrige [plot],它被屏蔽到Torbay_Box2边界的范围。但是,我从未通过创建像meuse.grid这样的预测网格以“传统”方式实现这一点。结果是一样的,所以现在我很高兴,但我仍然希望最终以传统的方式做到这一点。

以下是我欺骗它的方式:

 # Load sample box extent

bx.data <- readOGR (".", "Tobay_Box2")
bx <- spTransform(bx.data,"+proj=utm +ellps=WGS84 +datum=WGS84") #transformsto UTM projection
str(bx)

# Set the boundary extent with that of sample box extent

hs1@bbox <- bx@bbox
#create an empty grid
grd              <- as.data.frame(spsample(hs1, "regular", n=50000))                                                                                                
names(grd)       <- c("X", "Y")
coordinates(grd) <- c("X", "Y")
gridded(grd)     <- TRUE  # Create SpatialPixel object
fullgrid(grd)    <- TRUE  # Create SpatialGrid object

plot(hs1)
plot(grd, pch = ".", add = T)
proj4string(grd) <- proj4string(hs1)

然后我使用空网格作为新数据执行IDW插值,将输出转换为栅格,将其剪切到Torbay_Box2边界,然后将其转换为我传递的SpatialPixelDataFrame作为autoKrige的new_data参数:

# For PerArIn (% area inhabited) 
#interpolate the grid cells using all points and a power value of 2 

hs1.idw <- gstat::idw(PerArIn ~ 1, hs1, newdata=grd, idp=2.0)



# Convert to raster object then clip to Hollicombe sample box

r       <- raster(hs1.idw)
r.m     <- mask(r, bx)


#Convert and set as prediction grid for Kriging

grd<- rasterToPoints(r.m, spatial=TRUE)
gridded(grd) <- TRUE
grd <- as (grd, "SpatialPixels")

#en voila!
PerInkrg <- autoKrige (PerArIn~1, hs1,grd)