leaflet (version 1.0.1)

icons: Create a list of icon data

Description

An icon can be represented as a list of the form list(iconUrl, iconSize, ...). This function is vectorized over its arguments to create a list of icon data. Shorter argument values will be re-cycled. NULL values for these arguments will be ignored.

Usage

icons(iconUrl = NULL, iconRetinaUrl = NULL, iconWidth = NULL, iconHeight = NULL, iconAnchorX = NULL, iconAnchorY = NULL, shadowUrl = NULL, shadowRetinaUrl = NULL, shadowWidth = NULL, shadowHeight = NULL, shadowAnchorX = NULL, shadowAnchorY = NULL, popupAnchorX = NULL, popupAnchorY = NULL, className = NULL)

Arguments

iconUrl
the URL or file path to the icon image
iconRetinaUrl
the URL or file path to a retina sized version of the icon image
iconWidth, iconHeight
size of the icon image in pixels
iconAnchorX, iconAnchorY
the coordinates of the "tip" of the icon (relative to its top left corner, i.e. the top left corner means iconAnchorX = 0 and iconAnchorY = 0), and the icon will be aligned so that this point is at the marker's geographical location
shadowUrl
the URL or file path to the icon shadow image
shadowRetinaUrl
the URL or file path to the retina sized version of the icon shadow image
shadowWidth, shadowHeight
size of the shadow image in pixels
shadowAnchorX, shadowAnchorY
the coordinates of the "tip" of the shadow
popupAnchorX, popupAnchorY
the coordinates of the point from which popups will "open", relative to the icon anchor
className
a custom class name to assign to both icon and shadow images

Value

A list of icon data that can be passed to the icon argument of addMarkers().

Examples

Run this code
library(leaflet)

# adapted from http://leafletjs.com/examples/custom-icons.html

iconData = data.frame(
  lat = c(rnorm(10, 0), rnorm(10, 1), rnorm(10, 2)),
  lng = c(rnorm(10, 0), rnorm(10, 3), rnorm(10, 6)),
  group = rep(sort(c('green', 'red', 'orange')), each = 10),
  stringsAsFactors = FALSE
)

leaflet() %>% addMarkers(
  data = iconData,
  icon = ~ icons(
    iconUrl = sprintf('http://leafletjs.com/docs/images/leaf-%s.png', group),
    shadowUrl = 'http://leafletjs.com/docs/images/leaf-shadow.png',
    iconWidth = 38, iconHeight = 95, shadowWidth = 50, shadowHeight = 64,
    iconAnchorX = 22, iconAnchorY = 94, shadowAnchorX = 4, shadowAnchorY = 62,
    popupAnchorX = -3, popupAnchorY = -76
  )
)


# use point symbols from base R graphics as icons
pchIcons = function(pch = 0:14, width = 30, height = 30, ...) {
  n = length(pch)
  files = character(n)
  # create a sequence of png images
  for (i in seq_len(n)) {
    f = tempfile(fileext = '.png')
    png(f, width = width, height = height, bg = 'transparent')
    par(mar = c(0, 0, 0, 0))
    plot.new()
    points(.5, .5, pch = pch[i], cex = min(width, height) / 8, ...)
    dev.off()
    files[i] = f
  }
  files
}

iconData = matrix(rnorm(500), ncol = 2)
res = kmeans(iconData, 10)
iconData = cbind(iconData, res$cluster)
colnames(iconData) = c('lat', 'lng', 'group')
iconData = as.data.frame(iconData)

# 10 random point shapes for the 10 clusters in iconData
shapes = sample(0:14, 10)
iconFiles = pchIcons(shapes, 40, 40, col = 'steelblue', lwd = 2)

# note the data has 250 rows, and there are 10 icons in iconFiles; they are
# connected by the `group` variable: the i-th row of iconData uses the
# group[i]-th icon in the icon list
leaflet() %>% addMarkers(
  data = iconData,
  icon = ~ icons(
    iconUrl = iconFiles[group],
    popupAnchorX = 20, popupAnchorY = 0
  ),
  popup = ~ sprintf(
    'lat = %.4f, long = %.4f, group = %s, pch = %s', lat, lng, group, shapes[group]
  )
)

unlink(iconFiles)  # clean up the tmp png files that have been embedded

Run the code above in your browser using DataCamp Workspace