2016-09-05 19 views
6

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

shiny app

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 

Odpowiedz

2

Problem jest height twojego wykresu, który nie może być względny.

Wystarczy zastąpić ją o wartość bezwzględną i zostanie ona wyświetlona na przykład:

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

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? –

+1

Właściwie to powiedziałem, nieprzejrzystość –