作物SpatialPolygonsDataFrame(Crop for SpatialPolygon

2019-07-17 11:14发布

我有两个SpatialPolygonsDataFrame文件:DAT1,DAT2

extent(dat1)
class       : Extent 
xmin        : -180 
xmax        : 180 
ymin        : -90 
ymax        : 90 


extent(dat2)
class       : Extent 
xmin        : -120.0014 
xmax        : -109.9997 
ymin        : 48.99944 
ymax        : 60 

我要裁剪的文件DAT1使用DAT2的程度。 我不知道该怎么做。 我之前使用“裁剪”功能处理光栅文件。

当我使用这个功能,我目前的数据,出现以下错误:

> r1 <- crop(BiomassCarbon.shp,alberta.shp)
Error in function (classes, fdef, mtable)  : 

 unable to find an inherited method for function ‘crop’ for signature"SpatialPolygonsDataFrame"’

Answer 1:

精简方法添加2014年10月9日

raster::crop()可以用来裁剪Spatial* (以及Raster* )对象。

例如,这里是如何使用它来裁剪SpatialPolygons*对象:

## Load raster package and an example SpatialPolygonsDataFrame
library(raster) 
data("wrld_simpl", package="maptools")

## Crop to the desired extent, then plot
out <- crop(wrld_simpl, extent(130, 180, 40, 70))
plot(out, col="khaki", bg="azure2")

原来(现在仍然功能)答案:

rgeos功能gIntersection()使这个非常简单。

使用MNEL的漂亮例如,作为跳下点:

library(maptools)
library(raster)   ## To convert an "Extent" object to a "SpatialPolygons" object.
library(rgeos)
data(wrld_simpl)

## Create the clipping polygon
CP <- as(extent(130, 180, 40, 70), "SpatialPolygons")
proj4string(CP) <- CRS(proj4string(wrld_simpl))

## Clip the map
out <- gIntersection(wrld_simpl, CP, byid=TRUE)

## Plot the output
plot(out, col="khaki", bg="azure2")



Answer 2:

下面是如何与操作的示例rgeos使用世界地图作为一个例子

这来自罗杰Bivand在R-SIG-地理邮件列表 。 罗杰是的作者之一sp包。

使用世界地图作为一个例子

library(maptools)

data(wrld_simpl)

# interested in the arealy bounded by the following rectangle
# rect(130, 40, 180, 70)

library(rgeos)
# create  a polygon that defines the boundary
bnds <- cbind(x=c(130, 130, 180, 180, 130), y=c(40, 70, 70, 40, 40))
# convert to a spatial polygons object with the same CRS
SP <- SpatialPolygons(list(Polygons(list(Polygon(bnds)), "1")),
proj4string=CRS(proj4string(wrld_simpl)))
# find the intersection with the original SPDF
gI <- gIntersects(wrld_simpl, SP, byid=TRUE)
# create the new spatial polygons object.
out <- vector(mode="list", length=length(which(gI)))
ii <- 1
for (i in seq(along=gI)) if (gI[i]) {
  out[[ii]] <- gIntersection(wrld_simpl[i,], SP)
  row.names(out[[ii]]) <- row.names(wrld_simpl)[i]; ii <- ii+1
}
# use rbind.SpatialPolygons method to combine into a new object.
out1 <- do.call("rbind", out)
# look here is Eastern Russia and a bit of Japan and China.
plot(out1, col = "khaki", bg = "azure2")



Answer 3:

您不能使用在SP多边形对象作物。 您将需要创建表示DAT2的BBOX坐标的多边形,然后可以在rgeos库使用gIntersects。

编辑:这评论是相对于2012年的可用版本,这已不再是这种情况。



Answer 4:

看到了吗?作物

CORP(X,Y,文件名= “”,扣= '近',数据类型= NULL,...)

X光栅*对象

y范围对象,或者是从该一个范围对象可以被提取的任何对象(参见详细

您需要栅格化第一SpatialPolygon,利用rasterize功能从光栅包

我创建了一些数据来说明如何使用光栅化:

n <- 1000
x <- runif(n) * 360 - 180
y <- runif(n) * 180 - 90
xy <- cbind(x, y)
vals <- 1:n
p1 <- data.frame(xy, name=vals)
p2 <- data.frame(xy, name=vals)
coordinates(p1) <- ~x+y
coordinates(p2) <- ~x+y

如果我尝试:

 crop(p1,p2)
 unable to find an inherited method for function ‘crop’ for signature ‘"SpatialPointsDataFrame"’

现在,使用光栅化

r <- rasterize(p1, r, 'name', fun=min)
crop(r,p2)

class       : RasterLayer 
dimensions  : 18, 36, 648  (nrow, ncol, ncell)
resolution  : 10, 10  (x, y)
extent      : -180, 180, -90, 90  (xmin, xmax, ymin, ymax)
coord. ref. : +proj=longlat +datum=WGS84 
data source : in memory
names       : layer 
values      : 1, 997  (min, max)


文章来源: Crop for SpatialPolygonsDataFrame
标签: r crop spatial