传单插件和leafletProxy

Roy*_*lTS 8 r leaflet shiny

我已将传单TextPath插件添加到一个闪亮的应用程序中,类似于此示例.这非常有效:

output$fullscreen_map <- renderLeaflet({
  points <- points_reactive()

  points %>%
    leaflet() %>% 
    addTiles() %>%
    fitBounds(~min(lon), ~min(lat), ~max(lon), ~max(lat)) %>%
    registerPlugin(textPathPlugin) %>%
    onRender("function(el, x, data) {
                data = HTMLWidgets.dataframeToD3(data);
                data = data.map(function(val) { return [val.lat, val.lon]; });
                var layer = L.polyline(data);
                layer.on('mouseover', function () {
                this.setText('  ?  ', {repeat: true, attributes: {fill: 'blue'}});
                });
                layer.on('mouseout', function () {
                this.setText(null);
                });
                layer.addTo(this);
    }", data = points)

})
Run Code Online (Sandbox Code Playgroud)

根据我现在要使用的文档,leafletProxy()以便在响应数据源发生更改时不会重绘整个映射.唉,使用以下代码片段

leafletProxy("fullscreen_map", data = points) %>%
  onRender("function(el, x, data) {
              data = HTMLWidgets.dataframeToD3(data);
              data = data.map(function(val) { return [val.lat, val.lon]; });
              var layer = L.polyline(data);
              layer.on('mouseover', function () {
              this.setText('  ?  ', {repeat: true, attributes: {fill: 'blue'}});
              });
              layer.on('mouseout', function () {
              this.setText(null);
              });
              layer.addTo(this);
  }", data = points)
Run Code Online (Sandbox Code Playgroud)

不按预期工作.我假设这是因为onRender只在新的渲染发生时调用,而整个点leafletProxy是不重新渲染?如果这是正确的,有没有办法使用其他方法吗?

dag*_*elf 0

文档说:影响 renderLeaflet 表达式的活动输入和表达式将导致整个地图从头开始重新绘制,并重置地图位置和缩放级别。

听起来你必须更深入地研究Leaflet或自己触发leafletProxy,并通过使用两个数据源来确保数据源不会改变......(也许“Proxy”在这里是一个用词不当。)

看看这些插件是否可以提供帮助:https ://leafletjs.com/plugins#dynamiccustom-data-loading