R Shiny Leaflet addCircles报经纬度非空错误但数据无空值如何解决
报错原因
- 核心问题是你设置的过滤条件匹配不到数据,导致
reactive返回的data()是空数据框,此时取data()$lat就会返回空值,触发报错。触发匹配失败的直接原因是日期格式不匹配:你的
master数据框中date列是带时分秒的字符串/时间类型(示例格式为2000-01-11T12:45:00),但UI端的sliderInput将日期统一转成了只有年月日的Date类型,两者判等时完全匹配不到记录。 - 次要触发场景:即便日期格式对齐,也可能出现你选中的监测指标(determinand)在所选日期没有上报数据的情况,同样会导致过滤结果为空。
解决方案
按照以下两步修改代码即可:
- 统一日期格式:在生成
master数据框后,新增一行代码将date列转为和输入组件一致的Date类型:
master$date <- as.Date(master$date)
- 绘图前增加空数据判断:修改
renderLeaflet部分的代码,数据为空时不调用addCircles,避免报错:
output$mymap <- renderLeaflet({ plot_data <- data() base_map <- leaflet() %>% addTiles() %>% addRectangles( lng1=1.5, lat1=51.3, lng2=-1.5, lat2=53.3, fillColor = "transparent", color="#000000", weight=2, opacity=1 ) # 仅当有匹配数据时绘制点位 if(nrow(plot_data) > 0){ base_map <- base_map %>% addCircles( lng=plot_data$long, lat=plot_data$lat, radius=plot_data$value, color="#000000", label=plot_data$label, opacity=1, fillOpacity=0.5 ) } return(base_map) })
内容的提问来源于stack exchange,提问作者Zizzipupp
相关产品推荐
相关产品推荐

