You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

flexdashboard中leafgl的WebGL点加载后不可见,需平移缩放才显示如何解决

WebGL点图层加载后默认不可见问题修复

问题描述

页面加载完成后,WebGL点默认处于不可见状态,只有执行平移或缩放操作后才会显示,需要实现点图层在页面加载时立即正常可见。

  • 页面加载后无点显示效果:
    页面加载后无点显示
  • 平移或缩放后点正常显示效果:
    平移或缩放后点正常显示

可复现代码

以下代码可直接复制到Rmd文件中执行编织复现问题:

---
title: "Untitled"
output: 
  flexdashboard::flex_dashboard:
    orientation: columns
    vertical_layout: fill
---

```{r setup, include=TRUE}
library(flexdashboard)
library(leaflet)
library(leafgl)
library(sf)

n = 100

df1 = data.frame(id = 1:n,
                 x = rnorm(n, 10, 3),
                 y = rnorm(n, 49, 1.8))

pts = st_as_sf(df1, coords = c("x", "y"), crs = 4326)

leaflet() %>%
  addProviderTiles(provider = providers$CartoDB.DarkMatter) %>%
  addGlPoints(data = pts, group = "pts") %>%
  setView(lng = 10.5, lat = 49.5, zoom = 6)
## 会话信息

sessionInfo()
R version 4.1.0 (2021-05-18)
Platform: x86_64-apple-darwin17.0 (64-bit)
Running under: macOS Catalina 10.15.7

Matrix products: default
BLAS: /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libBLAS.dylib
LAPACK: /Library/Frameworks/R.framework/Versions/4.1/Resources/lib/libRlapack.dylib

locale:
[1] en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8

attached base packages:
[1] stats graphics grDevices utils
[5] datasets methods base

other attached packages:
[1] sf_1.0-4 leafgl_0.1.1
[3] leaflet_2.0.4.1 flexdashboard_0.5.2

loaded via a namespace (and not attached):
[1] Rcpp_1.0.7 compiler_4.1.0
[3] pillar_1.6.4 class_7.3-19
[5] tools_4.1.0 digest_0.6.28
[7] tibble_3.1.6 jsonlite_1.7.2
[9] evaluate_0.14 lifecycle_1.0.1
[11] pkgconfig_2.0.3 rlang_0.4.12
[13] DBI_1.1.1 crosstalk_1.2.0
[15] xfun_0.28 fastmap_1.1.0
[17] e1071_1.7-9 dplyr_1.0.7
[19] knitr_1.36 generics_0.1.1
[21] htmlwidgets_1.5.4 vctrs_0.3.8
[23] tidyselect_1.1.1 classInt_0.4-3
[25] grid_4.1.0 glue_1.5.0
[27] R6_2.5.1 fansi_0.5.0
[29] rmarkdown_2.11 purrr_0.3.4
[31] magrittr_2.0.1 htmltools_0.5.2
[33] ellipsis_0.3.2 units_0.7-2
[35] assertthat_0.2.1 KernSmooth_2.23-20
[37] utf8_1.2.2 proxy_0.4-26
[39] crayon_1.4.2

## 解决方案
该问题是leafgl图层初始化时,地图容器尺寸未完成计算,导致WebGL渲染视口不匹配导致的,两种修复方案可任选其一:
### 方案1:手动触发地图重绘
在leaflet管道末尾添加重绘触发代码,加载完成后自动刷新视口:
```r
leaflet() %>%
  addProviderTiles(provider = providers$CartoDB.DarkMatter) %>%
  addGlPoints(data = pts, group = "pts") %>%
  setView(lng = 10.5, lat = 49.5, zoom = 6) %>%
  # 新增重绘逻辑
  htmlwidgets::onRender("function(el, x) {
    setTimeout(() => this.invalidateSize(), 0)
  }")

方案2:明确指定点图层透明度

部分版本leafgl未正确初始化图层透明度参数,手动指定opacity=1即可解决:

# 仅修改addGlPoints参数即可
addGlPoints(data = pts, group = "pts", opacity = 1)

内容的提问来源于stack exchange,提问作者Rich Pauloo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 06:45:03