You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Leaflet中根据数据自定义图标形状、颜色及标记颜色?

问题描述

我希望在地图上绘制数据,使icon形状、iconColor和markerColor均基于数据本身。

示例代码

library(data.table)
library(leaflet)
library(webshot2)
library(htmlwidgets)
library(fontawesome)

len <- 20

dat <- data.table(
  lat = runif(len, min = -90, max = 90), 
  lon = runif(len, min = -180, max = 180), 
  activity = sample(x = c('person-hiking', 'house', 'map-marker', 'user-gear'), size = len, replace = T),
  marker_color = sample(x = c('blue', 'cadetblue', 'lightgray'), size = len, replace = T), 
  icon_color = sample(x = c('white', 'black'), size = len, replace = T)
)

icons_1 <- awesomeIcons(
  icon = dat$activity, 
  markerColor = dat$marker_color, 
  iconColor = dat$icon_color,
  library = 'fa'
)

icons_2 <- awesomeIcons(
  icon = 'map_marker',
  markerColor = dat$marker_color, 
  iconColor = 'black',
  library = 'fa'
)

icons_3 <- makeAwesomeIcon(text = fa('user-gear'))


plt <- leaflet(data = dat, options = leafletOptions(zoomControl = FALSE)) %>% addTiles() %>%
  addAwesomeMarkers(~lon, ~lat, icon = icons_1) %>%
  # addAwesomeMarkers(~lon, ~lat, icon = icons_2) %>%
  # addAwesomeMarkers(~lon, ~lat, icon = icons_3) %>%
  addScaleBar(position = 'bottomright', 
              options = scaleBarOptions(maxWidth = 200, metric = T, imperial = T)) %>% 
  addProviderTiles(provider = providers$CartoDB.DarkMatterNoLabels) 

输出结果

  • icons_1能正确显示markerColor,但仅当icon_color设为black且图标为map-marker时,icon_color才显示正常。(显示效果:多数图标颜色未按设定值生效,仅map-marker图标以黑色正常显示)
  • 为排查是否与icon参数有关,尝试使用icons_2(固定图标为map_marker、图标色为black),但问题仍未解决。(显示效果:标记颜色正常,但图标颜色依旧不符合预期)
  • 通过data.table中activity指定的单个图标可正常工作,用icons_3测试user-gear图标时,显示正常。(显示效果:单个user-gear图标能正确渲染)

我能创建单个自定义图标并应用于所有标记,但不知道如何实现批量自定义,让每个标记的图标形状、图标颜色和标记颜色都根据数据动态设置。

内容的提问来源于stack exchange,提问作者Gautam

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 21:35:00