maritime-pirate-attacks/app.R
Francois Pelletier f87660d5ec version initiale
2021-12-20 23:59:17 -05:00

106 lines
2.5 KiB
R

# Packages
library(shiny)
library(shinythemes)
library(dplyr)
library(readr)
library(sf)
library(leaflet)
pirate_attacks_sf_ss2 <-
read_sf("data/geojson/pirate_attacks_sf_ss2.geojson")
source("pirateIcon.R")
# UI
ui <- fluidPage(
theme = shinytheme("lumen"),
titlePanel("Attaques pirates contre des navires"),
sidebarLayout(
sidebarPanel(
# Select type of vessel to plot
selectInput(
inputId = "vessel",
label = strong("Vessel category"),
choices = unique(pirate_attacks_sf_ss2$vessel_category),
selected = "Bulk"
),
# Select date range to be plotted
dateRangeInput(
"date",
strong("Date range"),
start = min(pirate_attacks_sf_ss2$date),
end = max(pirate_attacks_sf_ss2$date),
min = min(pirate_attacks_sf_ss2$date),
max = max(pirate_attacks_sf_ss2$date)
),
),
mainPanel(
leafletOutput("pirateMap"),
p(),
tags$a(
href = "https://github.com/newzealandpaul/Maritime-Pirate-Attacks",
"Crime at Sea: A Global Database of Maritime Pirate Attacks (1993 - 2020)",
target = "_blank"
)
)
)
)
# Server
server <- function(input, output) {
# Filter data
pirate_attacks_sf_maps <- reactive({
req(input$date)
req(input$vessel)
validate(need(
!is.na(input$date[1]) &
!is.na(input$date[2]),
"Error: Please provide both a start and an end date."
))
validate(need(
input$date[1] < input$date[2],
"Error: Start date should be earlier than end date."
))
pirate_attacks_sf_ss2 %>%
filter(
vessel_category == input$vessel,
as.POSIXct(date) > as.POSIXct(input$date[1]) &
as.POSIXct(date) < as.POSIXct(input$date[2])
)
})
output$pirateMap <- renderLeaflet({
source("leaflet_pirate_popuptext.R")
leaflet() %>%
addTiles() %>%
addMarkers(
data = pirate_attacks_sf_maps(),
popup = paste0(
"Type: ",
pirate_attacks_sf_maps()$vessel_category,
"<br>",
"Statut: ",
pirate_attacks_sf_maps()$vessel_status,
"<br>",
"Type d'attaque: ",
pirate_attacks_sf_maps()$attack_type,
"<br>",
"Distance de la côte: ",
round(pirate_attacks_sf_maps()$shore_distance, 2),
"km",
"<br>",
"Date: ",
pirate_attacks_sf_maps()$date
),
icon = pirateIcon,
clusterOptions = markerClusterOptions()
)
})
}
shinyApp(ui, server)