2017-10-13 6 views
1

J'essaie de créer un objet SpatialLines vide. Avec des polygones, il est facile:Créer un objet lignes spatiales vides

SpatialPolygons(list()) 

Pour les lignes spatiales cela ne fonctionne pas:

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"’ 

Est-ce que quelqu'un sait comment il je pouvais créer un objet SpatialLines vide?

Solution

Je trouve une solution de contournement qui est peut-être pas la meilleure façon de le faire. Je génère une ligne spatiale sans longueur:

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

Répondre

1

Intéressant Q!

La seule façon que j'ai pu travailler autour était en créant une ligne fictive et l'enlever comme ceci:

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

Lorsque vous ajoutez votre ligne factice la longueur est retourné comme 1 comme prévu:

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