-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathapp.R
95 lines (82 loc) · 1.99 KB
/
app.R
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
library(shiny)
library(tidyverse)
library(sf)
reactlog::reactlog_enable()
options(shiny.maxRequestSize = 60 * 1024 ^ 2)
ui <- fluidPage(
titlePanel("Cálculo de distância entre pontos"),
sidebarLayout(
sidebarPanel(
fileInput(
"file",
label = NULL,
accept = ".gpkg",
buttonLabel = "Selecione .gpkg..."
),
actionButton(
"calc",
label = "Iniciar cálculo",
icon = icon("fas fa-cogs")
),
downloadButton("download_gpkg", label = "Download .gpkg"),
downloadButton("download_csv", label = "Download .csv")
),
mainPanel(
tabsetPanel(
tabPanel(
"Dados",
h3("Amostra do arquivo:"),
tableOutput("sample")
),
tabPanel(
"Sobre",
includeMarkdown("sobre.md")
)
)
)
)
)
server <- function(input, output, session) {
file_read <- reactive({
req(input$file)
ext <- tools::file_ext(input$file$name)
shinyFeedback::feedbackWarning("file", ext != "gpkg", "Formato inválido!")
st_read(input$file$datapath)
})
calc_results <- eventReactive(input$calc, {
id <- showNotification(
"Calculando ...",
duration = NULL,
closeButton = FALSE
)
on.exit(removeNotification(id), add = TRUE)
data <- file_read() %>%
create_linestring() %>%
calc_dist()
})
calc_csv <- reactive({
calc_results() %>% transform_csv()
})
output$sample <- renderTable({
req(calc_csv())
calc_csv() %>% head(n = 15)
}
)
output$download_gpkg <- downloadHandler(
filename = function() {
paste0(input$upload, "resultado.gpkg")
},
content = function(file) {
st_write(calc_results(), file)
}
)
output$download_csv <- downloadHandler(
filename = function() {
paste0(input$upload, "resultado.csv")
},
content = function(file) {
st_write(calc_csv(), file)
}
)
}
shinyApp(ui, server)