我正在尝试在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")
)
))
答案 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)
获得的地图如下所示:
机制非常简单,可以通过以下步骤进行总结:
lat
和lon
传递到地图addMarkers
。在我的例子中,这是通过原始输入文件完成的,但它可以通过多种方式完成。actionButton
。lat/lon
值必须具有正确的格式才能显示在地图上。setView
使示例更具代表性,但在实际解决方案中,应动态生成默认lat/lon
值。