R:从生成的图像中裁剪 shapefile 边界

Posted

技术标签:

【中文标题】R:从生成的图像中裁剪 shapefile 边界【英文标题】:R: Clip a shapefile boundary out of a generated image 【发布时间】:2018-05-11 04:14:46 【问题描述】:

我生成了一张普通克里格预测的图像。我有一个边界线的 shapefile,我想以该 shapefile 的形状裁剪普通的克里格预测。

这是我用来生成图像的代码: 图像(OK.pred,loc=grid,axes=F,useRaster=TRUE)。我只想从图像中剪下一个对象——当我绘制它们时,它们会完美重叠。

这与这里的问题几乎相同,https://gis.stackexchange.com/questions/167170/is-it-possible-to-clip-a-shapefile-to-an-image-in-r,但我对 R 相对较新,并且完全迷失了 netcdf 文件部分。

我找到了一堆关于如何剪辑栅格的代码,但我就是不知道如何将图像保存到变量中,更不用说将其转换为栅格以进行剪辑了。任何帮助将非常感激!

 OK.pred<-krige.conv(gambling.geo,coords = gambling.geo$coords, data=gambling.geo$data, locations=grid,krige=krige.control(obj.model=gambling.vario.wls))

ordinarykrig = image(OK.pred,loc=grid,axes=F,useRaster=TRUE)

Macau <- readOGR("MAC_adm0.shp")

x <- crop(?...)

【问题讨论】:

【参考方案1】:

取自http://leg.ufpr.br/geoR/tutorials/kc2sp.R: 您需要先将克里金法输出转换为空间对象,然后才能将其传递给 mask()。以下应该做到这一点:

OK.pred<-krige.conv(gambling.geo,coords = gambling.geo$coords, data=gambling.geo$data, locations=grid,krige=krige.control(obj.model=gambling.vario.wls))
GT.s <- points2grid(SpatialPoints(as.matrix(grid)))
reorder <- as.vector(matrix(1:nrow(grid), nc=slot(GT.s, "cells.dim")[2])[,slot(GT.s, "cells.dim")[2]:1])
SGDF.s <- SpatialGridDataFrame(grid=GT.s, data=as.data.frame(OK.pred[1:2])[reorder,])
r<-raster(SGDF.s)
x<-mask(r, Macau)

【讨论】:

哇,这完美!非常感谢你,我一直在努力解决这个问题。

以上是关于R:从生成的图像中裁剪 shapefile 边界的主要内容,如果未能解决你的问题,请参考以下文章

使用边界框列表从图像中裁剪多个边界框

Python:沿边界从图像中裁剪区域

如何将 .OBJ 3D 模型自动裁剪为边界框?

裁剪图像后,如何找到新的边界框坐标?

从包含在 shapefile 边界内的 netcdf 文件中提取数据

模型训练 - 对象的裁剪图像 VS 带有边界框的更大图像