2013-10-04 31 views
0

我試圖按照教程"Handling shape files in the spatstat package" by Adrian Baddeley將SpatialPolygonsDataFrame的形狀轉換爲owin的集合。as.owin中的錯誤處理spatstat包中的形狀文件R

形狀的關鍵屬性總結如下,我的目標是測試點的集合是否在多邊形集合內。

摘要(形狀)

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 

任何想法?由於

+0

你會得到什麼'class(cregions)'?在轉換爲'SpatialPolygons'或從那裏轉換爲'polygons'時,可能會有一些意想不到的情況。 –

回答

0

我得到了完全相同的錯誤消息:

class(cregions[[1]]) 

[1] 「SpatialPolygons」 ATTR( 「包」) [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) 
} 

然後,我創建了一個功能,採用阿德里安·巴德利在「處理形狀科幻萊在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, [email protected]) 
    return(ch) 
} 

例如,

cregions = spdf2owin(columbus)

爲我工作!