Learn R Programming

leafem (version 0.1.3)

addGeotiff: Add a GeoTIFF file to a leaflet map using optimised rendering.

Description

Add a GeoTIFF file to a leaflet map using optimised rendering.

Usage

addGeotiff(
  map,
  file = NULL,
  url = NULL,
  group = NULL,
  layerId = NULL,
  resolution = 96,
  opacity = 0.8,
  options = leaflet::tileOptions(),
  colorOptions = NULL,
  pixelValuesToColorFn = NULL,
  ...
)

Arguments

map

the map to add the raster data to.

file

path to the GeoTIFF file to render.

url

url to the GeoTIFF file to render. Ignored if file is provided.

group

he name of the group this raster image should belong to.

layerId

the layerId.

resolution

the target resolution for the simple nearest neighbor interpolation. Larger values will result in more detailed rendering, but may impact performance. Default is 96 (pixels).

opacity

opacity of the rendered layer.

options

options to be passed to the layer. See tileOptions for details.

colorOptions

list defining the palette, breaks and na.color to be used.

pixelValuesToColorFn

optional JS function to be passed to the browser. Can be used to fine tune and manipulate the color mapping. See examples & https://github.com/r-spatial/leafem/issues/25 for some examples.

...

currently not used.

Value

A leaflet map object.

Details

This uses the leaflet plugin 'georaster-layer-for-leaflet' to render GeoTIFF data. See https://github.com/GeoTIFF/georaster-layer-for-leaflet for details. The GeoTIFF file is read directly in the browser using geotiffjs (https://geotiffjs.github.io/), so there's no need to read data into the current R session. GeoTIFF files can be read from the file system or via url. The clue is that rendering uses simple nearest neighbor interpolation on-the-fly to ensure smooth rendering. This enables handling of larger rasters than with the standard addRasterImage.

Examples

Run this code
# NOT RUN {
if (interactive()) {
  library(leaflet)
  library(leafem)
  library(stars)

  tif = system.file("tif/L7_ETMs.tif", package = "stars")
  x1 = read_stars(tif)
  x1 = x1[, , , 3] # band 3

  tmpfl = tempfile(fileext = ".tif")

  write_stars(st_warp(x1, crs = 4326), tmpfl)

  myCustomJSFunc = htmlwidgets::JS(
    "
      pixelValuesToColorFn = (raster, colorOptions) => {
        const cols = colorOptions.palette;
        var scale = chroma.scale(cols);

        if (colorOptions.breaks !== null) {
          scale = scale.classes(colorOptions.breaks);
        }
        var pixelFunc = values => {
          let clr = scale.domain([raster.mins, raster.maxs]);
          if (isNaN(values)) return colorOptions.naColor;
          return clr(values).hex();
        };
        return pixelFunc;
      };
    "
  )

  leaflet() %>%
    addTiles() %>%
    addGeotiff(
      file = tmpfl
      , opacity = 0.9
      , colorOptions = colorOptions(
        palette = grey.colors
        , na.color = "transparent"
      )
      , pixelValuesToColorFn = myCustomJSFunc
    )

}

# }

Run the code above in your browser using DataLab