R中的Leaflet:自动按一层设置视图
Leaflet in R: automatically setting view according to one layer
我正在用 R 中的 Leaflet 制作一些地图,这些地图由多边形层和标记层组成。多边形通常覆盖比标记更大的区域,但我想专门缩放到标记区域。
我知道我可以手动指定 lat/longs 和缩放级别,但我不想这样做,因为这段代码会生成很多不同的地图,覆盖我的数据集的不同子集(或在不同的数据集上).
这是生成地图的代码的简化版本。我认为这不一定需要完整的代表来回答问题,但如果需要可以这样做。
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)```
我还认为我可以通过平均标记数据集中的最大和最小纬度以及最大和最小经度来得出一个中心点来聚焦地图,从而解决这个问题,但它不会确保缩放是正确的(实际上我不确定您是否可以设置 lat/long 而不是设置缩放)。
谢谢!
你试过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])
我正在用 R 中的 Leaflet 制作一些地图,这些地图由多边形层和标记层组成。多边形通常覆盖比标记更大的区域,但我想专门缩放到标记区域。
我知道我可以手动指定 lat/longs 和缩放级别,但我不想这样做,因为这段代码会生成很多不同的地图,覆盖我的数据集的不同子集(或在不同的数据集上).
这是生成地图的代码的简化版本。我认为这不一定需要完整的代表来回答问题,但如果需要可以这样做。
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)```
我还认为我可以通过平均标记数据集中的最大和最小纬度以及最大和最小经度来得出一个中心点来聚焦地图,从而解决这个问题,但它不会确保缩放是正确的(实际上我不确定您是否可以设置 lat/long 而不是设置缩放)。
谢谢!
你试过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])