Обрезать карты улиц с помощью листовки - PullRequest
0 голосов
/ 07 мая 2019

Мой вопрос является расширением этого вопроса, который я разместил около 2 недель назад.Предположим, у меня есть приложение Shiny, которое позволяет пользователю нарисовать многоугольник вокруг интересующей области и вырезать всю информацию за пределами ограничительной рамки (код предоставлен SeGa ):

library(leaflet)
library(leaflet.extras)
library(sf)
library(raster)
library(maptools)

# Downloads some Worldclim data for cropping
r<-getData('worldclim', var='bio', res=10)
r<-r[[1]]

# Crop 'r' when action button is pressed
ui <- fluidPage(
  leafletOutput("map"),
  p("Your area of extent is:"),
  textOutput("poly"),

  # actionButton takes as input the result of observeEvent
  # Crop 'r' when action button is pressed
  actionButton(inputId = "action", label = "Crop"),
  ## Plot the cropped raster
  plotOutput("cropimg")
)

server <- function(input, output, session) {
  output$map <- renderLeaflet({
    leaflet() %>% 
      addProviderTiles(group = "OSM (default)", providers$OpenStreetMap) %>% 
      addRasterImage(group="Worldclim", r, opacity = 0.75) %>% 
      addDrawToolbar(polylineOptions = F, circleOptions = F, markerOptions = F,  circleMarkerOptions = F, polygonOptions = F) %>% 

      addLayersControl(
        baseGroups = c("OSM (default)"),
        overlayGroups = c("Worldclim"),
        options = layersControlOptions(collapsed = FALSE)
      )

  })

  bboxRV <- reactiveVal(NULL)

  observeEvent(input$map_draw_new_feature, {
    feat <- input$map_draw_new_feature
    coords <- unlist(feat$geometry$coordinates)
    coords <- matrix(coords, ncol = 2, byrow = T)
    poly <- st_sf(st_sfc(st_polygon(list(coords))), crs = st_crs(27700))
    # use Extent not BBOX
    bbox <- extent(poly)
    bboxRV(bbox)
  })

  output$poly <- renderPrint({
    req(bboxRV())
    bboxRV()
  })

  ## ReactiveValue for the cropped Image
  croppedRaster <- reactiveVal(NULL)

  observeEvent(input$action, {
    req(bboxRV())
    getbbox <- bboxRV()
    print("Do whatever with bbox after the actionButton is clicked")
    cropedr <- crop(r, getbbox)
    ## Assign cropped raster to reactiveVal
    croppedRaster(cropedr)
  })

  output$cropimg <- renderPlot({
    req(croppedRaster())
    ## Plot cropped raster
    plot(croppedRaster())
  })
}

shinyApp(ui, server)

Можно ли также вырезать базовый слой из addProviderTiles() (то есть из слоя Open Street Map), чтобы я вывел растровый слой Worldclim r и OSM?Я был бы счастлив с объектом изображения (например, .png) данных OSM - это не должен быть растровый файл с геопространственной информацией.На самом деле я думаю, что мозаичные карты в любом случае используют файлы .png, поэтому они не содержат геопространственных данных.

Заранее благодарен за любую помощь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...