Acessar valores em um raster diretamente pelo mapa, HELP

Olá amigos internautas, estou trabalhando recentemente com raster mas estou com um problema quando eu tento acessar o valor de uma coordenada diretamente pelo mapa, já olhei inúmeros tutoriais ou sites de documentações ( mais de 20 =[ ) e não achei nada parecido ou que fizesse isso, eu estou carregando meu raster da seguinte maneiras:

library(raster)
library(rgdal)
library(ggplot2)
library(dplyr)


DSM_HARVa <- raster("f:/Shiny/coeficientes/a.tif")

DSM_HARV_ptsa <- rasterToPoints(DSM_HARVa, spatial = TRUE)
DSM_HARV_dfa  <- data.frame(DSM_HARV_ptsa)
rm(DSM_HARV_pts)

ggplot() +
  geom_raster(data = DSM_HARV_dfa , aes(x = x, y = y, fill = a)) + 
  ggtitle("Coeficiente a") + 
  coord_equal()

E com isso eu obtenho o seguinte:
image

Alguém saberia como posso acessar os valores clicando no mapa?

Felipe, olá!

Primeiramente: os gráficos gerados pelo ggplot2 são estáticos, não possuem interatividade, ou seja, não da pra clicar neles e esperar que ele retorne alguma coisa.

Pra você começar a gerar alguma interatividade é necessária a utilização de outros pacotes. Um exemplo é o plotly, onde há uma função que transforma um gráfico ggplot em um objeto interativo. Exemplos podem ser encontrados no seguinte link:

Plotly Graphing Library for ggplot2 | ggplot2 | Plotly

Não sei se irá resolver o seu problema com o raster, mas veja algo com shiny + leaflet, uma combinação mais complexa de pacotes que geram interatividade.

Espero ter ajudado.

Opa, eu acabei tendo que usar o leaflet mesmo, mas ainda não consegui acesso aos valores

Veja se a documentação do leaflet não te ajuda:

Leaflet for R - Using Leaflet with Shiny (rstudio.github.io)

RESPOSTA PARA O PROBLEMA

library(raster)
library(leaflet)
library(shiny)
library(sf)
library(DT)
library(dplyr)


## DATA
# f <- system.file("external/test.grd", package="raster")
r <- raster("f:/Shiny/coeficientes/a.tif")
r1 = aggregate(r, 1)

plot(r)

sp = st_as_sf(rasterToPolygons(r1))
cn = st_coordinates(st_transform(st_centroid(sp),4326))
sp = st_transform(sp, 4326)
sp = cbind(sp, cn)
sp$id <- 1:nrow(sp)
colnames(sp)[1] <- "value"


## UI
ui <- fluidPage(
  leafletOutput("map"),
  uiOutput("newValueUI"),
  textInput("newVal", label = "Enter new value"),
  actionButton("enter", "Enter new value"),
  hr(),
  dataTableOutput("table")
)


## SERVER
server <- function(input, output){
  
  ## Reactive Shapefile
  sp_react <- reactiveValues(sp = sp)
  
  ## Leaflet Map
  output$map <- renderLeaflet({
    pal= colorNumeric(topo.colors(25), sp_react$sp$value)
    leaflet() %>% 
      addPolygons(data = sp_react$sp, label= paste(
        "Lng: ", as.character(round(sp_react$sp$X,4)),
        "Lat: ", as.character(round(sp_react$sp$Y,4)),
        "Val: ", as.character(round(sp_react$sp$value,4))),
        color = ~pal(sp_react$sp$value), 
        layerId = sp_react$sp$id
      )
  })
  
  ## Observe Map Clicks
  observeEvent(input$map_shape_click, {
    
    click_id = input$map_shape_click$id
    
    click_grid <- sp_react$sp[sp_react$sp$id == click_id,]
    
  })
  
  ## Observe Action Button
  observeEvent(input$enter, {
    click_id <- input$map_shape_click$id
    sp_react$sp[sp_react$sp$id == click_id,]$value <- as.numeric(input$newVal)
  })
  
  ## Data Table
  output$table <- DT::renderDataTable({
    sp_react$sp %>% st_set_geometry(NULL) %>% 
      dplyr::select(id,X,Y,value)
  })
  proxy = dataTableProxy('table')

  ## Table Proxy
  observeEvent(input$map_shape_click$id, {
    req(input$map_shape_click$id)
    proxy %>% selectRows(as.numeric(input$map_shape_click$id))
  })
}

shinyApp(ui, server)
2 curtidas

Imaginei que a resposta era com label mesmo. Mas esqueci do AddPolygons. Obrigado por compartilhar.