листовка нуждается в проекции для отображения растра - PullRequest
0 голосов
/ 07 ноября 2019

Я пытаюсь создать блестящее приложение, которое отображает растр на карте мира. Пользователь будет взаимодействовать с входными данными, и приложение будет генерировать растр и гистограмму. Код ниже генерирует гистограмму, но не карту, и я хотел помочь разобраться в этом. Вот данные и мой прогресс на данный момент. Я получаю ошибку, как показано input projection is NA

enter image description here

    library(shiny)
    library(tmap)
    library(tmaptools)
    library(raster)
    library(leaflet)
    library(dplyr)

    coords <- structure(list(cell.lon = c(80, 78.25, 78.75, 72.75, 73, 78.5, 
              72.75, 79.5, 79.25, 78.25), cell.lat = c(15.25, 14.25, 12.75, 
              26.75, 22, 23.5, 25, 22.25, 15.25, 24)), class = c("tbl_df", 
             "tbl", "data.frame"), row.names = c(NA, -10L))

    dat.df <- expand.grid(cell.lon = coords$cell.lon,
                          seasonID = c('winter', 'summer'),
                          business = c('train', 'bus', 'taxi'), 
                          variable = c('modP', 'modT'),
                          YearRef = 2001:2003)

    dat.df1 <- coords %>% dplyr::left_join(dat.df) %>% dplyr::mutate(value = rnorm(n()))


    ui <- fluidPage(

        titlePanel('My shiny'),
        sidebarLayout(position = 'left',
                      sidebarPanel(
                      selectInput(inputId = 'seasonRef', label = 'Select season', choices = c('winter','summer'), selected = 'summer'),
                      selectInput(inputId = 'businessRef', label = 'Select business',
                              choices = c('train','bus','taxi'), selected = 'train'),
                      radioButtons(inputId = 'var', label = NULL, 
                                   choiceNames = c('modP','modT'),
                                   choiceValues = c('modP','modT'),
                                   width = '400px', selected = 'modP'),
                      sliderInput('yearRef','Select Year',min=2001,max=2003,value=1)
                  ),

                  mainPanel(
                    tabsetPanel(
                    tabPanel('Map',leafletOutput("map")),
                    tabPanel('Histogram', plotOutput(outputId = 'hist'))
                ))))


    server <- function(input, output) {

      tempI <- reactive({

        temp <- dat.df1 %>% dplyr::filter(business == input$businessRef & 
                                          seasonID == input$seasonRef & 
                                          YearRef == input$yearRef & 
                                          variable == input$var)
       temp.raster <- rasterFromXYZ(temp[, c('cell.lon','cell.lat','value')])
        })

      output$map <- renderLeaflet({

        leaflet() %>% addTiles() %>% addRasterImage(tempI()) 
        })

        output$hist <- renderPlot({
        hist(tempI())
        })
      }

      shinyApp(ui, server)

1 Ответ

0 голосов
/ 08 ноября 2019

В качестве быстрого решения, и поскольку ваши данные представлены в долготной проекции широты, вы можете попытаться добавить это к своему rasterFromXYZ вызову:

rasterFromXYZ(temp[, c('cell.lon','cell.lat','value')], crs = crs('+proj=longlat +datum=WGS84'))

Таким образом, ваш растр будет иметь информацию о проекте дляиспользовать буклет.

Если вы не используете длинноплановую проекцию, вы должны адаптировать вызов crs к тому, который вы используете.

Надеюсь, это поможет вам!

...