4

I have these 3 lines:

line1 <- matrix(c(-1.81209, -1.80470, -1.80616, 55.68024, 55.67947,
                    55.67544), ncol=2)
line2 <- matrix(c(-1.80468, -1.80330, -1.79690, 55.68322, 55.68017,
                  55.67800), ncol=2)
line3 <- matrix(c(-1.79798, -1.80069, -1.78929, 55.68364, 55.68138,
                  55.67966), ncol=2)

line1L <- Line(line1)
line2L <- Line(line2)
line3L <- Line(line3)
my.lines <- Lines(list(line1L, line2L, line3L), ID="my.lines")
myLines <- SpatialLines(list(my.lines))

proj4string(myLines) <- CRS("+proj=longlat +datum=WGS84 +ellps=WGS84 +towgs84=0,0,0")
myLinesSpatial <- spTransform(myLines, CRS("+init=epsg:27700 +datum=WGS84"))

plot(myLinesSpatial)

enter image description here

I need to discard any part of any line, that falls within 100m of any other line. This will result in segments of each of the three lines being removed. How can I do this?

0

2 Answers 2

3

This can be done with the rgeos package, e.g. with gBuffer and gDifference:

library("rgeos")
library("rgdal")

line1 <- matrix(c(-1.81209, -1.80470, -1.80616, 55.68024, 55.67947,
                    55.67544), ncol=2)
line2 <- matrix(c(-1.80468, -1.80330, -1.79690, 55.68322, 55.68017,
                  55.67800), ncol=2)
line3 <- matrix(c(-1.79798, -1.80069, -1.78929, 55.68364, 55.68138,
                  55.67966), ncol=2)

lines <- SpatialLines(list(Lines(list(Line(line1)), ID="1"),
                           Lines(list(Line(line2)), ID="2"),
                           Lines(list(Line(line3)), ID="3")))
l <- SpatialLinesDataFrame(lines, data=data.frame(ID=paste(1:3)))
proj4string(l) <- CRS("+proj=longlat +datum=WGS84 +ellps=WGS84 +towgs84=0,0,0")
lt <- spTransform(l, CRS("+init=epsg:27700 +datum=WGS84"))

plot(lt, lty=3)
buf_list <- vector(3, mode="list")
res <- vector(3, mode="list")
for (i in 1:3) {
  ind <- setdiff(1:3, i)
  buf_list[[i]] <- gBuffer(lt[ind,], width=200)
  res[[i]] <- gDifference(lt[i, ], buf_list[[i]])
}
lapply(buf_list, plot, col="#FFFFFF90", add=TRUE)
lapply(res, plot, col="red", lwd=2, add=TRUE)

R plot

-1

iN ARCGIS buffer each line for the dataset and run each separately, take the separate shp outputs and combine into a single shp.

4
  • Unfortunately don't have acces to ARC, only R
    – luciano
    Commented Jun 4, 2013 at 15:56
  • The ideas in this reply are contained in "run ... separately" and "combine," but those instructions are too vague to be useful.
    – whuber
    Commented Jun 4, 2013 at 16:03
  • Whoever gave the downvote to @Lewis: if this is because title says 'in R', I added this in after, so please remove downvote
    – luciano
    Commented Jun 4, 2013 at 17:28
  • 2
    luciano, Although I did not apply the downvote, it seems possible it was made by someone wishing to provide some incentive for improving this (vague, ambiguous) answer and not just because it refers to ArcGIS. (Downvotes can be reversed after a post is edited: they are not permanent.)
    – whuber
    Commented Jun 4, 2013 at 18:10

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.