Leaflet 2.0.0等值区域图不显示(dashArray错误)求助
我之前帮朋友排查过几乎一模一样的问题,Leaflet升级到2.0.0后确实有不少隐性的兼容性变化,R不报错是因为后端没触发错误,但前端Leaflet的JS引擎可能已经在默默处理无效数据或兼容性问题了。给你几个针对性的排查和解决方向:
先验证空间数据的有效性
Leaflet 2.0.0对GeoJSON/几何数据的规范要求比1.1.0严格很多,之前能“宽容”加载的无效几何(比如未闭合的多边形、重复坐标、invalid sf对象),新版会直接跳过渲染。
你可以用这两个工具快速检查:# 检查sf对象的几何有效性 library(sf) st_is_valid(your_sf_data) # 返回FALSE的就是无效几何 your_fixed_data <- st_make_valid(your_sf_data) # 修复无效几何 # 验证GeoJSON格式 library(geojsonlint) geojson_lint(geojsonio::geojson_json(your_sf_data))修复后再重新加载地图,大概率能解决大部分多边形不显示的问题。
检查Leaflet函数的语法变化
新版Leaflet调整了一些函数的默认参数和行为,比如addPolygons()里的weight、fillColor绑定方式,或者对sp对象的支持优先级降低。你可以先写一个极简测试代码,用手动构造的简单多边形验证新版Leaflet是否正常工作:library(shiny) library(leaflet) ui <- fluidPage(leafletOutput("map")) server <- function(input, output) { output$map <- renderLeaflet({ # 构造一个简单的矩形多边形 poly <- sf::st_sfc(sf::st_polygon(list(rbind(c(-120, 40), c(-119, 40), c(-119, 41), c(-120, 41), c(-120, 40))))) poly_sf <- sf::st_sf(geom = poly) leaflet() %>% addTiles() %>% addPolygons(data = poly_sf) }) } shinyApp(ui, server)如果这个测试代码能正常显示多边形,说明你的问题出在原有数据或复杂代码的细节上;如果还是不显示,那可能是Shiny和Leaflet的版本兼容性问题。
更新Shiny并清空浏览器缓存
Leaflet 2.0.0依赖较新的Shiny版本支持,先确保你的Shiny是最新版:update.packages("shiny")另外,Chrome的缓存可能会残留旧版Leaflet的JS文件,导致前端加载异常。按
Ctrl+Shift+Del打开清除缓存界面,勾选“缓存的图片和文件”,清除后重启浏览器再测试。用Chrome开发者工具排查前端错误
R控制台没报错不代表前端没问题!按F12打开Chrome开发者工具,切换到Console标签页,刷新你的Shiny应用,看看有没有红色的JS错误信息——比如GeoJSON解析失败、Leaflet初始化时的参数错误,这些才是多边形不加载的真正原因。我之前遇到的情况就是前端报“Invalid GeoJSON object”,但R控制台完全没提示。
内容的提问来源于stack exchange,提问作者Willem

