【问题标题】:Create interactive webmap with markers in R using Shiny and Leaflet使用 Shiny 和 Leaflet 在 R 中创建带有标记的交互式网络地图
【发布时间】:2016-09-11 22:50:11
【问题描述】:

我正在尝试在 R 中创建一个交互式网络地图,以使用 Shiny 和 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")

   )

   ))

【问题讨论】:

  • 考虑在here 可用的代码行上重做您的示例,以便将其粘贴并作为一个*.R 文件执行。

标签: r leaflet


【解决方案1】:

下面提供了在传单地图中处理自定义点的基本代码。该代码利用了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)

结果

得到的地图是这样的:

说明

机制相当简单,可以概括为以下步骤:

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

附注

  • 在起草此答案时,关于应在地图上显示的实际数据尚不清楚,我发现按照官方示例生成所需功能而不是尝试修改提供的功能更有用代码。
  • 值得注意的是,lat/lon 值必须采用正确的格式才能显示在地图上。
  • 映射setView 使示例更形象,但在实际解决方案中,默认lat/lon 值应动态生成。

【讨论】:

  • 我们能否创建交互式地图,即当您点击地图时显示其地址(如谷歌地图)
  • @Supraja 是的,但这在您的原始问题中没有提及。我知道希望从数据集中获取坐标并绘制相应的点。您可以使用鼠标事件通过传单驱动 Shiny 逻辑。
  • 是的,我在主要问题中没有提到这一点,但我只是想知道我们是否可以做到,非常感谢:)
  • @Supraja 没问题,我很高兴看到您发现答案很有帮助。
  • 我能否使用 R 获取地图中点击事件的信息,在传单上显示地址(如谷歌地图)
猜你喜欢
  • 2016-07-06
  • 2020-06-14
  • 1970-01-01
  • 2017-11-08
  • 2019-04-12
  • 2017-08-02
  • 2021-10-14
  • 1970-01-01
  • 2023-03-15
相关资源
最近更新 更多