在 R 中转换 SpatialPolygon 中的 CircleRange
Transform CircleRange in SpatialPolygon in R
一个非常常见的过程是使用 sp 包中的 Polygon
函数将线条和边框转换为 SpatialPolygons
对象。但是是否可以将其他对象 classes 转换为 SpatialPolygons
?我使用 dismo 中的函数 circles
从已知空间点创建具有特定半径距离的圆周。此函数 returns class CirclesRange
的一个对象。
circ<-circles(spcoords,d=100000)
class(circ)
[1] "CirclesRange"
attr(,"package")
[1] "dismo"
当我尝试将 CirclesRange
对象转换为 SpatialPolygons
时,出现以下错误:
Error: is.integer(pO) is not TRUE
然后,我又搜索了其他方法来改造这个对象,但一直没有成功。我认为首先有必要将"circ"转换为另一个class,然后尝试将其转换为SpatialPolygons
,但我找不到相关信息。
查看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))
一个非常常见的过程是使用 sp 包中的 Polygon
函数将线条和边框转换为 SpatialPolygons
对象。但是是否可以将其他对象 classes 转换为 SpatialPolygons
?我使用 dismo 中的函数 circles
从已知空间点创建具有特定半径距离的圆周。此函数 returns class CirclesRange
的一个对象。
circ<-circles(spcoords,d=100000)
class(circ)
[1] "CirclesRange"
attr(,"package")
[1] "dismo"
当我尝试将 CirclesRange
对象转换为 SpatialPolygons
时,出现以下错误:
Error: is.integer(pO) is not TRUE
然后,我又搜索了其他方法来改造这个对象,但一直没有成功。我认为首先有必要将"circ"转换为另一个class,然后尝试将其转换为SpatialPolygons
,但我找不到相关信息。
查看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))