Очевидно, что функция mapshot
не знает о нарисованных полигонах и просто хранит чистую листовую карту, поскольку она запускает изолированный фоновый процесс, который захватывает веб-снимок.
Я бы предложил этот обходной путь, который захватывает весь экран (используя этот пакет -файл) и сохраняет его как png .( только для Windows )
Это не очень красиво, поскольку оно также захватывает окна и строки меню браузера, хотя это может быть адаптировано в пакетном файле.
Пакетный файл должен находиться в том же каталоге и должен называться screenCapture.bat .
library(shiny)
library(leaflet)
library(leaflet.extras)
library(mapview)
ui <- fluidPage(
leafletOutput("map"),
actionButton("download_pdf", "Download .pdf")
)
server <- function(input, output, session) {
foundational_map <- reactive({
leaflet() %>%
addTiles()%>%
addMeasure(
primaryLengthUnit = "kilometers",
secondaryAreaUnit = FALSE
)%>%
addDrawToolbar(
targetGroup='draw',
editOptions = editToolbarOptions(selectedPathOptions =
selectedPathOptions()),
polylineOptions = filterNULL(list(shapeOptions =
drawShapeOptions(lineJoin = "round",
weight = 3))),
circleOptions = filterNULL(list(shapeOptions =
drawShapeOptions(),
repeatMode = F,
showRadius = T,
metric = T,
feet = F,
nautic = F))) %>%
setView(lat = 45, lng = 9, zoom = 3) %>%
addStyleEditor(position = "bottomleft",
openOnLeafletDraw = TRUE)
})
output$map <- renderLeaflet({
foundational_map()
})
user_created_map <- reactive({
foundational_map()
})
## observeEvent which makes a call to the Batch-file and saves the image as .png
observeEvent(input$download_pdf, {
img = paste0("screen", runif(1,0,1000), ".png")
str = paste('call screenCapture ', img)
shell(str)
})
}
shinyApp(ui = ui, server = server)
Чтобы удалить браузер и панель инструментов Windows , я манипулировал.bat-файл выглядит так:
Строка 66:
int height = windowRect.bottom - windowRect.top - 37;
Строка 75:
GDI32.BitBlt(hdcDest, 0, -80, width, height, hdcSrc, 0, 0, GDI32.SRCCOPY);
Это работает на моей машине, но вам придется адаптироватьзначения или даже придумать лучшее решение, так как я должен признать, что я не слишком хорош в пакетных сценариях.Это скроет панели инструментов, но внизу будет черная полоса.