将非地理地图视图对象放入 Shiny 应用程序
Place non-geographic mapview object into Shiny app
基本上我的问题是如何将 PNG 或 mapview 对象放入闪亮的应用程序中以便在其上放置标记。
我有 15 个非地理平面图 mapview 对象,如上面的 PNG,在另一个 SO 用户的帮助下使用下面的代码转换为 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)
这对我有用:
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
(这是一个传单小部件对象)。鉴于栅格没有地理参考,添加提供商切片没有意义。
基本上我的问题是如何将 PNG 或 mapview 对象放入闪亮的应用程序中以便在其上放置标记。
我有 15 个非地理平面图 mapview 对象,如上面的 PNG,在另一个 SO 用户的帮助下使用下面的代码转换为 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)
这对我有用:
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
(这是一个传单小部件对象)。鉴于栅格没有地理参考,添加提供商切片没有意义。