2016-01-25 6 views
7

Shinyのリーフレットパッケージを使用してマップを作成します。selectInputを使用して、ユーザーがサイトリストから選択できるようにします。サイトリストはまた、マーカーとしてリーフレットに追加されます。R/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:これらのコードで再生する場合は、新しいサイトを選択する前にズームレベルを調整してください。

ありがとうございます。

+1

正確に行います(http://leafletjs.com/reference.html#map-getzoom)基礎となる[ 'getZoom'と呼ばれるJavaScript関数]がありますしかし、私はそれにアクセスする方法についてはあまりよく分かりません。 – alistaire

+0

ありがとうございます。私はそれを以前は見つけましたが、jsを光沢のあるものに追加し、Rコードの値にアクセスする方法を確認していませんでした。 – Bangyou

+0

'htnlwidgets :: JS'または' v8 :: 'がありますが、JavaScriptでチラシオブジェクトが呼び出されたことや、同じ環境で評価される関数を取得する方法がわかりません。 – alistaire

答えて

7

input$mapid_zoomsee here)を使用してズームレベルにアクセスできます。あなたの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) 
       }) 
     }) 
+0

素敵です。私は注意深くリーフレットの文書を読むべきですが、私は既に何度も赤く書いています。 – Bangyou

関連する問題