[R-sig-Geo] cleaning up SpatialLines

ONKELINX, Thierry Thierry.ONKELINX at inbo.be
Fri Aug 5 10:50:02 CEST 2011


Thank you Dylan. Your solution works fine.

> -----Oorspronkelijk bericht-----
> Van: Dylan Beaudette [mailto:dylan.beaudette at gmail.com]
> Verzonden: donderdag 4 augustus 2011 0:46
> Aan: ONKELINX, Thierry
> CC: r-sig-geo at stat.math.ethz.ch
> Onderwerp: Re: [R-sig-Geo] cleaning up SpatialLines
> 
> On Wed, Aug 3, 2011 at 3:11 PM, ONKELINX, Thierry
> <Thierry.ONKELINX at inbo.be> wrote:
> > Dear all,
> >
> > I have a SpatialLinesDataFrame containing a lot of short line fragments. Many
> of them have exactly one other linefragment at one (or both) of their end
> vertices. I would like to merge those linefragments to that each line is at both
> end vertices either connected to at least two other lines or to no other line.
> >
> > Does someone has an effecient solution for this? Via R or via grass?
> >
> > I managed already to add a grouping variable to the data.frame. But I still
> need to find a way to merge the coordinates of the lines from the same Group.
> See the example below.
> >
> > Best regards,
> >
> > Thierry
> >
> > library(sp)
> > Raw <-
> > SpatialLines(list(Lines(list(Line(cbind(x = c(0, 0, 1), y = c(0, 1,
> > 1)))), ID = 1), Lines(list(Line(cbind(x = c(2, 2, 1), y = c(0, 1,
> > 1)))), ID = 2), Lines(list(Line(cbind(x = c(-2, -2), y = c(0, -1)))),
> > ID = 3)
> > ))
> > Raw <- SpatialLinesDataFrame(Raw, data.frame(ID = 1:3, Group =
> > c(1,1,2)))
> >
> > Result <-
> >        SpatialLines(list(Lines(list(Line(cbind(x = c(0, 0, 1, 2, 2), y
> > = c(0, 1, 1, 1, 0)))), ID = 1),
> >                        Lines(list(Line(cbind(x = c(-2, -2), y = c(0,
> > -1)))), ID = 2)
> >                ))
> > Result <- SpatialLinesDataFrame(Result, data.frame(ID = 1:2, Group =
> > c(1,2)))
> >
> >
> > _______________________________________________
> > R-sig-Geo mailing list
> > R-sig-Geo at r-project.org
> > https://stat.ethz.ch/mailman/listinfo/r-sig-geo
> >
> 
> Would something like this work:
> 
> # using your example from above ...
> library(rgeos)
> 
> # merge lines by group, manually
> Raw.u <- gLineMerge(Raw[Raw$Group == 1, ])
> 
> # automated approach, using spatial intersection as the criteria for splitting
> Raw.u <- gLineMerge(Raw)
> 
> ... note that IDs are lost in the second, automated approach.
> Iterating over IDs might be the safest approach.
> 
> Dylan



More information about the R-sig-Geo mailing list