Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 使用空间多边形数据帧裁剪光栅层_R_R Raster_Spatial Data Frame - Fatal编程技术网

R 使用空间多边形数据帧裁剪光栅层

R 使用空间多边形数据帧裁剪光栅层,r,r-raster,spatial-data-frame,R,R Raster,Spatial Data Frame,我有一个光栅网格,我想根据“maptools”包数据提供的世界地图的陆地边界进行裁剪。通过做一些研究,我发现我必须使用crop函数,然后是mask函数,但是我得到了一条错误消息 这是我的密码: # load the worldmap SpatialPolygonDataFrame library(maptools) data(wrld_simpl) ll=CRS("+init=epsg:4326") world<-spTransform(wrld_simpl, ll) ext<-ex

我有一个光栅网格,我想根据“maptools”包数据提供的世界地图的陆地边界进行裁剪。通过做一些研究,我发现我必须使用crop函数,然后是mask函数,但是我得到了一条错误消息

这是我的密码:

# load the worldmap SpatialPolygonDataFrame
library(maptools)
data(wrld_simpl)
ll=CRS("+init=epsg:4326")
world<-spTransform(wrld_simpl, ll)
ext<-extent(-10.417,31.917,34.083,71.083)
# get only region covering europe 
world@bbox<-as.matrix(ext)


# create the origin in WGS84 CRS
ll = CRS("+init=epsg:4326") 
origin = SpatialPoints(cbind(7,40),ll) 
# create the raster grid 
grid = raster() 
# define extent and resolution
e = extent(5,18,40,50)
extent(grid)<-e
res(grid)=c(0.08,0.08) 
# fill the raster values
grid[] = runif(1:20250)

# crop the grid with worldmap to erase sea areas
test<-crop(grid,world)
rasterize(world,test)
Found 246 region(s) and 3768 polygon(s)
Error in if (x1a > rxmx) { : argument is of length zero

裁剪不会像您所想的那样裁剪到国家多边形。事实上,cropgrid,world并没有真正收获任何东西,因为world的范围大于grid的范围。您可以通过绘制测试来检查这一点。它和网格一样

相反,在grid[]=runif1:ncellgrid之后,您可以执行以下操作:

# we're going to make 3 plots
par(mfrow=c(1,3))

# crop the Worldmap to grid 
worldcrop<-crop(world, grid)
plot(worldcrop)

# rasterize output, give cells value of NAME(seas are NA)
worldcropr = rasterize(worldcrop,grid, field='NAME', fun='first')
plot(worldcropr)

# mask random grid by worldcropr
gridmask = mask(x=grid, mask=worldcropr)
plot(gridmask)

# number of land pixels:
sum(!is.na(gridmask@data@values))

# number of sea pixels:
sum(is.na(gridmask@data@values))
我相信这就是你想要的。