我正在尝试向我想要显示的标记添加不同的图标。我有这样的不同类别
category <- data() %>%
dplyr::select(category) %>%
distinct()
它看起来像这样
$ category: chr "Traffic" "Livelihood" "Waste" ....
我有一个徽标变量,用于为类别选择不同的图标
logos <- awesomeIconList(
"Pothole" = makeAwesomeIcon(
icon = "road",
markerColor = "black"
),
"Garbage Collection" = makeAwesomeIcon(
icon = "trash",
markerColor = "green"
),
"Air Quality" = makeAwesomeIcon(
icon = "cloud",
markerColor = "blue"
)
)
我已经在观察函数中编写了逻辑,我将其与主逻辑分开,但我不知道为什么这对我不起作用。当我没有使用观察功能并且没有使用传单代理时,这是有效的。当我在 renderLeaflet 函数中使用它时,它就可以工作了。
我不知道我在这里能做什么,并且从错误中我对逻辑不太了解
observe({
filtered_data <- bqdata() %>%
dplyr::filter(
if ("All" %in% input$category) {
category != ""
} else {
category %in% input$category
}
)
proxy <- leafletProxy("layer_data")
if (input$cluster) {
proxy %>% addAwesomeMarkers(
lat = filtered_data$lat,
icon = ~logos[category],
lng = filtered_data$long,
popup = paste0(
"<b>Title: </b>", filtered_data$title, "<br>",
"<b>Type: </b>", filtered_data$type, "<br>",
"<b>Category: </b>", filtered_data$category, "<br>",
"<b>Status: </b>", filtered_data$status, "<br>",
"<b>Description: </b>", filtered_data$description, "<br>",
"<b>Address: </b>", filtered_data$address, "<br>",
"<b>City Name: </b>", filtered_data$city, "<br>",
"<b>State Name: </b>", filtered_data$state, "<br>"
),
clusterOptions = markerClusterOptions()
)
} else {
proxy %>% clearMarkerClusters()
}
})
您有 2 个变量被引用,但没有为
addAwesomeMarkers
函数定义数据以引用变量(~
表示法)。像 addMarkers 这样的传单函数有一个 data.frame,可以使用“data”参数定义,或者从先前的函数传递。如果您使用 data.frame 定义“data”,“filtered_data”,然后只需使用“~”引用 data.frame 中的变量来表示它们来自 data.frame。
proxy %>%
addAwesomeMarkers(
data = filtered_data
lat = ~lat,
lng = ~long,
clusterOptions = markerClusterOptions()
)
我在上面的评论中提到的问题是由于您引用
logos
的方式造成的,使用您的符号应该是:
icon = logos[filtered_data$category]
或者如果您按照我上面提到的方式定义数据参数:
icon = logos[~category]