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

Shiny嵌入Leaflet通过observer渲染时自定义聚合标记不显示问题

问题根因

你遇到的问题根源不是leafletProxy无法处理响应逻辑,而是clearMarkerClusters()仅会清除页面上可见的聚合标记,不会销毁底层的聚合图层实例,首次渲染生成的默认聚合图层配置会一直留存,后续自定义的iconCreateFunction不会在旧图层上生效。


可行解决方案

方案1:指定clusterId完整清理聚合图层

调用addMarkers时通过clusterId给聚合图层指定唯一标识,更新前先调用removeMarkerClusters()指定ID销毁整个聚合图层,而不是仅清空可见标记,同时补充clearMarkers()清理散落的单个标记,避免残留。
修改后的observer代码如下:

observe({
  if (input$markers == "Type A") {
    leafletProxy(mapId = "map") %>%
      # 先销毁指定ID的聚合图层,再清空普通标记
      removeMarkerClusters(clusterId = "quake_cluster") %>%
      clearMarkers() %>%
      addMarkers(data = quakes,
                 lng = ~long,
                 lat = ~lat,
                 clusterId = "quake_cluster", # 固定聚合图层ID
                 clusterOptions = markerClusterOptions())
  } else {
    leafletProxy(mapId = "map") %>%
      removeMarkerClusters(clusterId = "quake_cluster") %>%
      clearMarkers() %>%
      addMarkers(data = quakes,
                 lng = ~long,
                 lat = ~lat,
                 clusterId = "quake_cluster",
                 clusterOptions = markerClusterOptions(iconCreateFunction = JS("function (cluster) {
                                                                               return new L.Icon({iconUrl: 'https://nicocriscuolo.github.io/resistancebank_plots/markers/marker_3D.png',
                                                                               iconSize: [18, 27],
                                                                               iconAnchor: [10, 26],
                                                                               shadowUrl: 'https://nicocriscuolo.github.io/resistancebank_plots/markers/shadow-marker_3D.png',
                                                                               shadowSize: [26, 39],
                                                                               shadowAnchor: [5, 28]});}")))
  }
})

方案2:预注册聚合配置

如果切换频率较高,可以把两种聚合的图标创建函数提前在地图初始化时注入到前端JS上下文,避免动态添加时JS函数未解析的问题,同时通过leafletProxy调用前端方法切换聚合样式,性能会更优。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 09:45:03