You want the splice
function on the native array object.
arr.splice(index, 0, item);
will insert item
into arr
at the specified index
(deleting 0
items first, that is, it's just an insert).
In this example we will create an array and add an element to it into index 2:
var arr = [];
arr[0] = "Jani";
arr[1] = "Hege";
arr[2] = "Stale";
arr[3] = "Kai Jim";
arr[4] = "Borge";
console.log(arr.join()); // Jani,Hege,Stale,Kai Jim,Borge
arr.splice(2, 0, "Lene");
console.log(arr.join()); // Jani,Hege,Lene,Stale,Kai Jim,Borge
I have updated my previous answer to make it more clear and illustrate how to use mapshot from package mapview.
Moreover, following Jake's question below, I noticed that it might be necessary to specify a link to a tile (within addTiles), or the map might be downloaded with a grey background.
Server
server = function(input, output){
mymap <- reactive({
# here I have specified a tile from openstreetmap
leaflet() %>% addTiles('http://{s}.tile.openstreetmap.de/tiles/osmde/{z}/{x}/{y}.png')
})
output$map <- renderLeaflet({
mymap()
})
# function with all the features that we want to add to the map
myfun <- function(map){
addCircles(map,12.5,42,radius=500) %>% addMarkers(12,42,popup="Rome")
}
observe({
leafletProxy("map") %>% myfun()
})
# map that will be downloaded
mapdown <- reactive({
# we need to specify coordinates (and zoom level) that we are currently viewing
bounds <- input$map_bounds
latRng <- range(bounds$north, bounds$south)
lngRng <- range(bounds$east, bounds$west)
mymap() %>% myfun() %>% setView(lng = (lngRng[1]+lngRng[2])/2, lat = (latRng[1]+latRng[2])/2, zoom = input$map_zoom)
})
output$map_down <- downloadHandler(
filename = 'mymap.pdf',
content = function(file) {
# temporarily switch to the temp dir, in case you do not have write
# permission to the current working directory
owd <- setwd(tempdir())
on.exit(setwd(owd))
# using saveWidget and webshot (old)
saveWidget(mapdown(), "temp.html", selfcontained = FALSE)
webshot("temp.html", file = file, cliprect = "viewport")
# using mapshot we can substitute the above two lines of code
# mapshot(mapdown(), file = file, cliprect = "viewport")
}
)
}
UI
ui <- fluidPage(
sidebarPanel(
checkboxInput('returnpdf', 'output pdf?', FALSE),
conditionalPanel(
condition = "input.returnpdf == true",
downloadButton('map_down')
)
),
mainPanel(leafletOutput("map"))
)
Best Answer
Currently it's not available in the Leaflet API. Luckily if Leaflet is using SVG, all objects are DOM elements and we can simply change their order. Here's a sample code:
};