Как связать выбранный кластер в блестящем приложении

Во-первых, ниже я приведу пример, чтобы вы могли увидеть, как это работает. Код ниже генерирует маршрут между двумя координатами.

library(googleway)

set_key( "API KEY")


#databases
  df<-structure(list(Properties = c(1,2), 
                     Latitude = c(-24.930473, -24.95575), 
                     Longitude = c(-49.994889, -49.990162), 
                     cluster = c(1,2)), class = "data.frame", row.names = c(NA, -2L))
  
  df1<-structure(list(Properties = c(3,4),Latitude = c(-24.924361,-24.95575), 
                       Longitude = c(-50.004343, -50.007371), 
                       cluster = c(1,2)), class = "data.frame", row.names = c(NA, -2L))

 #Table to join df and df1
  data_table <- rbind(df,df1)
  data_table<-data_table[c(2:3)]

  df2<-google_directions(origin = data_table[1,], destination = data_table[3,], 
                        mode = "driving") #I specified properties 1 and 3 which are from cluster 1
  
  df_routes <- data.frame(polyline = direction_polyline(df2))
  
  
  m1<-google_map() %>%
    add_polylines(data = df_routes, polyline = "polyline")

Как связать выбранный кластер в блестящем приложении

Теперь я пытаюсь сделать это в Shiny, но без указания координат свойств, как в примере выше. В этом смысле я создал selecInput, чтобы выбрать, в каком кластере я хочу видеть маршрут. Как настроить это в этом коде ниже?

Этот вопрос может помочь: Отрегулируйте новые функции в блестящем

library(shiny)
library(rdist)
library(geosphere)
library(shinythemes)
library(googleway)


set_key( "API KEY")



function.cl<-function(df,df1,k,Filter1){
  
  #database df
  df<-structure(list(Properties = c(1,2), 
                     Latitude = c(-24.930473, -24.95575), 
                     Longitude = c(-49.994889, -49.990162), 
                     cluster = c(1,2)), class = "data.frame", row.names = c(NA, -2L))
  
  df1<-structure(list(Properties = c(3,4),Latitude = c(-24.924361,-24.95575), 
                      Longitude = c(-50.004343, -50.007371), 
                      cluster = c(1,2)), class = "data.frame", row.names = c(NA, -2L))
  
  #Table to join df and df1
  data_table <- rbind(df,df1)
  data_table1<-data_table[c(2:3)]
  
  #Generate the map with routes
  
  df2<-google_directions(origin = data_table1[1,], destination = data_table1[3,], 
                         mode = "driving")
  
  df_routes <- data.frame(polyline = direction_polyline(df2))
  
  
  m1<-google_map() %>%
    add_polylines(data = df_routes, polyline = "polyline")
  
  plot1<-m1 
  
  return(list(
    "Plot1" = plot1,
    "Data" = data_table
  ))
}

ui <- bootstrapPage(
  
  navbarPage(theme = shinytheme("flatly"), collapsible = TRUE,
             "Cl", 
             tabPanel("Map of all clusters",
                      sidebarLayout(
                        sidebarPanel(
                          tags$b(h3("Choose the cluster number?")),
                          sliderInput("Slider", h5(""),
                                      min = 2, max = 2, value = 2),
                          selectInput("Filter1", label = h4("Select just one cluster to show"),""),
                        ),
                        
                        mainPanel(
                          tabsetPanel(      
                            tabPanel("Solution", (google_mapOutput("G2",width = "95%", height = "600")))))
                        
                      ))))


server <- function(input, output, session) {
  
  Modelcl<-reactive({
    function.cl(df,df1,input$Slider,input$Filter1)
  })

    output$G2 <- renderGoogle_map({
    Modelcl()[[1]]
  })
  
  
  observeEvent(input$Slider, {
    abc <- req(Modelcl()$Data)
    updateSelectInput(session,'Filter1',
                      choices=sort(unique(abc$cluster)))
  }) 
  
}

shinyApp(ui = ui, server = server)

Как связать выбранный кластер в блестящем приложении

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
115
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Если k представляет номер кластера, на который вы ориентируетесь, а cluster — это столбец в вашем наборе данных (я не понимаю, почему у вас есть df и df1, а затем связываете их вместе), то вы можете просто сделать что-то подобное, чтобы ограничить вводом для вызова google_directions() должны быть только строки, соответствующие кластеру k

data_table1<-data_table[data_table$cluster==k,c(2:3)]

Затем при вызове google_directions() вы должны сделать это (обратите внимание, что я сейчас вызываю строку 1 и строку 2 (вместо строки 1 и строки 3 в вашем примере), потому что фильтрация в data_table$cluster==k выше гарантирует, что data_table1 имеет только две строки, связанные с кластером k

df2<-google_directions(
  origin = data_table1[1,],
  destination = data_table1[2,],
  mode = "driving")

Наконец, я не уверен, что вы хотите вернуть все data_table. Возможно, вы настроили так, чтобы он возвращал только data_table1 (т.е. подмножество с интересующим вас кластером)?:

return(list(
  "Plot1" = plot1,
  "Data" = data_table1
))

Спасибо за ответ @langtang. Это просто помогает мне понять: когда я выбираю кластер 1 в selectInput , появляется график, когда я выбираю кластер 2, разве не должен появляться другой график? потому что это другие координаты.

Antonio 20.03.2022 03:19

хорошо, вы выбираете два разных кластера, когда перемещаете ползунок? Ползунок в настоящее время принимает только 1 возможное значение - минимальное и максимальное одинаковы!!!

langtang 20.03.2022 03:21

Это решило @Antonio, или в моем коде чего-то не хватало?

langtang 20.03.2022 03:43

Я считаю, что вы правы. Позвольте мне сначала проверить кое-что.

Antonio 20.03.2022 04:13

Это верно! У меня будет еще один вопрос по этому поводу, но лучше задать другой вопрос. Как только сделаю, вставлю сюда ссылку, вдруг посмотришь. Еще раз спасибо @langtang

Antonio 20.03.2022 04:19

Другие вопросы по теме