首页 > 解决方案 > R中的传单:根据一层自动设置视图

问题描述

我在 R 中的 Leaflet 中制作了一些地图,这些地图由多边形层和标记层组成。多边形通常覆盖比标记更大的区域,但我想专门缩放到标记区域。

我知道我可以手动指定纬度/经度和缩放级别,但我不想这样做,因为此代码将生成许多不同的地图,覆盖我的数据集的不同子集(或不同的数据集)。

这是生成地图的代码的简化版本。我认为这不一定需要完整的代表来回答这个问题,但如果有必要可以这样做。

  addProviderTiles(providers$CartoDB.Positron, group = "Basemap") %>%
  addPolygons(data = seat_boundary, fillColor = "white", fillOpacity = 0.0, weight = 1.5, opacity = 0.6, color = "red", group = "Seat boundary") %>%
  addCircleMarkers(data = formalvotes_by_booth_subarea, fillColor = ~subarea_pal(sub_areas), lng=~longitude, lat=~latitude, radius = ~circle_size, fillOpacity = 1, color = 'white', opacity = 1, weight = 1.2, popup = ~popup) %>%
  addLegend(pal = subarea_pal, values = formalvotes_by_booth_subarea$sub_areas, opacity = 1)```

我也认为我可以通过平均标记数据集中的最大和最小纬度以及最大和最小经度来解决这个问题的一半,以提出一个中心点来聚焦地图,但它不能确保缩放将是正确的(实际上我不确定您是否可以设置纬度/经度而不设置缩放)。

谢谢!

标签: rleaflet

解决方案


你试过fitBounds吗?从您发布的内容开始,我将首先获取您的标记的 bbox 坐标:

library(sf)

bounds <- markers %>% 
  st_bbox() %>% 
  as.character()

然后将它们传递给fitBounds函数:

library(leaflet)

leaflet %>%
  addPolygons(data = polygons) %>%
  addCircleMarkers(data = markers) %>%
  fitBounds(bounds[1], bounds[2], bounds[3], bounds[4])


推荐阅读