2017-10-13 137 views
1

我想创建一个空的SpatialLines对象。对于多边形很容易:创建空的空间线对象

SpatialPolygons(list()) 

对于空间线这不起作用:

SpatialLines(LinesList = list()) 
Error in bb[1, ] : incorrect number of dimensions 
SpatialLines(LinesList = Lines(list(),ID = "a")) 
Error in as.list.default(X) : 
    no method for coercing this S4 class to a vector 
SpatialLines(LinesList = Lines(slinelist = Line(coords = cbind(x = c(), y = c())), ID = c())) 
Error in (function (classes, fdef, mtable) : 
    unable to find an inherited method for function ‘coordinates’ for signature ‘"NULL"’ 

是否有人知道是怎么回事,我可以创建一个空的对象SpatialLines?

解决方法

我找到了一个解决办法,但这可能不是这样做的最佳方式。我生成一个没有长度的空间线:

SpatialLines(list(Lines(Line(coords = cbind(x = c(0,0), y = c(0,0))), ID = "A"))) 

回答

1

有趣的Q!

我是能够解决的唯一途径是通过创建一个虚拟的线,并像这样将其取出:

sl <- SpatialLines(LinesList = list(Lines(Line(matrix(0, ncol = 2)), ID = NA))) 
sl <- sl[0] 
length(sl) 
# [1] 0 

当加入您的虚拟线预计长度返回为1:

length(rbind.SpatialLines(sl, SpatialLines(list(Lines(Line(coords = cbind(x = c(0,0), 
                      y = c(0,0))), 
                  ID = "A"))))) 
# [1] 1