# [R-sig-Geo] split/divide SpatialLines (sp) into n segments

Roger Bivand Roger.Bivand at nhh.no
Wed Apr 10 10:12:38 CEST 2013

```On Tue, 9 Apr 2013, Omphalodes Verna wrote:

> Dear list!
>
> I would like to split/divide SpatialLines into n segments. Is there any function to do this in R? Or does somebody know the solution for that?
>
> Here is example of SpatialLines from the sp vignette:
>
> library(sp)
> Sl = SpatialLines(list(Lines(list(Line(cbind(c(1,2,3),c(3,2,2)))), ID="a")))
> plot(Sl)
> coordinates(Sl)

Assuming the line segents are to be Lines objects:

library(sp)
Sl = SpatialLines(list(Lines(list(Line(cbind(c(1,2,3),c(3,2,2)))),
ID="a")))
cSl <- coordinates(Sl)
cSl
in_nrows <- lapply(cSl, function(x) sapply(x, nrow))
outn <- sapply(in_nrows, function(y) sum(y-1))
res <- vector(mode="list", length=outn)
i <- 1
for (j in seq(along=cSl)) {
for (k in seq(along=cSl[[j]])) {
for (l in 1:(nrow(cSl[[j]][[k]])-1)) {
res[[i]] <- cSl[[j]][[k]][l:(l+1),]
i <- i + 1
}
}
}
res1 <- vector(mode="list", length=outn)
for (i in seq(along=res))
res1[[i]] <- Lines(list(Line(res[[i]])), as.character(i))
outSL <- SpatialLines(res1)

It would be possible to use *apply functions instead of the loops, but the
loops may make the operations plainer. To show that we can reconstruct the
input object (not the same ID, but the geometry is OK):

library(rgeos)
coordinates(gLineMerge(outSL))

Hope this helps,

Roger

>
> Thanks to all, OV
>
> _______________________________________________
> R-sig-Geo mailing list
> R-sig-Geo at r-project.org
> https://stat.ethz.ch/mailman/listinfo/r-sig-geo
>

--
Roger Bivand
Department of Economics, NHH Norwegian School of Economics,
Helleveien 30, N-5045 Bergen, Norway.
voice: +47 55 95 93 55; fax +47 55 95 95 43
e-mail: Roger.Bivand at nhh.no
```