在R中的SpatialPolygon中转换CircleRange

时间:2016-04-18 14:17:25

标签: r polygon spatial sp

一个非常常见的过程是使用 sp 包中的SpatialPolygons函数将线条和边框转换为Polygon个对象。但是可以将其他对象类转换为SpatialPolygons吗?我使用 dismo 中的函数circles创建一个距离已知空间点的特定半径距离的圆周。此函数返回类CirclesRange的对象。

circ<-circles(spcoords,d=100000)

class(circ)
[1] "CirclesRange"
attr(,"package")
[1] "dismo"

当我尝试将CirclesRange对象转换为SpatialPolygons时,会发生以下错误:

Error: is.integer(pO) is not TRUE

然后,我已经搜索了其他方法来转换这个对象,但我还没有成功。我认为首先有必要将“circ”转换为另一个类,然后尝试将其转换为SpatialPolygons,但我找不到相关信息。

1 个答案:

答案 0 :(得分:3)

查看str(circ),所需的SpatialPolygons对象已经是创建对象的一部分。您只需运行circ@polygons即可提取多边形。以下是基于meuse数据集的示例代码。

## sample data
data(meuse)
coordinates(meuse) <- ~ x + y
proj4string(meuse) <- CRS("+init=epsg:28992")

## circle around the first 'meuse' feature (top-right corner)
circ <- circles(meuse[1, ], d = 1000, lonlat = FALSE)

poly <- circ@polygons
proj4string(poly) <- proj4string(meuse)

## display data
library(latticeExtra)

spplot(meuse, "elev", scales = list(draw = TRUE),
       col.regions = topo.colors(100), key.space = "right") + 
  as.layer(spplot(poly, fill = "transparent", lwd = 2))

spplot