【问题标题】:Place non-geographic mapview object into Shiny app将非地理地图视图对象放入闪亮的应用程序
【发布时间】:2016-07-27 07:56:01
【问题描述】:

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

我有 15 个非地理平面图 mapview 对象,例如上面的 PNG,在另一个 SO 用户 question here 的帮助下使用下面的代码转换为 mapview 对象:

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 <- "http://i.stack.imgur.com/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 leaflet r-mapview


    【解决方案1】:

    这对我有用:

    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 <- "http://i.stack.imgur.com/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(这是一个传单小部件对象)。鉴于栅格未进行地理参考,因此添加提供程序切片没有意义。

    【讨论】:

    • 它已经是一个传单小部件对象。惊人的。使用 Markers 和 Shiny 带来非地理空间信息的宝贵信息。
    • mapview 文档中都有描述。
    • 当我尝试“addCircleMarkers(data = OHS, popup = popupTable(breweries91, zcol = c("AGE"))) 时,我已经使用了文档,将 x 和 y 分别更改为 lng 和 lat “我收到一条错误消息。有没有办法将弹出功能添加到 Shiny 应用程序?
    • addCircleMarkers(data = OHS, popup = popupTable(OHS, zcol = c("AGE"))) 怎么样? breweries91mapview 包中的测试数据,没有名为 AGE 的列。
    猜你喜欢
    • 2018-01-06
    • 1970-01-01
    • 2014-01-01
    • 2018-10-30
    • 2013-08-09
    • 1970-01-01
    • 2014-08-22
    • 2023-03-06
    • 2023-01-11
    相关资源
    最近更新 更多