Экспорт листовки с фиксированным масштабом и ограничительной рамкой без отступов - PullRequest
0 голосов
/ 01 января 2019

Я знаю, что могу использовать mapview :: mapshot , чтобы экспортировать карту листовки из Rstudio в виде PNG.Однако я не смог точно указать уровень масштабирования и регион экспортируемой карты.

Заимствование некоторого кода из этого ответа на связанный вопрос, давайте рассмотрим следующее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, что лучше, но а) не соответствует указанному уровню масштабирования и б) имеет много нежелательных горизонтальных отступов.

IПредположим, что добавление аргументов width и height к вызову leaflet() поможет, но я не уверен, как автоматически получить правильные значения.Также полученное изображение будет очень большим, что потребует снижения разрешения.

Как я могу экспортировать регион карты, содержащий Италию, с указанным уровнем масштабирования без дополнительного заполнения?

1 Ответ

0 голосов
/ 29 апреля 2019

Я не знаю, возможно ли то, что вы хотите (zoom = 12 и вся Италия) ... эти две вещи кажутся мне взаимоисключающими ... если у вас нет огромной фигуры ... как вы предложили.

Не знаю наверняка, но, возможно, ответ на ваш вопрос о заполнении находится в параметре vwidth в webshot.Я полагаю, ваша фигура должна быть выше, чем широкая, поэтому vwidth

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