繁体   English   中英

地图无法在带有传单和栅格的闪亮应用中呈现

[英]Map does not render in shiny app with leaflet and raster

我正在一个闪亮的应用程序中工作,它可以让您知道让您生活愉快的地方,这是可以正常工作的应用程序,知道:

闪亮的应用

到目前为止,我还是很喜欢的,但是我真的希望有一个可以放大的传单地图,而不是静态地图,但是到目前为止,传单包正在渲染或更新栅格时,我一直遇到很多问题。 如果需要文件存储库 ,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)
}
)
})

用户界面:

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

用户界面:

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)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM