#r #sf
#r #sf
Вопрос:
У меня есть сегмент дороги с именем my_line с начальной и конечной точками
df <- data.frame(id = "a", lon1 = 1, lat1 = 5, lon2 = 7, lat2 = 9)
dt <- as.data.table(df)
sf <- dt[
, {
geometry <- sf::st_linestring(x = matrix(c(lon1, lat1, lon2, lat2), ncol = 2))
geometry <- sf::st_sfc(geometry)
geometry <- sf::st_sf(geometry = geometry)
}
, by = id
]
my_line <- sf::st_as_sf(sf)
pt <- st_cast(my_line, "POINT")
start <- pt[1,] # create start point
end <- pt[nrow(pt),] # create end point
Я хочу разделить эту дорогу каждые 2 метра (интервал 2 метра), и новые точки называются new.pt
sdist = 2 # split distance
numOfPoints <- as.numeric(st_length(my_line) / sdist)
new.pt <- st_line_sample(sf.sf, numOfPoints, type = "regular") # new points
library(ggplot2)
ggplot()
geom_sf(data = sf.sf)
geom_sf(data = start, color = 'green')
geom_sf(data = end, color = 'red') geom_sf(data = new.pt, color = 'black')
Теперь я хочу использовать new.pt
as для создания нового сегмента дороги в соответствии с этим форматом
(начать —> new.pt [1], new.pt [1]—> new.pt [2], new.pt [2] —> конец)
т.е. 3 строки; 2 новых узла, созданных из существующей строки
Как это сделать в R?
Комментарии:
1. Вы просто хотите разделить строки или хотите создать ориентированный граф? Вы можете разделить линии точками с помощью
lwgeom::st_split(my_line, new.pt)
.2. Смотрите также gis.stackexchange.com/questions/379107 /…