Html Shiny-控制传单地图内的小部件
我有一个简单的闪亮的应用程序,只有一个下拉列表,列出了阿富汗的各个地区,还有一张同样的单张地图。 可在此访问形状文件-使用来自的AFG_adm2.shp 以下是应用程序代码:Html Shiny-控制传单地图内的小部件,html,r,leaflet,shiny,Html,R,Leaflet,Shiny,我有一个简单的闪亮的应用程序,只有一个下拉列表,列出了阿富汗的各个地区,还有一张同样的单张地图。 可在此访问形状文件-使用来自的AFG_adm2.shp 以下是应用程序代码: library(shiny) library(leaflet) library(rgdal) library(sp) afg <- readOGR(dsn = "data", layer ="AFG_adm2", verbose = FALSE, stringsAsFactors = FALSE) ui <
library(shiny)
library(leaflet)
library(rgdal)
library(sp)
afg <- readOGR(dsn = "data", layer ="AFG_adm2", verbose = FALSE, stringsAsFactors = FALSE)
ui <- fluidPage(
titlePanel("Test App"),
selectInput("yours", choices = c("",afg$NAME_2), label = "Select Country:"),
actionButton("zoomer","reset zoom"),
leafletOutput("mymap")
)
server <- function(input, output){
initial_lat = 33.93
initial_lng = 67.71
initial_zoom = 5
output$mymap <- renderLeaflet({
leaflet(afg) %>% #addTiles() %>%
addPolylines(stroke=TRUE, color = "#00000", weight = 1)
})
proxy <- leafletProxy("mymap")
observe({
if(input$yours!=""){
#get the selected polygon and extract the label point
selected_polygon <- subset(afg,afg$NAME_2==input$yours)
polygon_labelPt <- selected_polygon@polygons[[1]]@labpt
#remove any previously highlighted polygon
proxy %>% removeShape("highlighted_polygon")
#center the view on the polygon
proxy %>% setView(lng=polygon_labelPt[1],lat=polygon_labelPt[2],zoom=7)
#add a slightly thicker red polygon on top of the selected one
proxy %>% addPolylines(stroke=TRUE, weight = 2,color="red",data=selected_polygon,layerId="highlighted_polygon")
}
})
observeEvent(input$zoomer, {
leafletProxy("mymap") %>% setView(lat = initial_lat, lng = initial_lng, zoom = initial_zoom) %>% removeShape("highlighted_polygon")
})
}
# Run the application
shinyApp(ui = ui, server = server)
我看不到
addTiles
中的地图分幅,也看不到addControl
中的缩放重置按钮。您知道为什么会发生这种情况吗?您可以通过在UI中使用闪亮的absolutePanel()函数来实现这一点,例如:
library(shiny)
library(leaflet)
library(rgdal)
library(sp)
afg <- readOGR(dsn = "data", layer ="AFG_adm2", verbose = FALSE, stringsAsFactors = FALSE)
ui <- fluidPage(
tags$head(
tags$style(
HTML(
'
.outer {
position: fixed;
top: 80px;
left: 0;
right: 0;
bottom: 0;
overflow: hidden;
padding: 0;
}
#controls-filters {
background-color: white;
border:none;
padding: 10px 10px 10px 10px;
z-index:150;
}
'
)
)
),
titlePanel("Test App"),
absolutePanel(
id = "controls-filters",
class = "panel panel-default",
fixed = TRUE,
draggable = TRUE,
top = 100,
left = "auto",
right = 20,
bottom = "auto",
width = 330,
height = "auto",
selectInput("yours", choices = c("", afg$NAME_2), label = "Select Country:"),
actionButton("zoomer", "reset zoom")
),
div(class = "outer", leafletOutput("mymap"))
)
server <- function(input, output){
initial_lat = 33.93
initial_lng = 67.71
initial_zoom = 5
output$mymap <- renderLeaflet({
leaflet(afg) %>% #addTiles() %>%
addPolylines(stroke=TRUE, color = "#00000", weight = 1)
})
proxy <- leafletProxy("mymap")
observe({
if(input$yours!=""){
#get the selected polygon and extract the label point
selected_polygon <- subset(afg,afg$NAME_2==input$yours)
polygon_labelPt <- selected_polygon@polygons[[1]]@labpt
#remove any previously highlighted polygon
proxy %>% removeShape("highlighted_polygon")
#center the view on the polygon
proxy %>% setView(lng=polygon_labelPt[1],lat=polygon_labelPt[2],zoom=7)
#add a slightly thicker red polygon on top of the selected one
proxy %>% addPolylines(stroke=TRUE, weight = 2,color="red",data=selected_polygon,layerId="highlighted_polygon")
}
})
observeEvent(input$zoomer, {
leafletProxy("mymap") %>% setView(lat = initial_lat, lng = initial_lng, zoom = initial_zoom) %>% removeShape("highlighted_polygon")
})
}
# Run the application
shinyApp(ui = ui, server = server)
库(闪亮)
图书馆(单张)
图书馆(rgdal)
图书馆(sp)
afg%去除形状(“突出显示的多边形”)
})
}
#运行应用程序
shinyApp(用户界面=用户界面,服务器=服务器)
这应该可以让你开始,但我建议你的应用程序的结构应该是一个独立的CSS文件。你可以直接使用
addControl
功能:
output$mymap <- renderLeaflet({
leaflet(afg) %>% #addTiles() %>%
addPolylines(stroke=TRUE, color = "#00000", weight = 1) %>%
addControl(actionButton("zoomer","Reset"),position="topright")
})
output$mymap%#addTiles()%>%
添加多段线(笔划=TRUE,颜色=“#00000”,权重=1)%
添加控制(操作按钮(“缩放”、“重置”),位置=“右上方”)
})
不,这不适合我。我的完整应用程序中已经有一个absolutePanel,如果我添加另一个并将其相对于地图定位,它将不再可见。它在地图层后面吗?现在真的进入CSS领域了。我将编辑我的答案并提供更多详细信息。或者%%>%mapview::addHomeButton(ext=raster::extent(afg),layer.name=“afg”,position=“topright”)
这让我可以看到重置按钮一秒钟,然后它在我的完整应用程序中消失(或在地图层后面?)。@TimSalabim mapview工作正常,但我如何设置和编辑按钮?也,我使用的是一个带有ActionButton的观察者,该观察者正在缩小并取消选择选定的多边形。@ProgSnob抱歉,您不能在layer.name
参数之外设置按钮的样式。您可以尝试设置layerId等,但如果它在最小示例中有效,则很难确定发生了什么,但如果您不发布,则无法在整个应用程序中使用密码。
output$mymap <- renderLeaflet({
leaflet(afg) %>% #addTiles() %>%
addPolylines(stroke=TRUE, color = "#00000", weight = 1) %>%
addControl(actionButton("zoomer","Reset"),position="topright")
})