pracuję w błyszczącą aplikacją, która pozwala wiedzieć, miejsca, gdzie może to być przyjemne dla ciebie żyć, jest to aplikacja działa prawidłowo wiedzieć:Mapa nie czyni w błyszczące aplikacji z ulotką i rastrem
Podoba mi się do tej pory, ale naprawdę wolałbym mieć mapę ulotek, na której można było powiększyć widok zamiast statycznej mapy, ale do tej pory miałem wiele problemów z renderowaniem lub aktualizowaniem rastra. pakiet ulotek. Repozytorium GitHub jest to jeden jeśli trzeba pliki repository
Jest to kod z aplikacji teraz Serwer:
library(shiny)
library(raster)
library(rworldmap)
library(rgdal)
library(dplyr)
data("countriesCoarse")
uno <- readRDS("uno.rds")
World <- getData('worldclim', var='bio', res=10)
cities <- readRDS("cities.rds")
shinyServer(function(input, output) {
output$distPlot <- renderPlot({
uno[World[[10]] > ifelse(input$degrees == "Celcius", (input$MaxTempC*10), (((input$MaxTempF-32)*5/9)*10))] <- NA
uno[World[[11]] < ifelse(input$degrees == "Celcius", (input$MinTempC*10), (((input$MinTempF-32)*5/9)*10))] <- NA
uno[World[[1]] < ifelse(input$degrees == "Celcius", min(input$RangeTempC*10), min(((input$RangeTempF-32)*5/9)*10))] <- NA
uno[World[[1]] > ifelse(input$degrees == "Celcius", max(input$RangeTempC*10), max(((input$RangeTempF-32)*5/9)*10))] <- NA
uno[World[[12]] < ifelse(input$degrees == "Celcius", min(input$RangePPC), min(input$RangePPF*25.4))] <- NA
uno[World[[12]] > ifelse(input$degrees == "Celcius", max(input$RangePPC), max(input$RangePPF*25.4))] <- NA
plot(uno, col ="red", legend = FALSE)
plot(countriesCoarse, add = TRUE)
})
output$downloadPlot <- downloadHandler(
filename = function() { paste("WhereToLive", '.png', sep='') },
content = function(file) {
png(file)
uno[World[[10]] > ifelse(input$degrees == "Celcius", (input$MaxTempC*10), (((input$MaxTempF-32)*5/9)*10))] <- NA
uno[World[[11]] < ifelse(input$degrees == "Celcius", (input$MinTempC*10), (((input$MinTempF-32)*5/9)*10))] <- NA
uno[World[[1]] < ifelse(input$degrees == "Celcius", min(input$RangeTempC*10), min(((input$RangeTempF-32)*5/9)*10))] <- NA
uno[World[[1]] > ifelse(input$degrees == "Celcius", max(input$RangeTempC*10), max(((input$RangeTempF-32)*5/9)*10))] <- NA
uno[World[[12]] < ifelse(input$degrees == "Celcius", min(input$RangePPC), min(input$RangePPF*25.4))] <- NA
uno[World[[12]] > ifelse(input$degrees == "Celcius", max(input$RangePPC), max(input$RangePPF*25.4))] <- NA
plot(uno, col ="red", legend = FALSE)
plot(countriesCoarse, add = TRUE)
dev.off()
})
output$visFun <- renderDataTable({
uno[World[[10]] > ifelse(input$degrees == "Celcius", (input$MaxTempC*10), (((input$MaxTempF-32)*5/9)*10))] <- NA
uno[World[[11]] < ifelse(input$degrees == "Celcius", (input$MinTempC*10), (((input$MinTempF-32)*5/9)*10))] <- NA
uno[World[[1]] < ifelse(input$degrees == "Celcius", min(input$RangeTempC*10), min(((input$RangeTempF-32)*5/9)*10))] <- NA
uno[World[[1]] > ifelse(input$degrees == "Celcius", max(input$RangeTempC*10), max(((input$RangeTempF-32)*5/9)*10))] <- NA
uno[World[[12]] < ifelse(input$degrees == "Celcius", min(input$RangePPC), min(input$RangePPF*25.4))] <- NA
uno[World[[12]] > ifelse(input$degrees == "Celcius", max(input$RangePPC), max(input$RangePPF*25.4))] <- NA
cities$exists <- extract(uno, cities[,2:3])
cities <- filter(cities, exists == 1)
cities <- cities[,c(1,4,5,6)]
cities <- filter(cities, pop > min(as.numeric(as.character(input$Population))))
cities <- filter(cities, pop < max(as.numeric(as.character(input$Population))))
cities
})
output$downloadData <- downloadHandler(
filename = function() { paste("cities", '.csv', sep='') },
content = function(file) {
uno[World[[10]] > ifelse(input$degrees == "Celcius", (input$MaxTempC*10), (((input$MaxTempF-32)*5/9)*10))] <- NA
uno[World[[11]] < ifelse(input$degrees == "Celcius", (input$MinTempC*10), (((input$MinTempF-32)*5/9)*10))] <- NA
uno[World[[1]] < ifelse(input$degrees == "Celcius", min(input$RangeTempC*10), min(((input$RangeTempF-32)*5/9)*10))] <- NA
uno[World[[1]] > ifelse(input$degrees == "Celcius", max(input$RangeTempC*10), max(((input$RangeTempF-32)*5/9)*10))] <- NA
uno[World[[12]] < ifelse(input$degrees == "Celcius", min(input$RangePPC), min(input$RangePPF*25.4))] <- NA
uno[World[[12]] > ifelse(input$degrees == "Celcius", max(input$RangePPC), max(input$RangePPF*25.4))] <- NA
cities$exists <- extract(uno, cities[,2:3])
cities <- filter(cities, exists == 1)
cities <- filter(cities$pop > min(input$Population))
cities <- filter(cities$pop < max(input$Population))
cities <- cities[,c(1,4,5,6)]
write.csv(cities, file)
}
)
})
UI:
library(shiny)
library(raster)
library(rworldmap)
library(rgdal)
data("countriesCoarse")
shinyUI(fluidPage(
titlePanel("Where should you live according to your climate preferences?"),
sidebarLayout(
sidebarPanel(
h3("Select your climate preferences"),
p("Using worldclim database, and knowing your climate prefeneces, you can now using this tool get an idea of where in the world you should live."),
p("Just use the sliders to anwer the simple questions we ask and you will get a map together with a downloadable table of where the climate suits you."),
selectInput(inputId = "degrees", label = "Temp units:", choices =
c("Celcius"= "Celcius",
"Fahrenheit" = "Fahrenheit")),
submitButton("Update View", icon("refresh")),
conditionalPanel(condition = "input.degrees == 'Celcius'",
sliderInput(inputId = "MaxTempC",
label = "What's the average maximum temperature you want to endure during the summer?",
min = 0,
max = 50,
value = 30),
sliderInput(inputId = "MinTempC",
label = "What's the average minimum temperature you want to endure during the winter?",
min = -40,
max = 60,
value = 0),
sliderInput(inputId = "RangeTempC",
label = "What's your prefered temperature range?",
min = -10,
max = 30,
value = c(0, 20)),
sliderInput(inputId = "RangePPC",
label = "What's your prefered precipitation range?",
min = 0,
max = 5000,
value = c(0, 5000))),
conditionalPanel(condition = "input.degrees == 'Fahrenheit'",
sliderInput(inputId = "MaxTempF",
label = "What's the average maximum temperature you want to endure during the summer?",
min = 0,
max = 120,
value = 90),
sliderInput(inputId = "MinTempF",
label = "What's the average minimum temperature you want to endure during the winter?",
min = -40,
max = 60,
value = 32),
sliderInput(inputId = "RangeTempF",
label = "What's your prefered temperature range?",
min = -40,
max = 90,
value = c(32, 70)),
sliderInput(inputId = "RangePPF",
label = "What's your prefered precipitation range?",
min = 0,
max = 200,
value = c(0, 200))),
sliderInput(inputId = "Population",
label = "how big of a town do you want to live in (Population)?",
min = 0,
max = 20000000,
value = c(0, 20000000, by = 1)))
,
# Show a plot of the generated distribution
mainPanel(
plotOutput("distPlot"),
downloadButton('downloadPlot', 'Download Plot'),
dataTableOutput("visFun"),
downloadButton('downloadData', 'Download Table')
)
)
))
Jak na razie dobrze, ale kiedy Próbuję to zmienić, aby korzystać z mapy ulotek, która nie działa bardzo dobrze, w rzeczywistości mapa ulotek się nie pojawia, Próbowałem tego:
Serwer:
library(shiny)
library(raster)
library(rworldmap)
library(rgdal)
library(dplyr)
library(leaflet)
library(sp)
data("countriesCoarse")
uno <- readRDS("uno.rds")
World <- getData('worldclim', var='bio', res=10)
cities <- readRDS("cities.rds")
shinyServer(function(input, output) {
output$map <- renderLeaflet({
uno[World[[10]] > ifelse(input$degrees == "Celcius", (input$MaxTempC*10), (((input$MaxTempF-32)*5/9)*10))] <- NA
uno[World[[11]] < ifelse(input$degrees == "Celcius", (input$MinTempC*10), (((input$MinTempF-32)*5/9)*10))] <- NA
uno[World[[1]] < ifelse(input$degrees == "Celcius", min(input$RangeTempC*10), min(((input$RangeTempF-32)*5/9)*10))] <- NA
uno[World[[1]] > ifelse(input$degrees == "Celcius", max(input$RangeTempC*10), max(((input$RangeTempF-32)*5/9)*10))] <- NA
uno[World[[12]] < ifelse(input$degrees == "Celcius", min(input$RangePPC), min(input$RangePPF*25.4))] <- NA
uno[World[[12]] > ifelse(input$degrees == "Celcius", max(input$RangePPC), max(input$RangePPF*25.4))] <- NA
l <- leaflet() %>% setView(0, 0, zoom = 1)
l <- l %>% addRasterImage(uno)
l
})
output$downloadPlot <- downloadHandler(
filename = function() { paste("WhereToLive", '.png', sep='') },
content = function(file) {
png(file)
uno[World[[10]] > ifelse(input$degrees == "Celcius", (input$MaxTempC*10), (((input$MaxTempF-32)*5/9)*10))] <- NA
uno[World[[11]] < ifelse(input$degrees == "Celcius", (input$MinTempC*10), (((input$MinTempF-32)*5/9)*10))] <- NA
uno[World[[1]] < ifelse(input$degrees == "Celcius", min(input$RangeTempC*10), min(((input$RangeTempF-32)*5/9)*10))] <- NA
uno[World[[1]] > ifelse(input$degrees == "Celcius", max(input$RangeTempC*10), max(((input$RangeTempF-32)*5/9)*10))] <- NA
uno[World[[12]] < ifelse(input$degrees == "Celcius", min(input$RangePPC), min(input$RangePPF*25.4))] <- NA
uno[World[[12]] > ifelse(input$degrees == "Celcius", max(input$RangePPC), max(input$RangePPF*25.4))] <- NA
plot(uno, col ="red", legend = FALSE)
plot(countriesCoarse, add = TRUE)
dev.off()
})
output$visFun <- renderDataTable({
uno[World[[10]] > ifelse(input$degrees == "Celcius", (input$MaxTempC*10), (((input$MaxTempF-32)*5/9)*10))] <- NA
uno[World[[11]] < ifelse(input$degrees == "Celcius", (input$MinTempC*10), (((input$MinTempF-32)*5/9)*10))] <- NA
uno[World[[1]] < ifelse(input$degrees == "Celcius", min(input$RangeTempC*10), min(((input$RangeTempF-32)*5/9)*10))] <- NA
uno[World[[1]] > ifelse(input$degrees == "Celcius", max(input$RangeTempC*10), max(((input$RangeTempF-32)*5/9)*10))] <- NA
uno[World[[12]] < ifelse(input$degrees == "Celcius", min(input$RangePPC), min(input$RangePPF*25.4))] <- NA
uno[World[[12]] > ifelse(input$degrees == "Celcius", max(input$RangePPC), max(input$RangePPF*25.4))] <- NA
cities$exists <- extract(uno, cities[,2:3])
cities <- filter(cities, exists == 1)
cities <- cities[,c(1,4,5,6)]
cities <- filter(cities, pop > min(as.numeric(as.character(input$Population))))
cities <- filter(cities, pop < max(as.numeric(as.character(input$Population))))
cities
})
output$downloadData <- downloadHandler(
filename = function() { paste("cities", '.csv', sep='') },
content = function(file) {
uno[World[[10]] > ifelse(input$degrees == "Celcius", (input$MaxTempC*10), (((input$MaxTempF-32)*5/9)*10))] <- NA
uno[World[[11]] < ifelse(input$degrees == "Celcius", (input$MinTempC*10), (((input$MinTempF-32)*5/9)*10))] <- NA
uno[World[[1]] < ifelse(input$degrees == "Celcius", min(input$RangeTempC*10), min(((input$RangeTempF-32)*5/9)*10))] <- NA
uno[World[[1]] > ifelse(input$degrees == "Celcius", max(input$RangeTempC*10), max(((input$RangeTempF-32)*5/9)*10))] <- NA
uno[World[[12]] < ifelse(input$degrees == "Celcius", min(input$RangePPC), min(input$RangePPF*25.4))] <- NA
uno[World[[12]] > ifelse(input$degrees == "Celcius", max(input$RangePPC), max(input$RangePPF*25.4))] <- NA
cities$exists <- extract(uno, cities[,2:3])
cities <- filter(cities, exists == 1)
cities <- filter(cities$pop > min(input$Population))
cities <- filter(cities$pop < max(input$Population))
cities <- cities[,c(1,4,5,6)]
write.csv(cities, file)
}
)
})
i
UI:
library(shiny)
library(raster)
library(rworldmap)
library(rgdal)
library(leaflet)
data("countriesCoarse")
shinyUI(fluidPage(
titlePanel("Where should you live according to your climate preferences?"),
sidebarLayout(
sidebarPanel(
h3("Select your climate preferences"),
p("Using worldclim database, and knowing your climate prefeneces, you can now using this tool get an idea of where in the world you should live."),
p("Just use the sliders to anwer the simple questions we ask and you will get a map together with a downloadable table of where the climate suits you."),
selectInput(inputId = "degrees", label = "Temp units:", choices =
c("Celcius"= "Celcius",
"Fahrenheit" = "Fahrenheit")),
submitButton("Update View", icon("refresh")),
conditionalPanel(condition = "input.degrees == 'Celcius'",
sliderInput(inputId = "MaxTempC",
label = "What's the average maximum temperature you want to endure during the summer?",
min = 0,
max = 50,
value = 30),
sliderInput(inputId = "MinTempC",
label = "What's the average minimum temperature you want to endure during the winter?",
min = -40,
max = 60,
value = 0),
sliderInput(inputId = "RangeTempC",
label = "What's your prefered temperature range?",
min = -10,
max = 30,
value = c(0, 20)),
sliderInput(inputId = "RangePPC",
label = "What's your prefered precipitation range?",
min = 0,
max = 5000,
value = c(0, 5000))),
conditionalPanel(condition = "input.degrees == 'Fahrenheit'",
sliderInput(inputId = "MaxTempF",
label = "What's the average maximum temperature you want to endure during the summer?",
min = 0,
max = 120,
value = 90),
sliderInput(inputId = "MinTempF",
label = "What's the average minimum temperature you want to endure during the winter?",
min = -40,
max = 60,
value = 32),
sliderInput(inputId = "RangeTempF",
label = "What's your prefered temperature range?",
min = -40,
max = 90,
value = c(32, 70)),
sliderInput(inputId = "RangePPF",
label = "What's your prefered precipitation range?",
min = 0,
max = 200,
value = c(0, 200))),
sliderInput(inputId = "Population",
label = "how big of a town do you want to live in (Population)?",
min = 0,
max = 20000000,
value = c(0, 20000000, by = 1)))
,
# Show a plot of the generated distribution
mainPanel(
leafletOutput("map", width = "100%", height = "100%"),
downloadButton('downloadPlot', 'Download Plot'),
dataTableOutput("visFun"),
downloadButton('downloadData', 'Download Table')
)
)
))
To nie rzuca jakieś błędy, ale mapa nie jest trójwymiarowa i mam następujące ostrzeżenia
Listening on http://127.0.0.1:7231
Warning in rgdal::rawTransform(projfrom, projto, nrow(xy), xy[, 1], xy[, :
54 projected point(s) not finite
Warning in rgdal::rawTransform(projfrom, projto, nrow(xy), xy[, 1], xy[, :
54 projected point(s) not finite
Warning in rgdal::rawTransform(projfrom, projto, nrow(xy), xy[, 1], xy[, :
54 projected point(s) not finite
Dziękuję, wydaje się, że nadal trzeba czekać 9 godzin, aby móc przyznaniu nagród, jeszcze jedno , czy wiesz, jak sprawić, by raster był półprzezroczysty? –
Właściwie to powiedziałem, nieprzejrzystość –