Convert start and end coordinates to spatial lines in R

I have a set of start and end coordinates that look like this:

begin.coord <- data.frame(lon=c(-85.76,-85.46,-85.89), lat=c(38.34,38.76,38.31)) end.coord <- data.frame(lon=c(-85.72,-85.42,-85.85), lat=c(38.38,38.76,38.32)) 

I am trying to create a set of three line segments by connecting each start point to the corresponding end point. I would like the final product to be a SpatialLines object SpatialLines that I can use it with the over function in the sp package.

+6
source share
2 answers

Here is the way:

 ## raw list to store Lines objects l <- vector("list", nrow(begin.coord)) library(sp) for (i in seq_along(l)) { l[[i]] <- Lines(list(Line(rbind(begin.coord[i, ], end.coord[i,]))), as.character(i)) } SpatialLines(l) 

This makes a separate Lines object (each with a unique identifier) ​​for each pair, otherwise you may need one object?

And just for fun, first create a psppstpat object, and then apply the methods in maptools:

 library(spatstat) p <- psp(begin.coord[,1], begin.coord[,2], end.coord[,1], end.coord[,2], owin(range(c(begin.coord[,1], end.coord[,1])), range(c(begin.coord[,2], end.coord[,2])))) library(maptools) as(p, "SpatialLines") 
+10
source

You can also use sf package to create a list of the sfc class and then convert it to a SpatialLines object

 # the given data begin.coord <- data.frame(lon=c(-85.76,-85.46,-85.89), lat=c(38.34,38.76,38.31)) end.coord <- data.frame(lon=c(-85.72,-85.42,-85.85), lat=c(38.38,38.76,38.32)) library(sf) # Create list of simple feature geometries (linestrings) l_sf <- vector("list", nrow(begin.coord)) for (i in seq_along(l_sf)){ l_sf[[i]] <- st_linestring(as.matrix(rbind(begin.coord[i, ], end.coord[i,]))) } # Create simple feature geometry list column l_sfc <- st_sfc(l_sf, crs = "+proj=longlat +datum=WGS84") # Convert to `sp` object if needed lines_sp <- as(l_sfc, "Spatial") 

Extra:

 # - create a sf object from the `sfc` list of linestrings lines_sf = st_sf(id = 1:3, geometry = l_sfc) # - visualize the `sfc` list of linestrings plot(l_sfc) library(mapview) mapview(l_sfc, lwd = 5) # or mapview(lines_sp, lwd = 5) # or mapview(lines_sf, lwd = 5) 

enter image description here

+1
source

All Articles