导出具有固定缩放比例和边界框的活页贴图,而无需填充

时间:2018-12-31 22:13:37

标签: r leaflet export zoom

我知道我可以使用mapview::mapshot从Rstudio导出传单地图为PNG。但是,我无法精确指定要导出的地图的缩放级别和区域。

this answer借用一些代码到一个相关的问题,让我们考虑以下MWE。

library(maps)
library(ggmap)
library(maptools)
library(leaflet)
library(mapview)
library(rgdal)

country   <- 'italy';
zoomLevel <- 12;

ita.map <- map( country, fill = TRUE, col = 1, plot = F );
ita.map.ids <- sapply( strsplit( ita.map$names, ':' ), function(x) x[1] );
ita.sp <- map2SpatialPolygons( ita.map, IDs=ita.map.ids, proj4string=CRS("+proj=longlat +datum=WGS84"))

bb<-as.numeric(ita.sp@bbox)

m<-leaflet() %>%
setView(12.48,41.89,zoom=zoomLevel) %>%
  addTiles() %>%
  addPolygons(data=ita.sp)%>%
  addExtent(data=ita.sp)


mapshot(m, file = "italy.png")

产生enter image description here,这是正确的缩放级别,但显然不包含意大利的全部地区。

添加

      %>% fitBounds(bb[1],bb[2],bb[3],bb[4])

上面的代码产生的enter image description here更好,但是a)不遵守指定的缩放级别,b)有很多不需要的水平填充。

我认为向leaflet()调用添加width和height参数会有所帮助,但是我不确定如何自动获取正确的值。同样,所得图像将非常大,因此需要降低分辨率。

如何以指定的缩放级别导出包含意大利的地图区域,而无需附加填充?

1 个答案:

答案 0 :(得分:1)

我不知道您想要什么(缩放= 12,整个意大利)……这两件事对我来说似乎是互斥的……除非您有庞大的身价……如您所愿。

我不确定,但是您的填充问题的答案可能在webshot的vwidth选项中。我想您的身材需要比宽高,所以vwidth

mapshot(m, file = "italy.png", vwidth = 700, vheight = 744)