icons {leaflet} | R Documentation

## 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

    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/examples/custom-icons/leaf-%s.png", group),
        shadowUrl = "http://leafletjs.com/examples/custom-icons/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

[Package leaflet version 2.0.1 Index]