使用Shiny和Leaflet在R中创建带有标记的交互式webmap

时间:2016-05-16 07:43:20

标签: r leaflet

我正在尝试在R中创建一个交互式webmap,以使用Shiny和Leaflet显示位置

这个想法是用户选择一个输入,并且对应于该输入的标记(lat / long将从相应输入的数据集中取出)将显示在Leaflet地图中(具有放大/缩小功能) 。  任何帮助/建议将不胜感激!

(此处上传的示例数据文件):

enter code here
Server.R

library(shiny)
library(rpart.plot)
library(leaflet)

shinyServer(
function(input, output) {

output$dtmplot <- renderPlot({
dtmplot <- rpart.plot(dtm, type=4, extra=101)

})
observe({  

output$map <- renderLeaflet( {  
for(j in 1:nrow(df))
{
if(df[j, "col1"]==input$input1) {
map <- leaflet() %>%
addTiles() %>% 
addMarkers(lng=df[j,"Longitude"], lat=df[j,"Latitude)
}
}
})
})
}
)


enter code here

UI.R
library(shiny)
library(leaflet)
shinyUI(
pageWithSidebar(

headerPanel("Sample project"),

sidebarPanel(
plotOutput("dtmplot"),
selectInput("input1", 
label = "label1:",
choices = c(“choice1”,”choice2”),
              selected = " choice1"),
sliderInput("slider","Please select slider input",                min=1,max=100,value=20,step=10) 


  ),


   mainPanel(
   leafletOutput("map")

   )

   ))

1 个答案:

答案 0 :(得分:0)

下面提供了处理传单地图中自定义点的基本代码。该代码使用了可用的官方示例on the leaflet GitHub,并为最终用户提供了在地图上显示自定义位置的功能。

app.R

library(shiny)
library(leaflet)

r_colors <- rgb(t(col2rgb(colors()) / 255))
names(r_colors) <- colors()

ui <- fluidPage(
    leafletOutput("mymap"),
    p(),
    h1("Added example to add more points here:"),
    p(),
    numericInput("long", label = h3("Longitude:"), value = 11.242828),
    numericInput("lat", label = h3("Latitude:"), value = 30.51470),
    actionButton("recalc", "Show point")

)

server <- function(input, output, session) {

    points <- eventReactive(input$recalc, {
        cbind(input$long, input$lat)
    }, ignoreNULL = FALSE)

    output$mymap <- renderLeaflet({
        leaflet() %>%
            setView(lat = 30, lng = 11, zoom = 4) %>%
            addProviderTiles("Stamen.TonerLite",
                             options = providerTileOptions(noWrap = TRUE)
            ) %>%
            addMarkers(data = points())
    })
}

shinyApp(ui, server)

结果

获得的地图如下所示:

map

解释

机制非常简单,可以通过以下步骤进行总结:

  1. 您需要将latlon传递到地图addMarkers。在我的例子中,这是通过原始输入文件完成的,但它可以通过多种方式完成。
  2. 您必须决定动态添加标记到地图的逻辑;在本案例中,这是使用actionButton
  3. 完成的

    旁注

    • 在起草这个答案时,对于应该在地图上显示的实际数据没有明确的说明,我发现在官方示例之后生成所需功能而不是尝试修改提供的内容更具信息性代码。
    • 值得注意的是,lat/lon值必须具有正确的格式才能显示在地图上。
    • 地图setView使示例更具代表性,但在实际解决方案中,应动态生成默认lat/lon值。