将非地理地图视图对象放入Shiny应用程序中

问题描述 投票:0回答:1

基本上我的问题是如何将 PNG 或地图视图对象放入闪亮的应用程序中,以便在其上放置标记。

enter image description here

我有 15 个非地理平面图地图视图对象,如上面的 PNG,在另一个 SO 用户的帮助下使用下面的代码转换为地图视图对象问题在这里

library(raster)
library(png)
library(mapview)

ohs<-data.frame(OHS_no=c(1001:1010), x=runif(10, 0, 1), y = runif(10, 0, 0.8), AGE = c(4, 15, 15, 43, 5, 50, 67, 77, 77, 28))
web_img <- "https://i.sstatic.net/8aSe9.png"

png <- readPNG(readBin(web_img, "raw", 1e6))

rst_blue <- raster(png[, , 1])
rst_green <- raster(png[, , 2])
rst_red <- raster(png[, , 3])

img <- brick(rst_red, rst_green, rst_blue)

m <- viewRGB(img)
abs(cbind(rnorm(40), rnorm(40)))
m@map %>% addMarkers(lng = ohs$x, lat = ohs$y)

我正在尝试创建一个 Shiny 应用程序将其全部放在一起,但卡在 renderLeaflet 命令处,并且不确定如何将我的 m@map 对象放置在应用程序中。基本上以下功能以地图对象作为传单。

library(shiny)
library(leaflet)
ohs<-data.frame(OHS_no=c(1001:1010), x=runif(10, 0, 1), y = runif(10, 0, 0.8))
r_colors <- rgb(t(col2rgb(colors()) / 255))
names(r_colors) <- colors()

ui <- fluidPage(
 leafletOutput("mymap"),
 p(),

)

server <- function(input, output, session) {



  output$mymap <- renderLeaflet({
   leaflet() %>%
      addProviderTiles("Stamen.TonerLite",
                       options = providerTileOptions(noWrap = TRUE)
      ) %>%
      addMarkers(lng = ohs$x, lat = ohs$y)
  })
}

shinyApp(ui, server)
r shiny r-leaflet r-mapview
1个回答
2
投票

这对我有用:

library(shiny)
library(mapview)
library(png)
library(raster)

ohs<-data.frame(OHS_no=c(1001:1010), x=runif(10, 0, 1), y = runif(10, 0, 0.8))
r_colors <- rgb(t(col2rgb(colors()) / 255))
names(r_colors) <- colors()

ui <- fluidPage(
  leafletOutput("mymap"),
  p()

)

server <- function(input, output, session) {
  web_img <- "https://i.sstatic.net/8aSe9.png"

  png <- readPNG(readBin(web_img, "raw", 1e6))

  rst_blue <- raster(png[, , 1])
  rst_green <- raster(png[, , 2])
  rst_red <- raster(png[, , 3])

  img <- brick(rst_red, rst_green, rst_blue)

  m <- viewRGB(img)

  output$mymap <- renderLeaflet({
    m@map %>%
      addMarkers(lng = ohs$x, lat = ohs$y)
  })
}

shinyApp(ui, server)

只需将

leaflet()
替换为
m@map
(这是一个传单小部件对象)。鉴于栅格未进行地理参考,因此添加提供程序切片没有意义。

© www.soinside.com 2019 - 2024. All rights reserved.