2013-10-04 3 views
0

Я пытаюсь следовать учебнику "Handling shape files in the spatstat package" by Adrian Baddeley, где форма как SpatialPolygonsDataFrame преобразуется в коллекцию owin'ов.Ошибка в as.owin Обработка файлов формы в пакете пакетной печати 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

Что вы получаете за класс (cregions) '? В вашем преобразовании может быть что-то непреднамеренное в «SpatialPolygons» или оттуда в «полигоны». –

ответ

0

я получил точно такое же сообщение об ошибке:

class(cregions[[1]]) 

[1] "SpatialPolygons" атр ("пакет") [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 Бэдделея рутина детализированы в «Обработка формы фи ле в 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)

работал для меня!