我按照这个例子的类比,在闪亮的应用程序中添加了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)
})
按照文档的说明,我现在想使用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)
我认为这不像预期的那样工作。我猜测是因为只有在发生新的渲染时才会调用onRender
,而leafletProxy
的整个意义就在于不重新渲染?如果我的猜测是正确的,那么是否有其他方法可以实现这一点呢?