我已将传单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是不重新渲染?如果这是正确的,有没有办法使用其他方法吗?
文档说:影响 renderLeaflet 表达式的活动输入和表达式将导致整个地图从头开始重新绘制,并重置地图位置和缩放级别。
听起来你必须更深入地研究Leaflet或自己触发leafletProxy,并通过使用两个数据源来确保数据源不会改变......(也许“Proxy”在这里是一个用词不当。)
看看这些插件是否可以提供帮助:https ://leafletjs.com/plugins#dynamiccustom-data-loading
| 归档时间: |
|
| 查看次数: |
528 次 |
| 最近记录: |