2013-12-11 24 views
6

Mam zestaw rozpocząć i współrzędne końcowe, które wyglądają tak:Konwersja początek i koniec Współrzędne na linie Przestrzennych w 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)) 

Próbuję utworzyć zestaw 3 odcinków łącząc każdy rozpocząć punkt do odpowiedniego punktu końcowego. Chciałbym, aby końcowym produktem był obiekt , dzięki czemu będę mógł go użyć z funkcją over w pakiecie .

Odpowiedz

10

Oto sposób:

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

To sprawia, że ​​oddzielne linie obiektów (każdy z unikalnym ID) dla każdej pary, w przeciwnym razie może chcieć pojedynczy obiekt?

I tak dla zabawy, budować jako spatstat psp obiektu, a następnie zmusić metodami w 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

One mogą również korzystać z sf package zbudować listę sfc klasy, a następnie przekształcić go obiekt:

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

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