Поскольку я относительно новичок в R и Shiny, я хотел бы задать несколько вопросов о нескольких слоях в приложении Shiny.Буду признателен за вашу помощь, поскольку я не уверен, что я на правильном пути.
Я пытаюсь создать приложение интерактивной карты, в котором будут отображаться следующие слои: 0. Базовая карта (OSM), 1Старые полигоны, 2. Новые полигоны определенной географической области.
Ниже вы можете найти мой код:
#IMPORTED LIBRARIES
library(leaflet)
library(shinyWidgets)
require(shiny)
require(shinythemes)
library(leaflet.extras)
library(htmlwidgets)
library(jsonlite)
library(RJSONIO)
library(shinyBS)
#UI
ui <- navbarPage("Interactive map",id="nav",
tabPanel("Interactive map of this area",
div(class="outer",
tags$head(
# Include our custom CSS
includeCSS("C:/Users/Korisnik/Desktop/R/30012019_int_mapa/www/styles.css")),
leafletOutput("m",height= "100%", width="100%"))),
absolutePanel( id = "controls", class = "panel panel-default", fixed = TRUE,
draggable = TRUE, top = 60, left = "auto", right = 20, bottom = "auto",
width = 330, height = "auto",
h2("Search polygons by number"),
searchInput(
inputId = "search", label = "write the number og parcel",
btnSearch = icon("search"),
btnReset = icon("remove"),
width = "350px"),
checkboxGroupInput("layers", label = h3("Choose layer"),
choices = list("Old polygons", "New polygons"),
selected = NULL),
hr(),
uiOutput("tab")
)
)
#SERVER
old_polygons<-fromJSON("old_polygons_wgs84.geojson")
new_polygons<-fromJSON("new_polygons_wgs84.geojson")
server <- function(input, output) {
output$m <- renderLeaflet({
leaflet() %>%
addTiles(group = "OSM (default)") %>%
setView(lng =#from file , lat=#from file, zoom = 11.9)%>%
addMeasure(
position = "bottomleft",
primaryLengthUnit = "meters",
primaryAreaUnit = "sqmeters",
activeColor = "#3D535D",
completedColor = "#7D4479")%>%
addFullscreenControl( pseudoFullscreen = TRUE)%>%
addResetMapButton()
})
output$layers<-({leafletProxy(m)%>%
if(input$layers=="Old polygons"){
addGeoJSON(old_polygons)%>%
showGroup("Old polygons")%>%
hideGroup("New polygons")%>%
}
})
output$res <- renderPrint({
input$search })
url <- a("Find me the price", href="http://....")
output$tab <- renderUI({
tagList("In this page you can find a price for your parcel", url)
})
}
# Run the application
shinyApp(ui = ui, server = server)
Итак, я пытаюсь добиться того, чтобы, когда пользовательщелкает в групповом окне «Старые полигоны» на панели приложения, чтобы иметь возможность увидеть наложение полигонов на базовой карте OSM.Или то же самое, когда пользователь хочет видеть «Новые полигоны».
Я пытался, например, написать код с «оператором if», который я написал в своем коде ранее, но когда я пытаюсь запуститьApp инажмите на один из слоев, я вижу только базовую карту OSM.Полигоны не загружаются.
Еще одна вещь, которую я пробовал, - это добавить полигоны на стороне сервера вместе с функцией renderLeaflet, но когда я запускаюApp, загрузка занимает много времени, и, наконец, она вообще не загружается.,Я просто ждал, и приложение работало безрезультатно.
До этого я успешно создавал интерактивную карту такого типа, используя шейп-файлы вместо geoJSON, но когда я пытался сделать то же самое в среде приложения, я как быне удалось.
Код карты ниже:
old_polygons <- readOGR(dsn = "C:/Users/Korisnik/Desktop/R/30012019_int_mapa/old_polygons_wgs84.shp")
new_polygons <- readOGR(dsn = "C:/Users/Korisnik/Desktop/R/30012019_int_mapa/new_polygons_wgs84.shp")
m<-leaflet() %>%
addTiles(group = "OSM (default)") %>%
setView(lng =, lat=, zoom = 11.9)%>%
addPolygons(data=old_polygons,
color="#cc0000",
weight=1,
smoothFactor=0.5,
group="Old polygons")%>%
addPolygons(data=new_polygons,
color="#bfff80",
weight=1,
smoothFactor=0.5,
group="New polygons")%>%
addLayersControl(
baseGroups = c("OSM (default)"),
overlayGroups = c("Old polygons", "New polygons"),
position="bottomleft",
options = layersControlOptions(collapsed = FALSE))%>%
addResetMapButton()%>%
addMeasure(
position = "topright",
primaryLengthUnit = "meters",
primaryAreaUnit = "sqmeters",
activeColor = "#3D535D",
completedColor = "#7D4479")
m
Буду признателен, если кто-нибудь сможет дать мне несколько советов, рекомендаций, справку о том, как правильно управлять показом / скрытием моих слоев в приложении Shiny.