使用固定缩放和边界框导出传单地图而不填充

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用固定缩放和边界框导出传单地图而不填充相关的知识,希望对你有一定的参考价值。

我知道我可以使用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参数会有所帮助,但我不确定如何自动获取正确的值。此外,所得到的图像将非常大,从而需要降低分辨率。

如何在指定的缩放级别导出包含意大利的地图区域而无需额外填充?

答案

我不知道你想要的是什么(缩放= 12和整个意大利)......这两件事对我来说似乎是互相排斥的...除非你有一个巨大的数字......正如你的建议。

我不确定,但也许你的填充问题的答案是在webshot的vwidth选项中。我想你的身材需要高于宽,所以vwidth <vheight ...

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

以上是关于使用固定缩放和边界框导出传单地图而不填充的主要内容,如果未能解决你的问题,请参考以下文章

如何在没有服务器支持的情况下使用传单放大浏览器

传单 - Fitbounds 并保持居中

在传单中获取WMS的最小缩放级别

显示图像的传单瓦片未找到丢失的瓦片的象

从反应传单中的地图中删除缩放控件

(Android) 使用地图标记创建边界框并在 Google Map V2 中获取其宽度