KingOfBabu
KingOfBabu

Reputation: 409

Edit map with "R for leaflet"

I have a script which allows me to generate a map with with "R for leaflet" :

library(htmlwidgets)
library(raster)
library(leaflet)

# PATHS TO INPUT / OUTPUT FILES
projectPath = "path"
#imgPath = paste(projectPath,"data/cea.tif", sep = "")
#imgPath = paste(projectPath,"data/o41078a1.tif", sep = "") # bigger than standard max size (15431804 bytes is greater than maximum 4194304 bytes)
imgPath = paste(projectPath,"/test.tif", sep = "")
outPath = paste(projectPath, "/leaflethtmlgen.html", sep="")

# load raster image file
r <- raster(imgPath)

# reproject the image, if necessary
#crs(r) <- sp::CRS("+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs")

# color palette, which is interpolated ?
pal <- colorNumeric(c("#FF0000", "#666666", "#FFFFFF"), values(r),
                    na.color = "transparent")

# create the leaflet widget
m <- leaflet() %>%
  addTiles() %>%
  addRasterImage(r, colors=pal, opacity = 0.9, maxBytes = 123123123) %>%
  addLegend(pal = pal, values = values(r), title = "Test")


# save the generated widget to html
# contains the leaflet widget AND the image.
 saveWidget(m, file = outPath, selfcontained = FALSE, libdir = 'leafletwidget_libs')

My problem is that this is generating a html file and I need this map to be dyanamic. For example, when a user click on some html button which is not integrate on the map, I want to add a rectangle on the map. Any solutions would be welcome...

Upvotes: 1

Views: 370

Answers (1)

Ilari Scheinin
Ilari Scheinin

Reputation: 806

Leaflet itself does not provide the interactive functionality you are looking for. One solution is to use shiny, which is a web application framework for R. From simple R code, it generates a web page, and runs R on the server-side to respond to user interaction. It is well documented, has a gallery of examples, and a tutorial to get new users started.

It works well with leaflet. One of the examples on the shiny web site uses it, and also includes a link to the source code.

Update

Actually, if simple showing/hiding of elements is enough, leaflet alone will suffice with the use of groups. From the question it's not very clear how dynamic you need it to be.

Upvotes: 1

Related Questions