Как создать объект SpatialLine

Я использую пакет sp для создания объекта SpatialLines и сохранения его в списке объектов allLines. Позже мне нужно будет сравнить SpatialLines друг с другом, но это выходит за рамки текущего вопроса.

Пока мне нужно построить только SpatialLines объекта. Это последний код, основанный на ответе hrbrmstr:

library(sp)
allLines <- NULL
x <- c(1,5,4,8)
y <- c(1,3,4,7)
xy <- cbind(x,y)
xy.sp = sp::SpatialPoints(xy)
spl <- SpatialLines(list(Lines(Line(xy.sp), ID="a")))
allLines <- rbind(allLines,spl)

Сообщение об ошибке:

Ошибка в (функция (классы, fdef, mtable): не удалось найти унаследованный метод для функции «proj4string» для подписи «NULL»

Как решить эту проблему?


person Klausos Klausos    schedule 17.01.2015    source источник
comment
Вы так сильно отредактировали свой вопрос, что ответы ниже больше не совпадают. Думаю, в таком случае лучше задать новый вопрос. Или вы ожидаете, что я изменю свой ответ ниже с этим? В любом случае: нет метода rbind, который принимает NULL и SpatialLines в качестве аргументов.   -  person Edzer Pebesma    schedule 19.01.2015
comment
Почему вы пытаетесь связать NULL с объектом SpatialLines?   -  person jbaums    schedule 19.01.2015
comment
@jbaums: я просто хочу отслеживать все объекты SpatialLines (я буду использовать цикл FOR для добавления каждого нового 'spl' в список 'allLines'   -  person Klausos Klausos    schedule 19.01.2015
comment
@Edzer Pebesma: Хорошо, извините за это.   -  person Klausos Klausos    schedule 19.01.2015
comment
В этом случае, возможно, просто соберите их все в список (например, перебирая то, что вы перебираете с помощью lapply, или добавляя элементы во время вашего цикла for в уже существующий список. Только Spatial*DataFrames можно связать (с maptools::spRbind) - не SpatialLines объектов, как у вас.   -  person jbaums    schedule 19.01.2015
comment
@jbaums: Спасибо. Буду признателен, если вы опубликуете свой ответ здесь: stackoverflow.com/questions/28026204/   -  person Klausos Klausos    schedule 19.01.2015


Ответы (3)


Is:

library(sp)

x <- c(1,5,4,8)
y <- c(1,3,4,7)
SpatialLines(list(Lines(Line(cbind(x,y)), ID="a")))

## An object of class "SpatialLines"
## Slot "lines":
## [[1]]
## An object of class "Lines"
## Slot "Lines":
## [[1]]
## An object of class "Line"
## Slot "coords":
##      x y
## [1,] 1 1
## [2,] 5 3
## [3,] 4 4
## [4,] 8 7
## 
## 
## 
## Slot "ID":
## [1] "a"
## 
## 
## 
## Slot "bbox":
##   min max
## x   1   8
## y   1   7
## 
## Slot "proj4string":
## CRS arguments: NA

что вы ищете?

person hrbrmstr    schedule 17.01.2015

Возвращаясь к вашему последнему вопросу, попробуйте

library(sp)
as(xy.spdf, "SpatialLines")

или, чтобы создать объект Lines (что может быть не тем, что вам нужно),

as(xy.spdf, "SpatialLines")@lines[[1]]
person Edzer Pebesma    schedule 18.01.2015

Если вы пришли к этому вопросу, чтобы узнать, как создать группу из линий (как следует из названия функции, SpatialLines), вы можете найти примеры в библиотеке sp, расположенной в разделе "SpatialLines-class ".

Я нашел их пример немного странным, поэтому я отредактировал его, чтобы лучше понять, как я обычно вижу данные.

## Make some line segments from points 
## Note, l1a and l1b are a group of two lines
l1a <- rbind(c(1, 3), c(2,2) ,c(3,2))
l1b <- l1a + .05
l2 <- rbind(c(1,1), c(2,1.5), c(3,1))

## At this point it's just a matrix, and you can plot the points
plot(l1a, type="l", xlim=c(1,3.25), ylim=c(2,3.25), xlab="", ylab="")
lines(l1b)

линейный график

## Make convert the matrix objects to line objects
Sl1a <- Line(l1a)
Sl1b <- Line(l1b)
Sl2 <- Line(l2)

## Group the individual lines into "lines"
S1 <- Lines(list(Sl1a, Sl1b), ID="a")
S2 <- Lines(list(Sl2), ID="b")

## Now combine the line groups into a "spatial line object"
Sl <- SpatialLines(list(S1,S2))

## Plot the group, then (for illustration) add each line 
## separately with color to illustrate the groups
plot(Sl)
plot(SpatialLines(list(S1)), add=T, col="red")
plot(SpatialLines(list(S2)), add=T, col="blue")

## Examine the properties
summary(Sl)
plot(Sl, col = c("red", "blue"))

Оба графика пространственных линий выглядят следующим образом: введите здесь описание изображения

Обратите внимание, что объект матрицы имеет именованные строки в примере. Я не вижу никакой пользы в этом, и это сбивает с толку, потому что имена перекрываются, но не соответствуют указанным идентификаторам.

person geneorama    schedule 15.01.2019
comment
Обратите внимание, что исходный пример взят из ?sp::`SpatialLines-class` - person geneorama; 15.01.2019