Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

leaflet.extras: measure distance in metres

I would like to create a map where I can interactively measure the distance between 2 points. Luckily, leaflet.extras has exactly what I need, however, I'm struggling to get it to produce the outputs in metres (or kilometres) as opposed to feet.

Consider the below piece of code:

library(leaflet)
library(leaflet.extras)
leaflet() %>% 
  addTiles() %>%
  addDrawToolbar(
    editOptions=editToolbarOptions(selectedPathOptions=selectedPathOptions())
  )

It creates the following map: enter image description here

However, this example (chunk 3) effectively the same code to create the same measuring tool (polyline), except it works in KM, whereas my example works in feet.

If you have any tips that can help me switch to metres as opposed to feet, I would really appreciate it.

like image 237
IVR Avatar asked Oct 29 '25 13:10

IVR


1 Answers

The drawPolylineOptions function does not allow to set the option feet=FALSE.
Hence, I suggest to modify drawPolylineOptions as follows:

library(leaflet)
library(leaflet.extras)

mydrawPolylineOptions <- function (allowIntersection = TRUE, 
    drawError = list(color = "#b00b00", timeout = 2500), 
    guidelineDistance = 20, metric = TRUE, feet = FALSE, zIndexOffset = 2000, 
    shapeOptions = drawShapeOptions(fill = FALSE), repeatMode = FALSE) {
    leaflet::filterNULL(list(allowIntersection = allowIntersection, 
        drawError = drawError, guidelineDistance = guidelineDistance, 
        metric = metric, feet = feet, zIndexOffset = zIndexOffset,
        shapeOptions = shapeOptions,  repeatMode = repeatMode)) }

leaflet() %>% setView(10.975342,45.421588,9) %>%
  addTiles() %>%
  addProviderTiles(providers$OpenStreetMap.Mapnik) %>%
  addDrawToolbar(
    polylineOptions = mydrawPolylineOptions(metric=TRUE, feet=FALSE),
    editOptions=editToolbarOptions(selectedPathOptions=selectedPathOptions())
  ) 

enter image description here

Otherwise, using addMeasures you can add to your map a useful tool to measure distances (see the icon at the top right corner of the map).
It is possibile to specify units used to display length results by the primaryLengthUnit option.

leaflet() %>% setView(10.975342,45.421588,9) %>%
  addTiles() %>%
  addProviderTiles(providers$CartoDB.Positron) %>%
  addDrawToolbar(
    editOptions=editToolbarOptions(selectedPathOptions=selectedPathOptions())
  ) %>% 
  addMeasure(primaryLengthUnit="kilometers", secondaryLengthUnit="kilometers")

enter image description here

like image 180
Marco Sandri Avatar answered Oct 31 '25 03:10

Marco Sandri



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!