【发布时间】:2019-06-12 19:54:53
【问题描述】:
我正在尝试获取用户在 RShiny Leaflet 地图上使用测量工具时的结果(具体区域)。根据leaflet-measure documentation,您可以在名为 measurestart 和 measurefinish 的传单地图上订阅 2 个事件。我需要订阅这些事件并获取事件提供的结果数据,但我不知道如何。
我尝试了许多不同的方式来订阅该事件,但都没有被地图触发。
这是一些感觉最接近工作的代码:
observeEvent(input$map1_measurefinish, {
print("user finished measurement")
})
或
observeEvent(input$measurefinish, {
print("user finished measurement")
})
我的服务器部分的传单代码如下所示:
output$map1 <-renderLeaflet({
m<-leaflet() %>%
addProviderTiles('Esri.WorldImagery') %>%...
# there's more code here but I don't think its relevant for the issue
我需要做什么来 1. 正确订阅事件以检测测量何时完成 2. 接收输出数据以在观察者方法中执行操作?
编辑:解决方案(由@NicE 给出)
我对代码所做的更改以使其正常工作:
在传单里面添加了标记代码:
output$map1 <-renderLeaflet({
m<-leaflet() %>%
addMeasure() %>%
# Start
htmlwidgets::onRender("
function(el, x) {
var myMap = this;
myMap.on('measurefinish',
function (e) {
Shiny.onInputChange('selectedArea', e.area);
Shiny.onInputChange('inputtedCoordinates', e.lastCoord);
})
}")
# End
另外添加了一个观察者(会做比打印更激动人心的事情):
observeEvent(input$selectedArea, {
print(paste0("area received:", input$selectedArea))
})
【问题讨论】:
-
我无法让它工作。我使用 tags$script(HTML()) R 函数将代码放入,但仍然无法获得接收处理程序的方法。也许我没有写接收器对吗?我假设函数名称“完成”或“点击”将是发送它的方法的名称,还是其他?
-
如果您可以包含一个完全可重现的示例(在这种情况下是一个工作闪亮的应用程序),那就太好了。不仅仅是一些sn-ps。 ;)
-
@SeGa 很高兴知道,你所做的例子几乎就是我所做的一切,但下次我一定会记住的:)