С помощью leaflet
, mapview
и leafem
вы можете добиться чего-то вроде этого:
library(raster)
library(mapview)
library(leaflet)
library(leafem)
f <- system.file("external/test.grd", package="raster")
r <- raster(f)
leaflet() %>%
addRasterImage(r, layerId = "values") %>%
addMouseCoordinates() %>%
addImageQuery(r, type="mousemove", layerId = "values")
Поместив это в блестящее приложение, вы получите:
library(raster)
library(mapview)
library(leaflet)
library(shiny)
f <- system.file("external/test.grd", package="raster")
r <- raster(f)
ui <- fluidPage(
leafletOutput("map")
)
server <- function(input, output){
output$map <- renderLeaflet({
leaflet() %>%
addRasterImage(r, layerId = "values") %>%
addMouseCoordinates() %>%
addImageQuery(r, type="mousemove", layerId = "values")
})
}
shinyApp(ui, server)
Следующий пример иллюстрирует идею преобразования растра в простые объекты/шейп-файлы. Это не очень удобно для больших файлов, но метки могут быть разработаны индивидуально, данные редактируются и могут быть легко отображены в таблице.
library(raster)
library(leaflet)
library(shiny)
library(sf)
library(DT)
library(dplyr)
## DATA
f <- system.file("external/test.grd", package="raster")
r <- raster(f)
r1 = aggregate(r, 30)
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)
person
SeGa
schedule
25.06.2018
identifyRaster()
не имеет много дополнительных функций по сравнению сraster::click
, которые я уже использую. В частности, нет возможности отображать данные при наведении курсора мыши, что я и пытаюсь сделать. Пожалуйста, поправьте меня, если я ошибаюсь, я был бы очень рад использовать такое хорошее решение (я люблюrasterVis
и часто его использую). - person AF7   schedule 08.06.2015identifyRaster
иclick
более или менее одинаковы (для решетчатой и базовой графики соответственно). Насколько я знаю, то, что вы пытаетесь сделать, невозможно с графическим устройством, созданным R. Боюсь, вам понадобится код javascript. - person Oscar Perpiñán   schedule 09.06.2015gridSVG
для создания собственного решения. Возможно, вам будут полезны эти примеры (с точечными данными). : . Кроме того, пакет htmlwidgets создает привязки R к библиотекам javascript, но, насколько мне известно, ни один из них работают с растровыми данными. - person Oscar Perpiñán   schedule 09.06.2015ggiraph
на гитхабе теперь содержит функциюgeom_sf_interactive
, которая работает с пакетомsf
. Если я правильно понимаю ваши потребности, я думаю, что это может сработать для вас и обеспечить взаимодействие без Shiny. - person p0bs   schedule 24.06.2018sf
,leaflet
,mapview
,mapedit
и т. д. Я думаю, что вопрос немного устарел. Во всяком случае, я не знал, чтоggiraph
уже реализовалsf
объектов, здорово! - person AF7   schedule 25.06.2018sf
еще не было). Это было медленно и неуклюже. - person AF7   schedule 28.06.2018