R 在有光泽的图形中绘制带有传单的多个多边形
我正在努力在一个基于传单包的闪亮应用程序中绘制多个多边形 以下是我希望的非应用程序输出:R 在有光泽的图形中绘制带有传单的多个多边形,r,leaflet,shiny,polygons,shiny-server,R,Leaflet,Shiny,Polygons,Shiny Server,我正在努力在一个基于传单包的闪亮应用程序中绘制多个多边形 以下是我希望的非应用程序输出: data <- list( beam1 = data.frame(lat = c(-115,-125, -125, -115), lon = c(32, 32, 45,45)), beam2 = data.frame(lat = c(-100, -111, -111, -100), lon =
data <- list(
beam1 = data.frame(lat = c(-115,-125, -125, -115),
lon = c(32, 32, 45,45)),
beam2 = data.frame(lat = c(-100, -111, -111, -100),
lon = c(42, 42, 50,50))
)
dataTemp <- do.call(rbind, lapply(data, function(x) rbind(x, NA)))
library(leaflet)
m = leaflet() %>% addTiles()
m %>%
addPolygons(
dataTemp[,"lat"],
dataTemp[,"lon"],
color = c('red', 'green'), weight = 3
)
服务器.R:
library(shiny)
library(leaflet)
data <- list(
beam1 = data.frame(lat = c(-115,-125, -125, -115),
lon = c(32, 32, 45,45)),
beam2 = data.frame(lat = c(-100, -111, -111, -100),
lon = c(42, 42, 50,50))
)
# server activity
shinyServer(function(input, output, session) {
map <- createLeafletMap(session, "map")
observe({
if(input$drawPoints == 0) {
return(NULL)
} else {
map$clearShapes()
for (i in seq_along(data)) {
map$addPolygon(
data[[i]][,"lon"], # - notice, i had to change lat and lon
data[[i]][,"lat"],
layerId=c("1"),
list( fillOpacity=0.4),
list(color = c('red','green')[i])
)
Sys.sleep(3) # - this is to see first (red) polygon
}
}
})
})
库(闪亮)
图书馆(单张)
数据我已经更新了您的代码以使用传单代理,这是更新现有地图的一种更干净的方法,并且是当前在对传单
包进行更新时维护的方法(据我所知)。我在data.frame中切换了你的“lat”和“lon”以使它们正确。我还将原点再次添加到坐标的末尾以完成形状——这就是为什么有三角形而没有矩形。最后,我将多边形的layerId
更改为I
,以使它们不同——这就是它们相互擦除的原因
我假设您希望对形状进行硬编码,但是有一些方法可以向用户打开多边形打印选择(甚至图形)。有趣的注意事项:在解决此问题时,了解了proxy
中的deferUntilFlush
参数——如果不将此设置为FALSE
,则两个形状仅在Sys.sleep
完成计数后才打印
用户界面
服务器.R
library(shiny)
library(leaflet)
data <- list(
beam1 = data.frame(lon = c(-115,-125, -125, -115, -115),
lat = c(32, 32, 45, 45, 32)),
beam2 = data.frame(lon = c(-100, -111, -111, -100, -100),
lat = c(42, 42, 50, 50, 42))
)
shinyServer(function(input, output, session) {
map <- leaflet() %>% addTiles() %>% setView(-93.85, 37.45, zoom = 4)
output$map <- renderLeaflet(map)
proxy <- leafletProxy("map", deferUntilFlush = FALSE)
observeEvent(input$drawPoints, {
proxy %>% clearShapes()
for (i in seq_along(data)) {
proxy %>% addPolygons(
data[[i]][,"lon"],
data[[i]][,"lat"],
layerId=i,
opacity=0.4,
color = c('red','green')[i]
)
Sys.sleep(2) # - this is to see first (red) polygon
}
})
})
库(闪亮)
图书馆(单张)
数据%setView(-93.85,37.45,缩放=4)
输出$map%addPolygons(
数据[[i]][,“lon”],
数据[[i]][,“lat”],
layerId=i,
不透明度=0.4,
颜色=c(‘红色’、‘绿色’)[i]
)
Sys.sleep(2)#-这是要查看第一个(红色)多边形
}
})
})
偶然来到这里。。。所以我不是这方面的专家。作为shiny的用户,我可能会说你没有按照我期望的方式来做。。。我建议您使用renderLeaflet命令生成输出。我发现这篇文章可能对你有用:。你还在寻找答案吗?因为如果您仍然感兴趣并且还没有找到解决方案,我可能会有一个。@ndimhypervol即使OP没有特别注意,您的答案也可能对其他人有所帮助。
library(shiny)
library(leaflet)
shinyUI(navbarPage("Beams", id="nav",
tabPanel("Interactive map",
div(class="outer",
leafletOutput("map", "100%", 650),
actionButton("drawPoints", "Draw")
)
)
))
library(shiny)
library(leaflet)
data <- list(
beam1 = data.frame(lon = c(-115,-125, -125, -115, -115),
lat = c(32, 32, 45, 45, 32)),
beam2 = data.frame(lon = c(-100, -111, -111, -100, -100),
lat = c(42, 42, 50, 50, 42))
)
shinyServer(function(input, output, session) {
map <- leaflet() %>% addTiles() %>% setView(-93.85, 37.45, zoom = 4)
output$map <- renderLeaflet(map)
proxy <- leafletProxy("map", deferUntilFlush = FALSE)
observeEvent(input$drawPoints, {
proxy %>% clearShapes()
for (i in seq_along(data)) {
proxy %>% addPolygons(
data[[i]][,"lon"],
data[[i]][,"lat"],
layerId=i,
opacity=0.4,
color = c('red','green')[i]
)
Sys.sleep(2) # - this is to see first (red) polygon
}
})
})