leaflet.extras:测量距离(以米为单位)

4
我希望创建一张互动地图,可以测量两个点之间的距离。幸运的是,leaflet.extras恰好有我需要的功能。但是我无法使它输出以米(或千米)为单位的结果,而不是英尺。
考虑以下代码片段:
library(leaflet)
library(leaflet.extras)
leaflet() %>% 
  addTiles() %>%
  addDrawToolbar(
    editOptions=editToolbarOptions(selectedPathOptions=selectedPathOptions())
  )

它创建了以下地图:enter image description here 然而,这个示例(块3)有效地使用相同的代码创建相同的测量工具(折线),但它以公里为单位工作,而我的示例以英尺为单位工作。如果您有任何提示可以帮助我切换到米而不是英尺,我将非常感激。
1个回答

4

drawPolylineOptions函数不允许设置选项feet=FALSE
因此,我建议修改drawPolylineOptions如下:

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())
  ) 

在此输入图片描述

另外,使用addMeasures功能,您可以向地图添加一个有用的测量距离工具(请看地图右上角的图标)。
您可以通过primaryLengthUnit选项指定用于显示长度结果的单位。

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


谢谢,Marco,这正是我在寻找的! - IVR
作为跟进,您是否知道是否有一种简单的方法可以使 addDrawToolbar() 函数的“画圆”功能还显示以公里为单位的半径?非常感谢:) - IVR
1
@IVR 这是一个有趣的问题。请为 SO 社区发布一个新问题! - Marco Sandri
@MarcoSandri 我非常乐意接受关于绘制功能的PR,以包括米/英尺参数。 - user507484
@BhaskarKarambelkar 对不起,我不明白。请您详细解释一下您的问题。 - Marco Sandri

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接