Add a GeoTIFF file to a leaflet map using optimised rendering.
Add a GeoTIFF file to a leaflet map using optimised rendering.
addGeotiff( map, file = NULL, url = NULL, group = NULL, layerId = NULL, resolution = 96, opacity = 0.8, options = leaflet::tileOptions(), colorOptions = NULL, pixelValuesToColorFn = NULL, ... )
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 |
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 |
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. |
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
.
A leaflet map object.
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 ) }
Please choose more modern alternatives, such as Google Chrome or Mozilla Firefox.