首页 > 解决方案 > 如何添加最大距离的折线,基于使用闪亮传单地图中的haversine计算下拉列表中的属性过滤器?

问题描述

我正在尝试基于过滤“名称”​​和“游泳类型”的“shinyapp”在传单地图中显示每个人的游泳事件所覆盖的最大距离。

这是我的代码:

library(shiny)
library(dplyr)
library(shinydashboard)
library(leaflet)
library(osrm)


swimd <- read.csv('swim.csv', stringsAsFactors = F)

ui <- shinyUI(dashboardPage(
  dashboardHeader(title = "Training"),
  dashboardSidebar("A swim session"),
  dashboardBody(
    fluidPage(
      box("", 
          leafletOutput("abc", height = 430),
          width = 8, height = 450, background = 'black'),
      box("", 
          selectInput('st', label = 'Swim Type:', choices = unique(swimd$SwimStyle)),
          selectInput('pn', label = 'Name:', choices = unique(swimd$Name)),
      
          width = 4, height = 450, background = 'black')
  
    )
  )
))

server <- shinyServer(function(input, output, session){

  a <- reactive({
    swimd %>%
      select(Name, SwimStyle, Longitude, Latitude) %>%
      filter( SwimStyle %in% input$st)
  })

  observe({
    updateSelectInput(session, 
                  inputId='pn', 
                  choices = c("< select Name>"="", a()$Name ))
  })

  output$abc <- renderLeaflet({
    leaflet() %>%
      addProviderTiles(providers$OpenStreetMap) %>%
      setView(lng=0, lat=0, zoom = 2)
  })

  observe({
    selection <- a() %>% filter(Name %in% input$pn)
    selection$res <- distHaversine(selection$Longitude, selection$Latitude, r=6378137)
    #to find the difference between two sequence values
    selection[ , list(Name, SwimStyle, Longitude, Latitude,res,Diff=diff(res))]
    b <- selection %>% arrange(desc(Diff)) %>% top_n(2)

    leafletProxy("abc") %>%  clearMarkers() %>% addMarkers(lat = b$Latitude, lng = b$Longitude) %>% 
      addPolylines(route$lon,route$lat, 
                   label = paste(round(route_summary[1]), 'Minutes  - ', round(route_summary[2]/1000), 'Meters'), 
                   labelOptions = labelOptions(noHide = TRUE))
      flyTo(lat = b$Latitude, lng = b$Longitude, zoom = 2)
  })   
})

shinyApp(ui,server)

在此应用程序中,当过滤名称和游泳类型时,游泳的最大距离应在地图中显示为“折线”。例如,一个人完成了 10 分钟的游泳。对于每 1 分钟的游泳,我们记录距离。我想通过从该应用程序中创建的下拉列表中选择一个名称来显示每个人在一分钟内覆盖的最大距离的 addPolyline。

有人可以帮我解决这个用例吗?

谢谢你。

标签: rshinyleafletosrm

解决方案


推荐阅读