2017-06-13 23 views
0

addCirclemarkersにポップアップを挿入すると、数千ポイントのデータの計算時間が長くなりました。私はマップを表示する前にすべてのポップアップを計算しなければならないと仮定しています。r光沢のあるリーフレット - オンデマンドでポップアップを1つずつ作成

ポイント/サークル/マーカーがクリックされた場合にのみ、ポップアップを追加/作成する方法をオンラインで検索しました。現在、私は以下のコードにあります。このコードを実行すると、ポップアップが作成されますが、データから抽出する文字列は表示されません。私は間違って何をしていますか?

library(shiny) 
library(leaflet) 
library(htmltools) 
library(sp) 

data <- data.frame(
    "name"=c("Place 1","Place 2","Place 3"), 
    "lat"=c(50,51,52), 
    "lng"=c(3,4,5), stringsAsFactors = FALSE) 

ui = fluidPage(
    fluidRow(column(8, offset = 2, leafletOutput("map", width = "100%", height = "650px"))) 
)        

server = function(input, output, session) { 

    pts <- reactive({ 
    pts <- data 
    coordinates(pts) <- ~lng+lat 
    pts 
    }) 

    output$map <- renderLeaflet({ 
    leaflet(pts()) %>% 
     addTiles(group="OSM") %>% 
     addCircleMarkers() 
    }) 

    observeEvent(input$map_marker_click, { 
    leafletProxy("map") %>% clearPopups() 
    event <- input$map_marker_click 
    if (is.null(event)) 
     return() 
    isolate({ 
     pts2 <- pts() 
     sgh <- pts2[row.names(pts2) == event$id,] 
     # sgh <- pts2[pts2$name == event$id,] 
     content <- htmlEscape(paste("This place is",as.character(sgh$name))) 
     leafletProxy("map") %>% addPopups(event$lng, event$lat, content, layerId = event$id) 
    }) 
    }) 

} 

shinyApp(ui = ui, server = server, options = list(launch.browser=TRUE)) 

答えて

0

あなたとコードevent$idとしてもNULLなので、sgh <- pts2[row.names(pts2) == event$id,]改行NULL

あなたはCircleMarkerslayerIdを追加する必要があります(とPopupに追加する必要はありません
これはまた、それが元のデータとそれを「マージ」に必要wothoutアクセスしてみましょう:。

output$map <- renderLeaflet({ 
    leaflet(pts()) %>% 
     addTiles(group="OSM") %>% 
     addCircleMarkers(layerId = ~name) 
}) 

observeEvent(input$map_marker_click, { 
    leafletProxy("map") %>% 
     clearPopups() 
    event <- input$map_marker_click 
    if (is.null(event)) 
     return() 
    isolate({ 
     content <- htmlEscape(paste("This place is", event$id)) 

     leafletProxy("map") %>% 
      addPopups(event$lng, event$lat, content) 
    }) 
}) 
+0

を( 'event $ id'に元のデータの' name'値が含まれるようになりました) – GGamba

+0

多くのご協力ありがとうございました!より多くのデータを"type" = c( "great"、 "far"、 "popular")のように、データに3番目の列がある場合など、ポップアップを表示するにはどうすればよいですか?再会y素晴らしい "。 –

+0

私は以前のコメントを削除する前にあなたが答えたようです。 ;) –

関連する問題