gpt4 book ai didi

r - 是否可以在 R Shiny 中更改传单 map 屏幕截图大小?

转载 作者:行者123 更新时间:2023-12-04 01:57:42 24 4
gpt4 key购买 nike

我找到了两个关于将 Leaflet Maps 保存为 shiny 的答案:

  1. How to save a leaflet map in Shiny

  2. How to save Leaflet in R map as png or jpg file?

它们的核心思想是使用mapshot()代替webshot()。在这种情况下,使用 cliprect 参数设置屏幕截图大小。它定义了一个与视口(viewport)的高度和宽度相匹配的剪裁矩形。所以,如果 cliprect = 'viewport'我想,屏幕截图上的 map 会在我的屏幕上看起来像。但事实并非如此。

我尝试使用上面示例中的代码,它们给出了相同的结果。

这就是为什么我的问题是:是否可以在 R Shiny 中更改传单 map 屏幕截图大小,如果可以,如何完成?

My screen in browser with map looks likes this

I hope to get screenshot like this

But I got this

最佳答案

编辑:原始答案下载了最初呈现的 map ,没有考虑用户与 map 的交互。我使用 this answer 更新了我的答案因此下载反射(reflect)了用户看到的 map 。

  1. 使用js获取 map div的当前大小(基于thisthis)
  2. 根据 current zoom and map center 更新 map
  3. 使用 vwidthvheight 更改屏幕截图的大小

示例基于 thisthis :

library(leaflet)
library(mapview)
library(shiny)

ui <- fluidPage(
# 1. js to get width/height of map div
tags$head(tags$script('
var dimension = [0, 0];
$(document).on("shiny:connected", function(e) {
dimension[0] = document.getElementById("map").clientWidth;
dimension[1] = document.getElementById("map").clientHeight;
Shiny.onInputChange("dimension", dimension);
});
$(window).resize(function(e) {
dimension[0] = document.getElementById("map").clientWidth;
dimension[1] = document.getElementById("map").clientHeight;
Shiny.onInputChange("dimension", dimension);
});
')),
leafletOutput("map"),
downloadButton("dl", "Download Map")
)

server <- function(input, output, session) {

# reactive values to store map
vals <- reactiveValues()

# create base map
output$map <- renderLeaflet({
vals$base <- leaflet() %>%
addProviderTiles(providers$OpenStreetMap) %>%
addTiles()
})

# create map as viewed by user
observeEvent({
input$map_zoom
input$map_center
}, {
vals$current <- vals$base %>%
setView(lng = input$map_center$lng,
lat = input$map_center$lat,
zoom = input$map_zoom)
}
)

# create download
output$dl <- downloadHandler(
filename = "map.png",

content = function(file) {
mapshot(vals$current, file = file,
# 2. specify size of map based on div size
vwidth = input$dimension[1], vheight = input$dimension[2])
}
)

}
shinyApp(ui = ui, server = server)

关于r - 是否可以在 R Shiny 中更改传单 map 屏幕截图大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49428073/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com