Я разрабатываю карту буклетов в R блестящем. В этом приложении я хочу, чтобы фокус карты изменялся всякий раз, когда изменяется lng и lat значение в setView()
. lng и lat значения основаны на какой стране, которую я выбираю из раскрывающегося списка. Раньше я использовал статическое значение для lng и lat в функции ifelse()
и приложение работает. Но теперь проблема заключается в том, когда я хочу сделать вещи более универсальными: lng и lat будет означать долготу и широту из подмножества данных с выбранной страной, приложение больше не отображает карту (с моей точки зрения, расчет кажется правильным)Измените setView динамически в соответствии с полем выбора в приложении R shiny
Ниже приведен упрощенный и работоспособным R сценарий:
global.R:
library(devtools)
library(leaflet)
library(htmlwidgets)
library(shiny)
library(shinydashboard)
library(sp)
library(rworldmap)
library(RCurl)
library(ggmap)
df <- read.csv(url("https://docs.google.com/spreadsheets/d/1rrEJiuxr4nafTqUQBlPpUdGwvGeGtBJExlPJdday2uw/pub?output=csv"),
header = T,
stringsAsFactors = F)
df$Time <- as.Date(df$Time, "%d/%m/%Y")
ui.R
header <- dashboardHeader(
title = 'Shiny Memery'
)
body <- dashboardBody(
fluidRow(
tabBox(
tabPanel("My Map", leafletOutput("mymap",height = 550)),
width = 700
))
)
dashboardPage(
header,
dashboardSidebar(
sliderInput('Timeline Value','Time line',min = min(df$Time),
max = max(df$Time),
value = c(min(df$Time), min(df$Time)+10)),
selectInput("select_country", label = "Select Country",
choices = NULL,
selected = NULL)
),
body
)
server.R
shinyServer(function(input, output, session) {
dfs <- reactive({
tmp <- subset(df, df$Time <= input$`Timeline Value`[2] & df$Time >= input$`Timeline Value`[1])
tmp
})
part_choices <- reactive({
as.list(c("All", unique(as.character(dfs()$Country))))
})
observe({
updateSelectInput(session, "select_country", choices=part_choices())
})
output$mymap <- renderLeaflet({
lng <- ifelse(input$select_country == "All", mean(dfs()$lon),
mean(subset(dfs(), Country %in% input$select_country)$lon)
)
lat <- ifelse(input$select_country == "All", mean(dfs()$lat),
mean(subset(dfs(), Country %in% input$select_country)$lat)
)
m <- leaflet(dfs()) %>%
addTiles(
) %>%
setView(lng, lat, zoom = 5) %>%
addMarkers(~lon, ~lat,
clusterOptions = markerClusterOptions())
})
})
Вы увидите в server.R части я использую ifelse()
изменить широчайшие значение по LNG и , которые в дальнейшем могут быть использованы в setView()
функции. После того как я изменил аргумент else в вычислении, приложение больше не работает.
Действительно оцените, если кто-то скажет мне, где я был неправ.
Заранее спасибо.
Привет Вонг, очень ценю за вашу помощь. Он работает сейчас. Я смотрел только на серверную часть и не понимал, что это простое изменение в ui.R может решить проблему, над которой я работаю довольно долго. Большое спасибо. – Lambo