0
在addCirclemarkers
中插入彈出窗口導致需要映射數千個點的數據的冗長計算時間。我假設在顯示地圖之前必須計算所有彈出窗口。r閃亮的傳單 - 按需創建彈出窗口
我在網上搜索了一種方法,只點擊點/圓/標記就可以添加/創建彈出窗口。目前,我在下面的代碼。如果運行此代碼,您將看到彈出窗口已創建,但未從數據中提取字符串。我究竟做錯了什麼?
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))
然後,您可能需要像以前一樣「合併」原始數據('event $ id'現在包含原始數據的'name'值) – GGamba
非常感謝!如果我想要使用更多數據例如,如果數據中會有第三列,比如「type」= c(「great」,「far away」,「popular」),那麼我怎樣才能顯示「這是place 1,它是雷爾好極了「。 –
似乎你在我刪除我之前的評論之前回復了。 ;) –