2013-12-11 14 views
6

Ho una serie di cominciare e le coordinate finali che assomigliano a questo:Converti Begin e End coordinate nel spaziali Lines R

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)) 

Sto cercando di creare un set di 3 segmenti di linea collegando ogni punto di iniziare al suo punto finale corrispondente. Vorrei che il prodotto finale fosse un oggetto in modo da poterlo utilizzare con la funzione over nel pacchetto sp.

risposta

10

Ecco un modo:

## 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) 

Questo rende un oggetto linee separate (ciascuna con un ID univoco) per ogni coppia, altrimenti potrebbe desiderare un singolo oggetto?

E solo per divertimento, costruire come un oggetto psp spatstat prima e poi costringere con i metodi 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") 
1

si potrebbe anche utilizzare il sf package per costruire una lista di sfc classe e poi convertirlo in oggetto:

# 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/Optional:

# - 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

Problemi correlati