私はあなたが住むのが楽しいかもしれない場所をあなたに知らせる光沢のあるアプリで働いています、これは正しく知っている働くアプリです:
これまでのところ気に入っていますが、静的マップの代わりにズームインできるリーフレットマップが本当に必要ですが、これまでのところ、リーフレットパッケージによってラスターがレンダリングまたは更新される際に多くの問題が発生しています。ファイルリポジトリが必要な場合は、githubリポジトリがこれになります
これは現在のアプリのコードですサーバー:
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')
)
)
))
これまでのところ良好ですが、リーフレットマップを使用するように変更しようとすると、うまく機能しません。実際、リーフレットマップが表示されないので、これを試しました。
サーバ:
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)
}
)
})
そして
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')
)
)
))
これはエラーをスローしていませんが、マップはレンダリングされておらず、次の警告があります
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
問題は、height
相対的なものにできないプロットの問題です。
絶対値に置き換えるだけで、次のように表示されます。
leafletOutput("map", width = "100%", height = 400)
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加