2013-12-11 12 views
6

Tôi có một bộ bắt đầu và tọa độ cuối mà trông như thế này:Chuyển đổi Begin và End Tọa độ vào không gian dòng 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)) 

tôi đang cố gắng để tạo ra một bộ 3 đoạn thẳng bằng cách kết nối từng bắt đầu điểm đến điểm cuối tương ứng của nó. Tôi muốn sản phẩm cuối cùng là đối tượng để tôi có thể sử dụng nó với chức năng over trong gói sp.

Trả lời

10

Đây là một cách:

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

Điều này làm cho một dòng riêng biệt đối tượng (mỗi với một ID duy nhất) cho mỗi cặp, bạn khác có thể muốn có một đối tượng duy nhất?

Và chỉ để cho vui, xây dựng như một đối tượng psp spatstat đầu tiên và sau đó ép buộc với các phương pháp trong 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

Người ta cũng có thể sử dụng sf package để xây dựng một danh sách các sfc lớp và sau đó chuyển nó sang đối tượng:

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

tắm/Tùy chọn:

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

Các vấn đề liên quan