Как генерировать узлы из существующей сети? R

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