Leaflet结合Shiny开发如何为用户提供地图最大放大选项
问题排查与修改方案
你当前的配置远没有达到Leaflet的缩放上限,核心是两处配置遗漏导致缩放被限制:
- 首先是你在
addBingTiles的瓦片配置里手动将maxZoom设为了18,这是缩放被拦截的直接原因
你已经持有Bing/谷歌地图的商用授权,官方授权的影像瓦片通常最高支持21~23级的原生缩放(人口密集的城市区域高分辨率瓦片覆盖更完整,偏远区域可能覆盖等级稍低),你可以先将该参数调整为22测试效果。如果需要超过原生瓦片的缩放等级,还可以添加maxNativeZoom参数配置瓦片的原生最高等级,再把maxZoom设为你需要的更高数值,Leaflet会自动拉伸现有瓦片实现更高放大效果,比如tileOptions(minZoom = 0, maxNativeZoom = 22, maxZoom = 25)就可以支持到25级缩放。 - 其次你没有配置Leaflet的全局最大缩放参数,Leaflet默认全局最大缩放为18,优先级高于瓦片层的缩放配置,你需要在
leafletOptions里新增maxZoom参数,数值和瓦片层的最大缩放保持一致即可。
修改后的核心代码示例
field <- raster::shapefile("sampleShapleFile.shp") # shapefile (field) imported library(leaflet) library(leaflet.extras) leaflet(data = field , # 新增全局maxZoom配置,和瓦片层最大缩放对齐 options = leafletOptions(zoomSnap = 0.25, zoomDelta = 0.25, maxZoom = 22)) %>% addFullscreenControl(position = "topleft", pseudoFullscreen = FALSE) %>% addBingTiles( "Aq4GyoG8kzfeKO7Nsav5_BcjVVA_d1ULSTeXeW2zM0aPuANIqhvV5IrFtMjOGX3s", imagerySet = c("AerialWithLabels"), group = "AerialWithLabels", # 调整瓦片层最大缩放,需要拉伸缩放可补充maxNativeZoom参数 options = tileOptions(minZoom = 0, maxZoom = 22) ) %>% addPolygons( fill = FALSE, stroke = TRUE, weight = 5, opacity = 1, color = "#FFFFFF" ) %>% addLegend("bottomright", color = "#FFFFFF", labels = "Test") %>% addMeasure( position = "bottomleft", primaryLengthUnit = "meters", primaryAreaUnit = "sqmeters", activeColor = "#10bae0", completedColor = "#241ad9" ) %>% addDrawToolbar( targetGroup = 'draw', polygonOptions = FALSE, circleOptions = FALSE, rectangleOptions = FALSE, markerOptions = FALSE, circleMarkerOptions = FALSE, editOptions = editToolbarOptions(selectedPathOptions = selectedPathOptions()) ) %>% addScaleBar(position = "topright", options = scaleBarOptions( maxWidth = 1, metric = TRUE, imperial = FALSE ))
如果切换为谷歌地图瓦片,调整逻辑完全一致,修改对应瓦片加载函数里的maxZoom配置即可,配置正确的情况下完全可以达到你ReactJS应用中的放大效果。
内容的提问来源于stack exchange,提问作者string
相关产品推荐
相关产品推荐

