我正在尝试按照教程"Handling shape files in the spatstat package" by Adrian Baddeley,其中SpatialPolygonsDataFrame的形状转换为owin的集合。
形状的关键属性总结如下,我的目标是测试点集合是否在多边形集合内。
摘要(形状)
Object of class SpatialPolygonsDataFrame
Coordinates:
min max
x -43.13679 -42.95351
y -22.98961 -22.85380
Is projected: FALSE
proj4string : [+proj=longlat +ellps=GRS80 +no_defs]
这里有907个多边形是建议的转换
cp <- as(shape, "SpatialPolygons")
cregions <- slot(cp, "polygons")
cregions <- lapply(cregions, function(x) { SpatialPolygons(list(x)) })
cwindows <- lapply(cregions, as.owin)
但我得到了错误
Error in as.owin.default(X[[1L]], ...) : Can't interpret W as a window
有任何想法吗?谢谢
我收到了完全相同的错误消息:
class(cregions[[1]])
[1]“SpatialPolygons”attr(,“package”)[1]“sp”
我认为它与拓扑中的错误有关。我得到它与这个(abeit自制)功能:
fixholes = function(sp.obj) {
require(rgeos)
require(stringr)
if(!inherits(sp.obj, "SpatialPolygons")) stop("Input object must be of class SpatialPolygons")
pls = slot(sp.obj, "polygons")
pls1 = lapply(pls, checkPolygonsHoles)
slot(sp.obj, "polygons") = pls1
return(sp.obj)
}
然后我创建了一个函数来使用Adrian Baddeley在“处理spatstat包中的形状文件”中详细介绍的例程:
spdf2owin = function(spdf) {
cp <- as(spdf, "SpatialPolygons")
cregions <- slot(cp, "polygons")
cregions <- lapply(cregions, function(x) { fixholes(SpatialPolygons(list(x))) })
cwindows <- lapply(cregions, as.owin)
ch <- hyperframe(window=cwindows)
ch <- cbind.hyperframe(ch, spdf@data)
return(ch)
}
例如,
cregions = spdf2owin(columbus)
为我工作!
必须加载包maptools
才能将sp
类转换为spatstat
类。
as.owin
是spatstat
中定义的泛型函数。 as.owin
提供了spatstat
的一些方法; maptools
提供了其他方法。为了将SpatialPolygons
转换为owin
,必须使用as.owin.SpatialPolygons
方法,这是由maptools
提供的。如果未加载maptools
,则调用as.owin
将发送到as.owin.default
并提供您收到的错误消息。