Я хотел бы нанести некоторые данные на карту, где формы 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, поэтому попробовал icons_2 устранить неполадки, но это тоже не сработало:
Значки (указанные с помощью activity в data.table) работают нормально, я проверил один с помощью icons_3:
Я могу создать один собственный значок и использовать его для всех маркеров, но не знаю, как настроить их так, как я хочу.





Есть открытая проблема с некоторыми fontawesome иконками. Что работает, так это передать их как text в awesomeIcons. Также для шрифтов, отличных от черного, используйте шестнадцатеричный код, например. '#FFFFFF' для белого.
library(data.table)
library(leaflet)
library(fontawesome)
len <- 20
set.seed(1)
dat <- data.table(
lat = runif (len, min = -90, max = 90),
lon = runif (len, min = -180, max = 180),
activity = sample(x = c(fa('person-hiking'), fa('house'), fa('map-marker'), fa('user-gear')), size = len, replace = T),
marker_color = sample(x = c('blue', 'cadetblue', 'lightgray'), size = len, replace = T),
icon_color = sample(x = c('#FFFFFF', 'black'), size = len, replace = T)
)
icons_1 <- awesomeIcons(
text = dat$activity,
markerColor = dat$marker_color,
iconColor = dat$icon_color,
library = 'fa'
)
leaflet(data = dat, options = leafletOptions(zoomControl = FALSE)) %>% addTiles() %>%
addAwesomeMarkers(~lon, ~lat, icon = ~ icons_1) %>%
addScaleBar(position = 'bottomright',
options = scaleBarOptions(maxWidth = 200, metric = T, imperial = T)) %>%
addProviderTiles(provider = providers$CartoDB.DarkMatterNoLabels)
Да, я это упустил из виду, извините. Вам нужно использовать шестнадцатеричный код, смотрите мой обновленный ответ.
Спасибо, теперь все работает! Жаль, что я не увидел страницу проблем раньше :)
можно ли настроить/установить непрозрачность маркера при использовании awesomeIcons?
Может быть и не родной, см. напр. вот . Можно было бы создать собственное решение...
Спасибо! Я уже пробовал rgba и hex (с прозрачностью), но по умолчанию он имеет красный цвет. Попробую github.com/ilyankou/Leaflet.IconMaterial завтра.
Спасибо, я попробовал эту версию, и, кажется, по большей части она работает, но
iconColorвсе еще не работает — она отображается как странный серый цвет, но не белый или какой-либо другой цвет.