Как кластеризовать все маркеры, если у меня есть разные типы маркеров? - PullRequest
0 голосов
/ 21 декабря 2018

Я создаю карту листовок в R Shiny с реактивными функциями.

Я отформатировал различные типы маркеров, создав разные иконки для каждого из них, указав это в выходных данных карты листов с помощью 'icon = booked_o_icon' (так далее.).В результате у меня есть разные разделы «addMarkers» для каждого типа значков.

     ## app.R ##
    library(shiny)
    library(shinydashboard)
    library(leaflet)

    not_booked <- rides[which(rides$status=="Not booked"),]
    unbooked <- rides[which(rides$status=="Unbooked"),]
    booked <- rides[which(rides$status=="Booked"),]

    ui <- dashboardPage(
      dashboardHeader(title = "Rides"),
      dashboardSidebar(),
      dashboardBody(
        fluidRow(hr(),
                 dateRangeInput <- dateRangeInput(
                   inputId = "daterange",
                   label = "Select the date range",
                   start = min("2018-04-25"),
                   end = max("2018-11-23"),
                   min = min("2018-04-25"),
                   max = max("2018-11-23"),
                   format = "yyyy-mm-dd",
                   separator = "-"
                 ),
                 textOutput("range"),
                 tableOutput("subdata"),
                 leafletOutput("leafletMap")
        ))
    )

    # Format markers
    booked_o_icon <- makeIcon(
      "/home/kimberly/Downloads/origin_booked.svg", 
      iconWidth = 32, iconHeight = 32)

    booked_d_icon <- makeIcon(
      "/home/kimberly/Downloads/destination_booked.svg", 
      iconWidth = 32, iconHeight = 32)

    unbooked_o_icon <- makeIcon(
      "/home/kimberly/Downloads/origin_unbooked.svg",
      iconWidth = 32, iconHeight = 32)

    unbooked_d_icon <- makeIcon(
      "/home/kimberly/Downloads/destination_unbooked.svg", 
      iconWidth = 32, iconHeight = 32)

    not_booked_o_icon <- makeIcon(
      "/home/kimberly/Downloads/origin_notbooked.svg",
      iconWidth = 32, iconHeight = 32)

    not_booked_d_icon <- makeIcon(
      "/home/kimberly/Downloads/destination_notbooked.svg", 
      iconWidth = 32, iconHeight = 32)



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

      output$subdata <- renderTable({
        s = subset(rides, rides$date>=input$daterange[1] & rides$date<= input$daterange[2])
        table(s$status)
      })

        # Reactive function
          reactiveData <- reactive({
            rides[rides$date>=input$daterange[1] & rides$date<= input$daterange[2],]

      })

      output$leafletMap <- renderLeaflet({
        leaflet(data = reactiveData()) %>% 
          addProviderTiles("OpenStreetMap") %>% 
          addMarkers(data=booked,
                     lat = booked$origin_lat, 
                     lng = booked$origin_lon,
                     group = "Booked",
                     popup = as.character.Date(booked$date),
                     clusterOptions = markerClusterOptions(),
                     icon = booked_o_icon)  %>%   
          addMarkers(data=not_booked,
                     lat = not_booked$origin_lat, 
                     lng = not_booked$origin_lon,
                     popup = as.character.Date(not_booked$date),
                     clusterOptions = markerClusterOptions(),
                     icon = not_booked_o_icon) %>%
          addMarkers(data=unbooked,
                     lat = unbooked$origin_lat, 
                     lng = unbooked$origin_lon,
                     popup = as.character.Date(unbooked$date),
                     clusterOptions = markerClusterOptions(),
                     icon = unbooked_o_icon) %>%
          addMarkers(data=booked,
                     lat = booked$dest_lat, 
                     lng = booked$dest_lon,
                     popup = as.character.Date(booked$date),
                     clusterOptions = markerClusterOptions(),
                     icon = booked_d_icon) %>%
          addMarkers(data=not_booked,
                     lat = not_booked$dest_lat, 
                     lng = not_booked$dest_lon,
                     popup = as.character.Date(not_booked$date),
                     clusterOptions = markerClusterOptions(),
                     icon = not_booked_d_icon) %>%
          addMarkers(data=unbooked,
                     lat = unbooked$dest_lat, 
                     lng = unbooked$dest_lon,
                     popup = as.character.Date(unbooked$date),
                     clusterOptions = markerClusterOptions(),
                     icon = unbooked_d_icon)
      })

          # Observe function 

          observeEvent(input$dateRangeInput, {leafletProxy("leafletMap", data=reactiveData()) %>%
                    clearMarkers(input$dateRangeInput)
        })

      } 



    shinyApp(ui, server)

Когда я кластеризирую маркеры, это заканчивает кластеризацией каждого типа маркеров (их 6), переполняющих карту.Как сделать так, чтобы все точки были сгруппированы вместе, но остались разными значками?

...