Как нарисовать все возможные отрезки между существующими точками, используя буклет в R - PullRequest
0 голосов
/ 01 октября 2019

Мой вопрос похож (в основном на тот же) на предыдущий: Нарисуйте все линии между точками

Но я хотел бы найти решение с использованием листовки в R. Является ли этоможно сделать это с помощью листовки? Функция addPolylines() работает как соединение всех последовательных точек в кадре данных. Как показано в примере набора данных ниже, легко соединить все точки по порядку, но как нарисовать все возможные сегменты между этими пятью точками?

Мне бы хотелось увидеть общее решение с листовкой, которое я могу применить в сценариях с большим количеством точек. Большое спасибо!

locations <- data.frame(Long = c(76,75,73,72,74,76), Lat = c(43,40,40,43,45,43))

leaflet("locations") %>%
       addTiles() %>%
       addPolylines(lng = locations$Long,
                    lat = locations$Lat)

1 Ответ

1 голос
/ 01 октября 2019

Его можно разбить на 2 шага:

  1. Создать фрейм данных, содержащий все комбинации между координатами.
  2. Построить линии между каждой парой координат. См. Как связать две координаты с линией с помощью Leaflet в R

Шаг 1

library(leaflet)
library(tidyr)
library(dplyr)
library(purrr)
locations <- data.frame(Long = c(76,75,73,72,74,76), Lat = c(43,40,40,43,45,43))
# get unique coordinates
locations_distinct <- locations %>%
  distinct_all()

# get all combinations between any two points
combs <- combn(1:nrow(locations_distinct),2,simplify = FALSE)

# get pairs of coordinates
locations_paris <- map_df(combs,function(x){
  df <- bind_cols(
    locations_distinct[x[1],],locations_distinct[x[2],]
  )
  colnames(df) <- c("Long","Lat","Long1","Lat1")
  return(df)
})

Шаг 2

Как связать две координаты с линией с помощью Leaflet в R

map <- leaflet(locations_paris) %>%
  addTiles() 

for(i in 1 : nrow(locations_paris)){
  map <- map %>%
    addPolylines(
      lng = c(locations_paris$Long[i],locations_paris$Long1[i]),
      lat = c(locations_paris$Lat[i],locations_paris$Lat1[i])
    )
}

map

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...