Html Shiny-控制传单地图内的小部件

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 <

我有一个简单的闪亮的应用程序,只有一个下拉列表,列出了阿富汗的各个地区,还有一张同样的单张地图。

可在此访问形状文件-使用来自的AFG_adm2.shp

以下是应用程序代码:

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")
})