# import specific functions from relevant libraries box::use(leaflet[ leaflet, providers, addTiles, addProviderTiles, addPolygons, addLegend, addControl, setView, addCircleMarkers, colorBin, colorNumeric, markerClusterOptions, labelOptions ]) box::use(leaflet.extras[ addFullscreenControl, addSearchFeatures, searchFeaturesOptions ]) box::use(dplyr[filter]) box::use(viridis) #* @param df data frame containing map coordinates #* @param vernacular the vernacular names of the animals #* @param locality regions in Poland # write map function mapData <- function(df, vernacular) { # set default values if arguments are NULL or empty if (is.null(vernacular)) { vernacular <- "Mandarin Duck" } else { vernacular } # filter the data based on vernacular and locality filtered_df <- df |> filter(vernacularName == vernacular) # ensure there is data to display if (nrow(filtered_df) == 0) { leaflet() |> addTiles() |> addPopups(lng = 0, lat = 0, popup = "No data available for the selected filters") } # create a color palette for markers pal <- colorNumeric(palette = "Paired", domain = filtered_df$individualCount) # create the tooltip labels labels <- paste0( "Vernacular Name: ", filtered_df$vernacularName, "
", "Individual Count: ", filtered_df$individualCount, "
", "Locality: ", filtered_df$locality ) |> lapply(htmltools::HTML) # create the map leaflet(filtered_df) |> addTiles() |> addProviderTiles(providers$CartoDB.Positron) |> addCircleMarkers( lng = ~longitudeDecimal, lat = ~latitudeDecimal, color = ~ pal(individualCount), fillColor = ~ pal(individualCount), fillOpacity = 0.7, label = labels, labelOptions = labelOptions( style = list("font-weight" = "normal", padding = "3px 8px"), textsize = "15px", direction = "auto" ) ) |> addLegend( pal = pal, values = ~individualCount, title = "Individual Count", position = "bottomright" ) }