mapview多zcol场景下popupTable所有多边形弹窗显示相同值问题
问题根因
当mapview()传入多个zcol值时,函数内部会为每个zcol单独生成独立的矢量图层,直接预生成popupTable(map, ...)的弹窗列表无法和多图层的每个要素做一一映射,导致所有弹窗默认绑定数据集第一条记录的内容。
另外注意你给出的示例代码存在参数位置错误:popup是mapview的顶层参数,不应写在zcol的向量内。
可行解决方法
- 方法1:向
popup参数传入匿名函数,让每个图层渲染时自动匹配对应要素的弹窗内容,适配所有版本的mapview
# R 4.1+ 匿名函数写法 mapview(map, zcol = c("variable1", "variable2"), popup = \(x) popupTable(x, zcol = c("column1","column2","column4"))) # 低版本R替换为function写法 mapview(map, zcol = c("variable1", "variable2"), popup = function(x) popupTable(x, zcol = c("column1","column2","column4")))
- 方法2:手动拆分生成单zcol图层再叠加,完全规避多zcol的映射问题
# 分别生成每个zcol对应的图层,复用单zcol时的正常逻辑 lyr_var1 <- mapview(map, zcol = "variable1", popup = popupTable(map, zcol = c("column1","column2","column4"))) lyr_var2 <- mapview(map, zcol = "variable2", popup = popupTable(map, zcol = c("column1","column2","column4"))) # 直接叠加图层即可得到多zcol切换的地图效果 lyr_var1 + lyr_var2
- 方法3:全局配置弹窗规则,不需要在
mapview调用中单独传popup参数
# 提前设置全局弹窗要展示的字段 mapviewOptions(popup = function(x) popupTable(x, zcol = c("column1","column2","column4"))) # 直接调用多zcol的mapview即可 mapview(map, zcol = c("variable1", "variable2"))
内容的提问来源于stack exchange,提问作者Centure
相关产品推荐
相关产品推荐

