selectInput
ユーザーがサイトリストから選択できるようにするShinyのリーフレットパッケージを使用してマップを作成します。サイトリストは、マーカーとしてリーフレットにも追加されます。
ユーザーが新しいサイトを選択したときに、ズームレベルを変更せずに、選択したサイトにマップを再配置したいと思います。このsetView
関数を呼び出して中心点を設定できますが、ズームレベルを指定する必要があります。
setView
関数で使用できるリーフレットマップのズームレベルを取得することはできますか?
これは、ズームレベルをリセットして私の質問を試すための最小限の例です。
library(shiny)
library(leaflet)
df <- data.frame(
site = c('S1', 'S2'),
lng = c(140, 120),
lat = c(-20, -30),
stringsAsFactors = FALSE)
# Define UI for application that draws a histogram
ui <- shinyUI(fluidPage(
selectInput('site', 'Site', df$site),
leafletOutput('map')
))
server <- shinyServer(function(input, output, session) {
output$map <- renderLeaflet({
leaflet() %>%
addTiles() %>%
setView(lng = 133, lat = -25, zoom = 4) %>%
addMarkers(lng = df$lng, lat = df$lat)
})
observe({
req(input$site)
sel_site <- df[df$site == input$site,]
isolate({
leafletProxy('map') %>%
setView(lng = sel_site$lng, lat = sel_site$lat, zoom = 4)
})
})
})
shinyApp(ui = ui, server = server)
PS:これらのコードで遊ぶときは、新しいサイトを選択する前にズームレベルを調整してください。
提案をありがとう。
を使用してズームレベルにアクセスできますinput$mapid_zoom
(ここを参照)。
あなたの中でobserve
、あなたはすることができます:
observe({
sel_site <- df[df$site == input$site,]
isolate({
new_zoom <- 4
if(!is.null(input$map_zoom)) new_zoom <- input$map_zoom
leafletProxy('map') %>%
setView(lng = sel_site$lng, lat = sel_site$lat, zoom = new_zoom)
})
})
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加