如何在tmap的view模式下手动设置地图比例尺与显示范围
解决方案
tmap的view模式默认会自动适配图层的最小边界框,你可以通过以下两种方式自定义显示范围:
方案1:在tmap层自定义扩大的边界框(更推荐,和tmap原生逻辑适配)
直接修改原有代码,新增自定义边界框的逻辑即可,可按需调整边界的扩展幅度:
library(sf) library(tmap) library(mapview) coord <- data.frame(Lat=c(0.92, 0.92, 0.93, 0.92, 0.93, 0.93, 1.00, 1.00, 0.99, 0.93), Lon=c(104.58, 104.51, 104.57, 104.50, 104.55, 104.51, 104.59, 104.49, 104.6, 104.61)) sdat <- st_as_sf(coord, coords = c("Lon", "Lat"), crs = "+proj=longlat +datum=WGS84 +no_defs") # 新增:自定义扩大后的边界框,四个偏移量依次对应xmin、ymin、xmax、ymax的调整值,可按需修改 bbox_new <- st_bbox(sdat) bbox_new <- bbox_new + c(-0.2, -0.2, 0.2, 0.2) tmap_mode("view") Map <- tm_basemap("Esri.WorldTopoMap") + tm_shape(sdat, bbox = bbox_new) + # 指定自定义边界框 tm_dots(alpha = 1, title = "Location") lf <- tmap_leaflet(Map) mapshot(lf, file = "Map.png")
方案2:转成leaflet对象后调整视图
适合需要直接指定缩放级别、中心点的场景:
# 承接原始代码生成Map对象后,新增以下逻辑 library(magrittr) lf <- tmap_leaflet(Map) %>% # 自定义中心点和缩放级别,zoom数值越小,显示范围越大 setView(lng = mean(coord$Lon), lat = mean(coord$Lat), zoom = 11) # 也可以用fitBounds直接指定四个边界,效果和自定义bbox一致 # lf <- tmap_leaflet(Map) %>% # fitBounds(lng1 = 104.3, lat1 = 0.7, lng2 = 104.8, lat2 = 1.2) mapshot(lf, file = "Map.png")
内容的提问来源于stack exchange,提问作者FTc
相关产品推荐
相关产品推荐

