2016-01-25 6 views
7

मैं शाइन में लीफलेट पैकेज का उपयोग करके एक नक्शा बनाता हूं जिसमें उपयोगकर्ता की साइट सूची से चयन करने के लिए selectInput है। साइट सूची भी मार्कर के रूप में पुस्तिका में जोड़ती है।आर/चमक में लीफलेट मानचित्र से ज़ूम स्तर कैसे प्राप्त करें?

जब उपयोगकर्ता कोई नई साइट चुनता है, तो मैं ज़ूम स्तर को बदले बिना चयनित साइट में हाल ही में मानचित्र बनाना चाहता हूं। केंद्र बिंदु सेट करने के लिए 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) 

पीएस: जब आप इन कोडों के साथ खेलते हैं, तो कृपया एक नई साइट चुनने से पहले ज़ूम स्तर समायोजित करें।

किसी भी सुझाव के लिए धन्यवाद।

+1

एक अंतर्निहित है [JavaScript फ़ंक्शन कहा जाता है 'getZoom'] (http://leafletjs.com/reference.html#map-getzoom) है कि वास्तव में करता है कि, लेकिन मुझे पूरा यकीन नहीं है कि इसे कैसे पहुंचाया जाए। – alistaire

+0

धन्यवाद। मुझे पहले यह पता चला है, लेकिन यह सुनिश्चित नहीं है कि जेएस को चमकदार तरीके से कैसे जोड़ें और आर कोड में मूल्य का उपयोग कैसे करें। – Bangyou

+0

'htnlwidgets :: JS' या 'v8 ::' है, लेकिन मुझे नहीं पता कि जावास्क्रिप्ट में लीफलेट ऑब्जेक्ट को क्या कहा जाता है या उसी वातावरण में फ़ंक्शन का मूल्यांकन कैसे किया जाता है। – alistaire

उत्तर

7

आप input$mapid_zoom (see 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

संबंधित मुद्दे