#' Source: https://rpubs.com/walkerke/points_to_line
#'
#' @param data
#' @param long
#' @param lat
#' @param id_field
#' @param sort_field
#'
#' @return
#' @export
#'
#' @examples
#'
#'
points_to_line <- function(data, long, lat, id_field = NULL, sort_field = NULL) {
reuire(sp)
require(maptools)
# Convert to SpatialPointsDataFrame
coordinates(data) <- c(long, lat)
# If there is a sort field...
if (!is.null(sort_field)) {
if (!is.null(id_field)) {
data <- data[order(data[[id_field]], data[[sort_field]]), ]
} else {
data <- data[order(data[[sort_field]]), ]
}
}
# If there is only one path...
if (is.null(id_field)) {
lines <- SpatialLines(list(Lines(list(Line(data)), "id")))
return(lines)
# Now, if we have multiple lines...
} else if (!is.null(id_field)) {
# Split into a list by ID field
paths <- sp::split(data, data[[id_field]])
sp_lines <- SpatialLines(list(Lines(list(Line(paths[[1]])), "line1")))
# I like for loops, what can I say...
for (p in 2:length(paths)) {
id <- paste0("line", as.character(p))
l <- SpatialLines(list(Lines(list(Line(paths[[p]])), id)))
sp_lines <- spRbind(sp_lines, l)
}
return(sp_lines)
}
}
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.