2016-09-05 3 views
6

ich arbeite in einer glänzenden App, die Sie Orte wissen läßt, wo es angenehm sein könnte für Sie zu leben, ist dies die Arbeits App richtig kennen:Karte nicht mit Faltblatt und Raster in glänzendem app macht

shiny app

Ich mag es so weit, aber ich würde wirklich lieber eine Broschüre Map, wo Sie anstelle einer statischen Karte zoomen könnte, aber bis jetzt habe ich eine Menge Probleme mit dem Raster gerendert oder aktualisiert von der Prospektpaket. Die Github-Repository ist dies ein, wenn Sie die Dateien benötigen repository

Dies ist der Code der App ist jetzt Server:

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') 
) 
) 
)) 

So weit so gut, aber wenn Ich versuche, es zu ändern, um die Broschüre Karte zu verwenden, es funktioniert nicht sehr gut, in der Tat erscheint die Broschüre Karte nicht, ich habe es versucht:

Server:

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) 
} 
) 
}) 

und

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') 
) 
) 
)) 

Dies wirft keinen Fehler, aber die Karte nicht zu machen, und ich habe die folgenden Warnungen

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 

Antwort

2

Das Problem ist die height Ihrer Handlung, die nicht relativ sein kann.

Gerade sie durch einen absoluten Wert ersetzen und es wird angezeigt, zum Beispiel:

leafletOutput("map", width = "100%", height = 400) 
+0

Danke, es scheint, dass ich noch 9 Stunden warten müssen, um zu vergeben, um die Lage sein, die Prämie, Eine weitere Sache Weißt du, wie man das Raster halbtransparent macht? –

+1

Ich habe es tatsächlich erfunden, Opazität –

Verwandte Themen