4 votos

eliminar segmentos de líneas en R

Tengo estas 3 líneas:

 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)
 

introduzca la descripción de la imagen aquí

Necesito descartar cualquier parte de cualquier línea, que se encuentre a 100 m de cualquier otra línea. Esto resultará en la eliminación de segmentos de cada una de las tres líneas. ¿Cómo puedo hacer esto?

20voto

lewis Puntos 1178

En el búfer ARCGIS de cada línea para el conjunto de datos y ejecute cada uno por separado, tome las salidas shp separadas y combínelas en una sola shp.

3voto

fastcall Puntos 874

Esto se puede hacer con el paquete rgeos , por ejemplo, con gBuffer y 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 parcela

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X