Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to specify radius units in addCircleMarkers() when using Leaflet in R

Tags:

r

leaflet

I'm trying to visualize a shipment from origin to destination using a leaflet map created with R within a shiny application.

I want to add a circle marker of a radius corresponding to a the odist and ddist variables which come form a reactive dataframe called main()

below is a relevant snapshot with accompanying code:

Pic1

output$leaflet1 <- renderLeaflet({
  leaflet() %>%
    addCircleMarkers(data = main(), lng = main()$Olong, lat = main()$Olat, color = 'black', fillColor = coyGreen,
                     radius = main()$odist, opacity = .5) %>% 
    addCircleMarkers(data = main(), lng = main()$Dlong, lat = main()$Dlat, color = 'black', fillColor = coyGreen, 
                     radius = main()$ddist, opacity = .3)
})

For the above example the argument radius = main()$odist is equivalent to radius = 50. However, the 50 units seem to be arbitrary (the cirlce is smaller than the larger one with radius = main()$ddist = 125 however both circles enlarge and shrink as I zoom in and out). I would like to be able to set the radius of my circle marker to be a fixed radius in miles, however I haven't been able to figure out how to do so. Any help is greatly appreciated!

like image 884
Rick Arko Avatar asked Jan 06 '23 14:01

Rick Arko


1 Answers

If you use addCircles instead of addCircleMarkers your circles will have constant radius (in meters). Here's a reproducible example using mapview which uses addCircleMarkers. On top we plot the same locations using addCircles

library(mapview)

m <- mapview(breweries91) # uses addCirclemarkers so circle radius changes with zoom

m@map %>% 
  addCircles(data = breweries91, color = "red", radius = 100) # circle radius constant

If you zoom in you will see that the initially smaller red circles will become bigger in relation to the standard blue circlemarkers used in mapview

like image 138
TimSalabim Avatar answered Jan 08 '23 05:01

TimSalabim