0

我正在尝试按照Adrian Baddeley 的教程“处理 spatstat 包中的形状文件”,其中作为 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

有任何想法吗?谢谢

4

2 回答 2

0

我得到了完全相同的错误信息:

class(cregions[[1]])

[1]“空间多边形”属性(“包”)[1]“sp”

我认为这与拓扑错误有关。我让它与这个(虽然是自制的)功能一起工作:

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)
}

然后我创建了一个函数来使用“处理 spatstat 包中的 shapefile”中详述的 Adrian Baddeley 例程:

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)

为我工作!

于 2014-02-18T21:05:20.823 回答
0

maptools必须加载包才能将sp类转换为spatstat类。

as.owin是在 中定义的通用函数spatstatas.owin中提供了一些方法spatstat;中提供了其他方法maptools。为了将 a 转换SpatialPolygonsowin,该方法as.owin.SpatialPolygons必须可用,这是由 提供的maptools。如果maptools未加载,则调用as.owin将发送到as.owin.default并给出您收到的错误消息。

于 2018-09-01T08:57:52.920 回答