r - 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)```
我也认为我可以通过平均标记数据集中的最大和最小纬度以及最大和最小经度来解决这个问题的一半,以提出一个中心点来聚焦地图,但它不能确保缩放将是正确的(实际上我不确定您是否可以设置纬度/经度而不设置缩放)。
谢谢!
解决方案
你试过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])
推荐阅读
- flutter - 如何正确加载页面以使其每次都能正常工作
- python - numpy 结果不应该依赖于顺序
- javascript - 如何去除 MongoDB 聚合管道中不符合过滤条件的结果?
- c - fopen() 总是返回 0x0
- xamarin.android - Xamarin Android Webview 相机权限已授予但无访问权限
- python - 在熊猫中手动创建滚动窗口
- node.js - 无法运行 npm start,出现几个错误
- javascript - Puppeteer 在查询中返回未定义
- javascript - 有什么方法可以在单击按钮时调用 IIFE 函数?
- r - 平滑每个 x 具有多个 y 的时间序列